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 MediaConnect SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-11-14@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-mediaconnect)
+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.MediaConnect](http://hackage.haskell.org/package/amazonka-mediaconnect/docs/Amazonka-MediaConnect.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-mediaconnect` 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-mediaconnect.cabal b/amazonka-mediaconnect.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-mediaconnect.cabal
@@ -0,0 +1,177 @@
+cabal-version:      2.2
+name:               amazonka-mediaconnect
+version:            2.0
+synopsis:           Amazon MediaConnect 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-14@ 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.MediaConnect.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.MediaConnect" 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-mediaconnect
+
+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.MediaConnect
+    Amazonka.MediaConnect.AddFlowMediaStreams
+    Amazonka.MediaConnect.AddFlowOutputs
+    Amazonka.MediaConnect.AddFlowSources
+    Amazonka.MediaConnect.AddFlowVpcInterfaces
+    Amazonka.MediaConnect.CreateFlow
+    Amazonka.MediaConnect.DeleteFlow
+    Amazonka.MediaConnect.DescribeFlow
+    Amazonka.MediaConnect.DescribeOffering
+    Amazonka.MediaConnect.DescribeReservation
+    Amazonka.MediaConnect.GrantFlowEntitlements
+    Amazonka.MediaConnect.Lens
+    Amazonka.MediaConnect.ListEntitlements
+    Amazonka.MediaConnect.ListFlows
+    Amazonka.MediaConnect.ListOfferings
+    Amazonka.MediaConnect.ListReservations
+    Amazonka.MediaConnect.ListTagsForResource
+    Amazonka.MediaConnect.PurchaseOffering
+    Amazonka.MediaConnect.RemoveFlowMediaStream
+    Amazonka.MediaConnect.RemoveFlowOutput
+    Amazonka.MediaConnect.RemoveFlowSource
+    Amazonka.MediaConnect.RemoveFlowVpcInterface
+    Amazonka.MediaConnect.RevokeFlowEntitlement
+    Amazonka.MediaConnect.StartFlow
+    Amazonka.MediaConnect.StopFlow
+    Amazonka.MediaConnect.TagResource
+    Amazonka.MediaConnect.Types
+    Amazonka.MediaConnect.Types.AddMaintenance
+    Amazonka.MediaConnect.Types.AddMediaStreamRequest
+    Amazonka.MediaConnect.Types.AddOutputRequest
+    Amazonka.MediaConnect.Types.Algorithm
+    Amazonka.MediaConnect.Types.Colorimetry
+    Amazonka.MediaConnect.Types.DestinationConfiguration
+    Amazonka.MediaConnect.Types.DestinationConfigurationRequest
+    Amazonka.MediaConnect.Types.DurationUnits
+    Amazonka.MediaConnect.Types.EncoderProfile
+    Amazonka.MediaConnect.Types.EncodingName
+    Amazonka.MediaConnect.Types.EncodingParameters
+    Amazonka.MediaConnect.Types.EncodingParametersRequest
+    Amazonka.MediaConnect.Types.Encryption
+    Amazonka.MediaConnect.Types.Entitlement
+    Amazonka.MediaConnect.Types.EntitlementStatus
+    Amazonka.MediaConnect.Types.FailoverConfig
+    Amazonka.MediaConnect.Types.FailoverMode
+    Amazonka.MediaConnect.Types.Flow
+    Amazonka.MediaConnect.Types.Fmtp
+    Amazonka.MediaConnect.Types.FmtpRequest
+    Amazonka.MediaConnect.Types.GrantEntitlementRequest
+    Amazonka.MediaConnect.Types.InputConfiguration
+    Amazonka.MediaConnect.Types.InputConfigurationRequest
+    Amazonka.MediaConnect.Types.Interface
+    Amazonka.MediaConnect.Types.InterfaceRequest
+    Amazonka.MediaConnect.Types.KeyType
+    Amazonka.MediaConnect.Types.ListedEntitlement
+    Amazonka.MediaConnect.Types.ListedFlow
+    Amazonka.MediaConnect.Types.Maintenance
+    Amazonka.MediaConnect.Types.MaintenanceDay
+    Amazonka.MediaConnect.Types.MediaStream
+    Amazonka.MediaConnect.Types.MediaStreamAttributes
+    Amazonka.MediaConnect.Types.MediaStreamAttributesRequest
+    Amazonka.MediaConnect.Types.MediaStreamOutputConfiguration
+    Amazonka.MediaConnect.Types.MediaStreamOutputConfigurationRequest
+    Amazonka.MediaConnect.Types.MediaStreamSourceConfiguration
+    Amazonka.MediaConnect.Types.MediaStreamSourceConfigurationRequest
+    Amazonka.MediaConnect.Types.MediaStreamType
+    Amazonka.MediaConnect.Types.Messages
+    Amazonka.MediaConnect.Types.NetworkInterfaceType
+    Amazonka.MediaConnect.Types.Offering
+    Amazonka.MediaConnect.Types.Output
+    Amazonka.MediaConnect.Types.PriceUnits
+    Amazonka.MediaConnect.Types.Protocol
+    Amazonka.MediaConnect.Types.Range
+    Amazonka.MediaConnect.Types.Reservation
+    Amazonka.MediaConnect.Types.ReservationState
+    Amazonka.MediaConnect.Types.ResourceSpecification
+    Amazonka.MediaConnect.Types.ResourceType
+    Amazonka.MediaConnect.Types.ScanMode
+    Amazonka.MediaConnect.Types.SetSourceRequest
+    Amazonka.MediaConnect.Types.Source
+    Amazonka.MediaConnect.Types.SourcePriority
+    Amazonka.MediaConnect.Types.SourceType
+    Amazonka.MediaConnect.Types.State
+    Amazonka.MediaConnect.Types.Status
+    Amazonka.MediaConnect.Types.Tcs
+    Amazonka.MediaConnect.Types.Transport
+    Amazonka.MediaConnect.Types.UpdateEncryption
+    Amazonka.MediaConnect.Types.UpdateFailoverConfig
+    Amazonka.MediaConnect.Types.UpdateMaintenance
+    Amazonka.MediaConnect.Types.VpcInterface
+    Amazonka.MediaConnect.Types.VpcInterfaceAttachment
+    Amazonka.MediaConnect.Types.VpcInterfaceRequest
+    Amazonka.MediaConnect.UntagResource
+    Amazonka.MediaConnect.UpdateFlow
+    Amazonka.MediaConnect.UpdateFlowEntitlement
+    Amazonka.MediaConnect.UpdateFlowMediaStream
+    Amazonka.MediaConnect.UpdateFlowOutput
+    Amazonka.MediaConnect.UpdateFlowSource
+    Amazonka.MediaConnect.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-mediaconnect-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.MediaConnect
+    Test.Amazonka.MediaConnect
+    Test.Amazonka.MediaConnect.Internal
+
+  build-depends:
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-mediaconnect
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AddFlowMediaStreams.yaml b/fixture/AddFlowMediaStreams.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowMediaStreams.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/AddFlowMediaStreamsResponse.proto b/fixture/AddFlowMediaStreamsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowMediaStreamsResponse.proto
diff --git a/fixture/AddFlowOutputs.yaml b/fixture/AddFlowOutputs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowOutputs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/AddFlowOutputsResponse.proto b/fixture/AddFlowOutputsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowOutputsResponse.proto
diff --git a/fixture/AddFlowSources.yaml b/fixture/AddFlowSources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowSources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/AddFlowSourcesResponse.proto b/fixture/AddFlowSourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowSourcesResponse.proto
diff --git a/fixture/AddFlowVpcInterfaces.yaml b/fixture/AddFlowVpcInterfaces.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowVpcInterfaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/AddFlowVpcInterfacesResponse.proto b/fixture/AddFlowVpcInterfacesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddFlowVpcInterfacesResponse.proto
diff --git a/fixture/CreateFlow.yaml b/fixture/CreateFlow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFlow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/CreateFlowResponse.proto b/fixture/CreateFlowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFlowResponse.proto
diff --git a/fixture/DeleteFlow.yaml b/fixture/DeleteFlow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFlow.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/DeleteFlowResponse.proto b/fixture/DeleteFlowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFlowResponse.proto
diff --git a/fixture/DescribeFlow.yaml b/fixture/DescribeFlow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFlow.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/DescribeFlowResponse.proto b/fixture/DescribeFlowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFlowResponse.proto
diff --git a/fixture/DescribeOffering.yaml b/fixture/DescribeOffering.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOffering.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/DescribeOfferingResponse.proto b/fixture/DescribeOfferingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOfferingResponse.proto
diff --git a/fixture/DescribeReservation.yaml b/fixture/DescribeReservation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/DescribeReservationResponse.proto b/fixture/DescribeReservationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReservationResponse.proto
diff --git a/fixture/GrantFlowEntitlements.yaml b/fixture/GrantFlowEntitlements.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GrantFlowEntitlements.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/GrantFlowEntitlementsResponse.proto b/fixture/GrantFlowEntitlementsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GrantFlowEntitlementsResponse.proto
diff --git a/fixture/ListEntitlements.yaml b/fixture/ListEntitlements.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntitlements.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/ListEntitlementsResponse.proto b/fixture/ListEntitlementsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntitlementsResponse.proto
diff --git a/fixture/ListFlows.yaml b/fixture/ListFlows.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFlows.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/ListFlowsResponse.proto b/fixture/ListFlowsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFlowsResponse.proto
diff --git a/fixture/ListOfferings.yaml b/fixture/ListOfferings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListOfferings.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/ListOfferingsResponse.proto b/fixture/ListOfferingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListOfferingsResponse.proto
diff --git a/fixture/ListReservations.yaml b/fixture/ListReservations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListReservations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/ListReservationsResponse.proto b/fixture/ListReservationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListReservationsResponse.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/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/PurchaseOffering.yaml b/fixture/PurchaseOffering.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PurchaseOffering.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/PurchaseOfferingResponse.proto b/fixture/PurchaseOfferingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PurchaseOfferingResponse.proto
diff --git a/fixture/RemoveFlowMediaStream.yaml b/fixture/RemoveFlowMediaStream.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowMediaStream.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/RemoveFlowMediaStreamResponse.proto b/fixture/RemoveFlowMediaStreamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowMediaStreamResponse.proto
diff --git a/fixture/RemoveFlowOutput.yaml b/fixture/RemoveFlowOutput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowOutput.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/RemoveFlowOutputResponse.proto b/fixture/RemoveFlowOutputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowOutputResponse.proto
diff --git a/fixture/RemoveFlowSource.yaml b/fixture/RemoveFlowSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowSource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/RemoveFlowSourceResponse.proto b/fixture/RemoveFlowSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowSourceResponse.proto
diff --git a/fixture/RemoveFlowVpcInterface.yaml b/fixture/RemoveFlowVpcInterface.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowVpcInterface.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/RemoveFlowVpcInterfaceResponse.proto b/fixture/RemoveFlowVpcInterfaceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveFlowVpcInterfaceResponse.proto
diff --git a/fixture/RevokeFlowEntitlement.yaml b/fixture/RevokeFlowEntitlement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeFlowEntitlement.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/RevokeFlowEntitlementResponse.proto b/fixture/RevokeFlowEntitlementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeFlowEntitlementResponse.proto
diff --git a/fixture/StartFlow.yaml b/fixture/StartFlow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartFlow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/StartFlowResponse.proto b/fixture/StartFlowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartFlowResponse.proto
diff --git a/fixture/StopFlow.yaml b/fixture/StopFlow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopFlow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/StopFlowResponse.proto b/fixture/StopFlowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopFlowResponse.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/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/UpdateFlow.yaml b/fixture/UpdateFlow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlow.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/UpdateFlowEntitlement.yaml b/fixture/UpdateFlowEntitlement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowEntitlement.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/UpdateFlowEntitlementResponse.proto b/fixture/UpdateFlowEntitlementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowEntitlementResponse.proto
diff --git a/fixture/UpdateFlowMediaStream.yaml b/fixture/UpdateFlowMediaStream.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowMediaStream.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/UpdateFlowMediaStreamResponse.proto b/fixture/UpdateFlowMediaStreamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowMediaStreamResponse.proto
diff --git a/fixture/UpdateFlowOutput.yaml b/fixture/UpdateFlowOutput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowOutput.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/UpdateFlowOutputResponse.proto b/fixture/UpdateFlowOutputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowOutputResponse.proto
diff --git a/fixture/UpdateFlowResponse.proto b/fixture/UpdateFlowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowResponse.proto
diff --git a/fixture/UpdateFlowSource.yaml b/fixture/UpdateFlowSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowSource.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/mediaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  mediaconnect.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/UpdateFlowSourceResponse.proto b/fixture/UpdateFlowSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFlowSourceResponse.proto
diff --git a/gen/Amazonka/MediaConnect.hs b/gen/Amazonka/MediaConnect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect.hs
@@ -0,0 +1,542 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MediaConnect
+-- 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-14@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- API for AWS Elemental MediaConnect
+module Amazonka.MediaConnect
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AddFlowOutputs420Exception
+    _AddFlowOutputs420Exception,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** CreateFlow420Exception
+    _CreateFlow420Exception,
+
+    -- ** ForbiddenException
+    _ForbiddenException,
+
+    -- ** GrantFlowEntitlements420Exception
+    _GrantFlowEntitlements420Exception,
+
+    -- ** InternalServerErrorException
+    _InternalServerErrorException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** FlowActive
+    newFlowActive,
+
+    -- ** FlowDeleted
+    newFlowDeleted,
+
+    -- ** FlowStandby
+    newFlowStandby,
+
+    -- * Operations
+    -- $operations
+
+    -- ** AddFlowMediaStreams
+    AddFlowMediaStreams (AddFlowMediaStreams'),
+    newAddFlowMediaStreams,
+    AddFlowMediaStreamsResponse (AddFlowMediaStreamsResponse'),
+    newAddFlowMediaStreamsResponse,
+
+    -- ** AddFlowOutputs
+    AddFlowOutputs (AddFlowOutputs'),
+    newAddFlowOutputs,
+    AddFlowOutputsResponse (AddFlowOutputsResponse'),
+    newAddFlowOutputsResponse,
+
+    -- ** AddFlowSources
+    AddFlowSources (AddFlowSources'),
+    newAddFlowSources,
+    AddFlowSourcesResponse (AddFlowSourcesResponse'),
+    newAddFlowSourcesResponse,
+
+    -- ** AddFlowVpcInterfaces
+    AddFlowVpcInterfaces (AddFlowVpcInterfaces'),
+    newAddFlowVpcInterfaces,
+    AddFlowVpcInterfacesResponse (AddFlowVpcInterfacesResponse'),
+    newAddFlowVpcInterfacesResponse,
+
+    -- ** CreateFlow
+    CreateFlow (CreateFlow'),
+    newCreateFlow,
+    CreateFlowResponse (CreateFlowResponse'),
+    newCreateFlowResponse,
+
+    -- ** DeleteFlow
+    DeleteFlow (DeleteFlow'),
+    newDeleteFlow,
+    DeleteFlowResponse (DeleteFlowResponse'),
+    newDeleteFlowResponse,
+
+    -- ** DescribeFlow
+    DescribeFlow (DescribeFlow'),
+    newDescribeFlow,
+    DescribeFlowResponse (DescribeFlowResponse'),
+    newDescribeFlowResponse,
+
+    -- ** DescribeOffering
+    DescribeOffering (DescribeOffering'),
+    newDescribeOffering,
+    DescribeOfferingResponse (DescribeOfferingResponse'),
+    newDescribeOfferingResponse,
+
+    -- ** DescribeReservation
+    DescribeReservation (DescribeReservation'),
+    newDescribeReservation,
+    DescribeReservationResponse (DescribeReservationResponse'),
+    newDescribeReservationResponse,
+
+    -- ** GrantFlowEntitlements
+    GrantFlowEntitlements (GrantFlowEntitlements'),
+    newGrantFlowEntitlements,
+    GrantFlowEntitlementsResponse (GrantFlowEntitlementsResponse'),
+    newGrantFlowEntitlementsResponse,
+
+    -- ** ListEntitlements (Paginated)
+    ListEntitlements (ListEntitlements'),
+    newListEntitlements,
+    ListEntitlementsResponse (ListEntitlementsResponse'),
+    newListEntitlementsResponse,
+
+    -- ** ListFlows (Paginated)
+    ListFlows (ListFlows'),
+    newListFlows,
+    ListFlowsResponse (ListFlowsResponse'),
+    newListFlowsResponse,
+
+    -- ** ListOfferings (Paginated)
+    ListOfferings (ListOfferings'),
+    newListOfferings,
+    ListOfferingsResponse (ListOfferingsResponse'),
+    newListOfferingsResponse,
+
+    -- ** ListReservations (Paginated)
+    ListReservations (ListReservations'),
+    newListReservations,
+    ListReservationsResponse (ListReservationsResponse'),
+    newListReservationsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PurchaseOffering
+    PurchaseOffering (PurchaseOffering'),
+    newPurchaseOffering,
+    PurchaseOfferingResponse (PurchaseOfferingResponse'),
+    newPurchaseOfferingResponse,
+
+    -- ** RemoveFlowMediaStream
+    RemoveFlowMediaStream (RemoveFlowMediaStream'),
+    newRemoveFlowMediaStream,
+    RemoveFlowMediaStreamResponse (RemoveFlowMediaStreamResponse'),
+    newRemoveFlowMediaStreamResponse,
+
+    -- ** RemoveFlowOutput
+    RemoveFlowOutput (RemoveFlowOutput'),
+    newRemoveFlowOutput,
+    RemoveFlowOutputResponse (RemoveFlowOutputResponse'),
+    newRemoveFlowOutputResponse,
+
+    -- ** RemoveFlowSource
+    RemoveFlowSource (RemoveFlowSource'),
+    newRemoveFlowSource,
+    RemoveFlowSourceResponse (RemoveFlowSourceResponse'),
+    newRemoveFlowSourceResponse,
+
+    -- ** RemoveFlowVpcInterface
+    RemoveFlowVpcInterface (RemoveFlowVpcInterface'),
+    newRemoveFlowVpcInterface,
+    RemoveFlowVpcInterfaceResponse (RemoveFlowVpcInterfaceResponse'),
+    newRemoveFlowVpcInterfaceResponse,
+
+    -- ** RevokeFlowEntitlement
+    RevokeFlowEntitlement (RevokeFlowEntitlement'),
+    newRevokeFlowEntitlement,
+    RevokeFlowEntitlementResponse (RevokeFlowEntitlementResponse'),
+    newRevokeFlowEntitlementResponse,
+
+    -- ** StartFlow
+    StartFlow (StartFlow'),
+    newStartFlow,
+    StartFlowResponse (StartFlowResponse'),
+    newStartFlowResponse,
+
+    -- ** StopFlow
+    StopFlow (StopFlow'),
+    newStopFlow,
+    StopFlowResponse (StopFlowResponse'),
+    newStopFlowResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateFlow
+    UpdateFlow (UpdateFlow'),
+    newUpdateFlow,
+    UpdateFlowResponse (UpdateFlowResponse'),
+    newUpdateFlowResponse,
+
+    -- ** UpdateFlowEntitlement
+    UpdateFlowEntitlement (UpdateFlowEntitlement'),
+    newUpdateFlowEntitlement,
+    UpdateFlowEntitlementResponse (UpdateFlowEntitlementResponse'),
+    newUpdateFlowEntitlementResponse,
+
+    -- ** UpdateFlowMediaStream
+    UpdateFlowMediaStream (UpdateFlowMediaStream'),
+    newUpdateFlowMediaStream,
+    UpdateFlowMediaStreamResponse (UpdateFlowMediaStreamResponse'),
+    newUpdateFlowMediaStreamResponse,
+
+    -- ** UpdateFlowOutput
+    UpdateFlowOutput (UpdateFlowOutput'),
+    newUpdateFlowOutput,
+    UpdateFlowOutputResponse (UpdateFlowOutputResponse'),
+    newUpdateFlowOutputResponse,
+
+    -- ** UpdateFlowSource
+    UpdateFlowSource (UpdateFlowSource'),
+    newUpdateFlowSource,
+    UpdateFlowSourceResponse (UpdateFlowSourceResponse'),
+    newUpdateFlowSourceResponse,
+
+    -- * Types
+
+    -- ** Algorithm
+    Algorithm (..),
+
+    -- ** Colorimetry
+    Colorimetry (..),
+
+    -- ** DurationUnits
+    DurationUnits (..),
+
+    -- ** EncoderProfile
+    EncoderProfile (..),
+
+    -- ** EncodingName
+    EncodingName (..),
+
+    -- ** EntitlementStatus
+    EntitlementStatus (..),
+
+    -- ** FailoverMode
+    FailoverMode (..),
+
+    -- ** KeyType
+    KeyType (..),
+
+    -- ** MaintenanceDay
+    MaintenanceDay (..),
+
+    -- ** MediaStreamType
+    MediaStreamType (..),
+
+    -- ** NetworkInterfaceType
+    NetworkInterfaceType (..),
+
+    -- ** PriceUnits
+    PriceUnits (..),
+
+    -- ** Protocol
+    Protocol (..),
+
+    -- ** Range
+    Range (..),
+
+    -- ** ReservationState
+    ReservationState (..),
+
+    -- ** ResourceType
+    ResourceType (..),
+
+    -- ** ScanMode
+    ScanMode (..),
+
+    -- ** SourceType
+    SourceType (..),
+
+    -- ** State
+    State (..),
+
+    -- ** Status
+    Status (..),
+
+    -- ** Tcs
+    Tcs (..),
+
+    -- ** AddMaintenance
+    AddMaintenance (AddMaintenance'),
+    newAddMaintenance,
+
+    -- ** AddMediaStreamRequest
+    AddMediaStreamRequest (AddMediaStreamRequest'),
+    newAddMediaStreamRequest,
+
+    -- ** AddOutputRequest
+    AddOutputRequest (AddOutputRequest'),
+    newAddOutputRequest,
+
+    -- ** DestinationConfiguration
+    DestinationConfiguration (DestinationConfiguration'),
+    newDestinationConfiguration,
+
+    -- ** DestinationConfigurationRequest
+    DestinationConfigurationRequest (DestinationConfigurationRequest'),
+    newDestinationConfigurationRequest,
+
+    -- ** EncodingParameters
+    EncodingParameters (EncodingParameters'),
+    newEncodingParameters,
+
+    -- ** EncodingParametersRequest
+    EncodingParametersRequest (EncodingParametersRequest'),
+    newEncodingParametersRequest,
+
+    -- ** Encryption
+    Encryption (Encryption'),
+    newEncryption,
+
+    -- ** Entitlement
+    Entitlement (Entitlement'),
+    newEntitlement,
+
+    -- ** FailoverConfig
+    FailoverConfig (FailoverConfig'),
+    newFailoverConfig,
+
+    -- ** Flow
+    Flow (Flow'),
+    newFlow,
+
+    -- ** Fmtp
+    Fmtp (Fmtp'),
+    newFmtp,
+
+    -- ** FmtpRequest
+    FmtpRequest (FmtpRequest'),
+    newFmtpRequest,
+
+    -- ** GrantEntitlementRequest
+    GrantEntitlementRequest (GrantEntitlementRequest'),
+    newGrantEntitlementRequest,
+
+    -- ** InputConfiguration
+    InputConfiguration (InputConfiguration'),
+    newInputConfiguration,
+
+    -- ** InputConfigurationRequest
+    InputConfigurationRequest (InputConfigurationRequest'),
+    newInputConfigurationRequest,
+
+    -- ** Interface
+    Interface (Interface'),
+    newInterface,
+
+    -- ** InterfaceRequest
+    InterfaceRequest (InterfaceRequest'),
+    newInterfaceRequest,
+
+    -- ** ListedEntitlement
+    ListedEntitlement (ListedEntitlement'),
+    newListedEntitlement,
+
+    -- ** ListedFlow
+    ListedFlow (ListedFlow'),
+    newListedFlow,
+
+    -- ** Maintenance
+    Maintenance (Maintenance'),
+    newMaintenance,
+
+    -- ** MediaStream
+    MediaStream (MediaStream'),
+    newMediaStream,
+
+    -- ** MediaStreamAttributes
+    MediaStreamAttributes (MediaStreamAttributes'),
+    newMediaStreamAttributes,
+
+    -- ** MediaStreamAttributesRequest
+    MediaStreamAttributesRequest (MediaStreamAttributesRequest'),
+    newMediaStreamAttributesRequest,
+
+    -- ** MediaStreamOutputConfiguration
+    MediaStreamOutputConfiguration (MediaStreamOutputConfiguration'),
+    newMediaStreamOutputConfiguration,
+
+    -- ** MediaStreamOutputConfigurationRequest
+    MediaStreamOutputConfigurationRequest (MediaStreamOutputConfigurationRequest'),
+    newMediaStreamOutputConfigurationRequest,
+
+    -- ** MediaStreamSourceConfiguration
+    MediaStreamSourceConfiguration (MediaStreamSourceConfiguration'),
+    newMediaStreamSourceConfiguration,
+
+    -- ** MediaStreamSourceConfigurationRequest
+    MediaStreamSourceConfigurationRequest (MediaStreamSourceConfigurationRequest'),
+    newMediaStreamSourceConfigurationRequest,
+
+    -- ** Messages
+    Messages (Messages'),
+    newMessages,
+
+    -- ** Offering
+    Offering (Offering'),
+    newOffering,
+
+    -- ** Output
+    Output (Output'),
+    newOutput,
+
+    -- ** Reservation
+    Reservation (Reservation'),
+    newReservation,
+
+    -- ** ResourceSpecification
+    ResourceSpecification (ResourceSpecification'),
+    newResourceSpecification,
+
+    -- ** SetSourceRequest
+    SetSourceRequest (SetSourceRequest'),
+    newSetSourceRequest,
+
+    -- ** Source
+    Source (Source'),
+    newSource,
+
+    -- ** SourcePriority
+    SourcePriority (SourcePriority'),
+    newSourcePriority,
+
+    -- ** Transport
+    Transport (Transport'),
+    newTransport,
+
+    -- ** UpdateEncryption
+    UpdateEncryption (UpdateEncryption'),
+    newUpdateEncryption,
+
+    -- ** UpdateFailoverConfig
+    UpdateFailoverConfig (UpdateFailoverConfig'),
+    newUpdateFailoverConfig,
+
+    -- ** UpdateMaintenance
+    UpdateMaintenance (UpdateMaintenance'),
+    newUpdateMaintenance,
+
+    -- ** VpcInterface
+    VpcInterface (VpcInterface'),
+    newVpcInterface,
+
+    -- ** VpcInterfaceAttachment
+    VpcInterfaceAttachment (VpcInterfaceAttachment'),
+    newVpcInterfaceAttachment,
+
+    -- ** VpcInterfaceRequest
+    VpcInterfaceRequest (VpcInterfaceRequest'),
+    newVpcInterfaceRequest,
+  )
+where
+
+import Amazonka.MediaConnect.AddFlowMediaStreams
+import Amazonka.MediaConnect.AddFlowOutputs
+import Amazonka.MediaConnect.AddFlowSources
+import Amazonka.MediaConnect.AddFlowVpcInterfaces
+import Amazonka.MediaConnect.CreateFlow
+import Amazonka.MediaConnect.DeleteFlow
+import Amazonka.MediaConnect.DescribeFlow
+import Amazonka.MediaConnect.DescribeOffering
+import Amazonka.MediaConnect.DescribeReservation
+import Amazonka.MediaConnect.GrantFlowEntitlements
+import Amazonka.MediaConnect.Lens
+import Amazonka.MediaConnect.ListEntitlements
+import Amazonka.MediaConnect.ListFlows
+import Amazonka.MediaConnect.ListOfferings
+import Amazonka.MediaConnect.ListReservations
+import Amazonka.MediaConnect.ListTagsForResource
+import Amazonka.MediaConnect.PurchaseOffering
+import Amazonka.MediaConnect.RemoveFlowMediaStream
+import Amazonka.MediaConnect.RemoveFlowOutput
+import Amazonka.MediaConnect.RemoveFlowSource
+import Amazonka.MediaConnect.RemoveFlowVpcInterface
+import Amazonka.MediaConnect.RevokeFlowEntitlement
+import Amazonka.MediaConnect.StartFlow
+import Amazonka.MediaConnect.StopFlow
+import Amazonka.MediaConnect.TagResource
+import Amazonka.MediaConnect.Types
+import Amazonka.MediaConnect.UntagResource
+import Amazonka.MediaConnect.UpdateFlow
+import Amazonka.MediaConnect.UpdateFlowEntitlement
+import Amazonka.MediaConnect.UpdateFlowMediaStream
+import Amazonka.MediaConnect.UpdateFlowOutput
+import Amazonka.MediaConnect.UpdateFlowSource
+import Amazonka.MediaConnect.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 'MediaConnect'.
+
+-- $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/MediaConnect/AddFlowMediaStreams.hs b/gen/Amazonka/MediaConnect/AddFlowMediaStreams.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/AddFlowMediaStreams.hs
@@ -0,0 +1,198 @@
+{-# 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.MediaConnect.AddFlowMediaStreams
+-- 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 media streams to an existing flow. After you add a media stream to
+-- a flow, you can associate it with a source and\/or an output that uses
+-- the ST 2110 JPEG XS or CDI protocol.
+module Amazonka.MediaConnect.AddFlowMediaStreams
+  ( -- * Creating a Request
+    AddFlowMediaStreams (..),
+    newAddFlowMediaStreams,
+
+    -- * Request Lenses
+    addFlowMediaStreams_flowArn,
+    addFlowMediaStreams_mediaStreams,
+
+    -- * Destructuring the Response
+    AddFlowMediaStreamsResponse (..),
+    newAddFlowMediaStreamsResponse,
+
+    -- * Response Lenses
+    addFlowMediaStreamsResponse_flowArn,
+    addFlowMediaStreamsResponse_mediaStreams,
+    addFlowMediaStreamsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to add media streams to the flow.
+--
+-- /See:/ 'newAddFlowMediaStreams' smart constructor.
+data AddFlowMediaStreams = AddFlowMediaStreams'
+  { -- | The Amazon Resource Name (ARN) of the flow.
+    flowArn :: Prelude.Text,
+    -- | The media streams that you want to add to the flow.
+    mediaStreams :: [AddMediaStreamRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowMediaStreams' 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:
+--
+-- 'flowArn', 'addFlowMediaStreams_flowArn' - The Amazon Resource Name (ARN) of the flow.
+--
+-- 'mediaStreams', 'addFlowMediaStreams_mediaStreams' - The media streams that you want to add to the flow.
+newAddFlowMediaStreams ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  AddFlowMediaStreams
+newAddFlowMediaStreams pFlowArn_ =
+  AddFlowMediaStreams'
+    { flowArn = pFlowArn_,
+      mediaStreams = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the flow.
+addFlowMediaStreams_flowArn :: Lens.Lens' AddFlowMediaStreams Prelude.Text
+addFlowMediaStreams_flowArn = Lens.lens (\AddFlowMediaStreams' {flowArn} -> flowArn) (\s@AddFlowMediaStreams' {} a -> s {flowArn = a} :: AddFlowMediaStreams)
+
+-- | The media streams that you want to add to the flow.
+addFlowMediaStreams_mediaStreams :: Lens.Lens' AddFlowMediaStreams [AddMediaStreamRequest]
+addFlowMediaStreams_mediaStreams = Lens.lens (\AddFlowMediaStreams' {mediaStreams} -> mediaStreams) (\s@AddFlowMediaStreams' {} a -> s {mediaStreams = a} :: AddFlowMediaStreams) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AddFlowMediaStreams where
+  type
+    AWSResponse AddFlowMediaStreams =
+      AddFlowMediaStreamsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddFlowMediaStreamsResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "mediaStreams" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddFlowMediaStreams where
+  hashWithSalt _salt AddFlowMediaStreams' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` mediaStreams
+
+instance Prelude.NFData AddFlowMediaStreams where
+  rnf AddFlowMediaStreams' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf mediaStreams
+
+instance Data.ToHeaders AddFlowMediaStreams where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddFlowMediaStreams where
+  toJSON AddFlowMediaStreams' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("mediaStreams" Data..= mediaStreams)]
+      )
+
+instance Data.ToPath AddFlowMediaStreams where
+  toPath AddFlowMediaStreams' {..} =
+    Prelude.mconcat
+      ["/v1/flows/", Data.toBS flowArn, "/mediaStreams"]
+
+instance Data.ToQuery AddFlowMediaStreams where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddFlowMediaStreamsResponse' smart constructor.
+data AddFlowMediaStreamsResponse = AddFlowMediaStreamsResponse'
+  { -- | The ARN of the flow that you added media streams to.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The media streams that you added to the flow.
+    mediaStreams :: Prelude.Maybe [MediaStream],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowMediaStreamsResponse' 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:
+--
+-- 'flowArn', 'addFlowMediaStreamsResponse_flowArn' - The ARN of the flow that you added media streams to.
+--
+-- 'mediaStreams', 'addFlowMediaStreamsResponse_mediaStreams' - The media streams that you added to the flow.
+--
+-- 'httpStatus', 'addFlowMediaStreamsResponse_httpStatus' - The response's http status code.
+newAddFlowMediaStreamsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddFlowMediaStreamsResponse
+newAddFlowMediaStreamsResponse pHttpStatus_ =
+  AddFlowMediaStreamsResponse'
+    { flowArn =
+        Prelude.Nothing,
+      mediaStreams = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that you added media streams to.
+addFlowMediaStreamsResponse_flowArn :: Lens.Lens' AddFlowMediaStreamsResponse (Prelude.Maybe Prelude.Text)
+addFlowMediaStreamsResponse_flowArn = Lens.lens (\AddFlowMediaStreamsResponse' {flowArn} -> flowArn) (\s@AddFlowMediaStreamsResponse' {} a -> s {flowArn = a} :: AddFlowMediaStreamsResponse)
+
+-- | The media streams that you added to the flow.
+addFlowMediaStreamsResponse_mediaStreams :: Lens.Lens' AddFlowMediaStreamsResponse (Prelude.Maybe [MediaStream])
+addFlowMediaStreamsResponse_mediaStreams = Lens.lens (\AddFlowMediaStreamsResponse' {mediaStreams} -> mediaStreams) (\s@AddFlowMediaStreamsResponse' {} a -> s {mediaStreams = a} :: AddFlowMediaStreamsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+addFlowMediaStreamsResponse_httpStatus :: Lens.Lens' AddFlowMediaStreamsResponse Prelude.Int
+addFlowMediaStreamsResponse_httpStatus = Lens.lens (\AddFlowMediaStreamsResponse' {httpStatus} -> httpStatus) (\s@AddFlowMediaStreamsResponse' {} a -> s {httpStatus = a} :: AddFlowMediaStreamsResponse)
+
+instance Prelude.NFData AddFlowMediaStreamsResponse where
+  rnf AddFlowMediaStreamsResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf mediaStreams
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/AddFlowOutputs.hs b/gen/Amazonka/MediaConnect/AddFlowOutputs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/AddFlowOutputs.hs
@@ -0,0 +1,196 @@
+{-# 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.MediaConnect.AddFlowOutputs
+-- 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 outputs to an existing flow. You can create up to 50 outputs per
+-- flow.
+module Amazonka.MediaConnect.AddFlowOutputs
+  ( -- * Creating a Request
+    AddFlowOutputs (..),
+    newAddFlowOutputs,
+
+    -- * Request Lenses
+    addFlowOutputs_flowArn,
+    addFlowOutputs_outputs,
+
+    -- * Destructuring the Response
+    AddFlowOutputsResponse (..),
+    newAddFlowOutputsResponse,
+
+    -- * Response Lenses
+    addFlowOutputsResponse_flowArn,
+    addFlowOutputsResponse_outputs,
+    addFlowOutputsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to add outputs to the specified flow.
+--
+-- /See:/ 'newAddFlowOutputs' smart constructor.
+data AddFlowOutputs = AddFlowOutputs'
+  { -- | The flow that you want to add outputs to.
+    flowArn :: Prelude.Text,
+    -- | A list of outputs that you want to add.
+    outputs :: [AddOutputRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowOutputs' 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:
+--
+-- 'flowArn', 'addFlowOutputs_flowArn' - The flow that you want to add outputs to.
+--
+-- 'outputs', 'addFlowOutputs_outputs' - A list of outputs that you want to add.
+newAddFlowOutputs ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  AddFlowOutputs
+newAddFlowOutputs pFlowArn_ =
+  AddFlowOutputs'
+    { flowArn = pFlowArn_,
+      outputs = Prelude.mempty
+    }
+
+-- | The flow that you want to add outputs to.
+addFlowOutputs_flowArn :: Lens.Lens' AddFlowOutputs Prelude.Text
+addFlowOutputs_flowArn = Lens.lens (\AddFlowOutputs' {flowArn} -> flowArn) (\s@AddFlowOutputs' {} a -> s {flowArn = a} :: AddFlowOutputs)
+
+-- | A list of outputs that you want to add.
+addFlowOutputs_outputs :: Lens.Lens' AddFlowOutputs [AddOutputRequest]
+addFlowOutputs_outputs = Lens.lens (\AddFlowOutputs' {outputs} -> outputs) (\s@AddFlowOutputs' {} a -> s {outputs = a} :: AddFlowOutputs) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AddFlowOutputs where
+  type
+    AWSResponse AddFlowOutputs =
+      AddFlowOutputsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddFlowOutputsResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "outputs" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddFlowOutputs where
+  hashWithSalt _salt AddFlowOutputs' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` outputs
+
+instance Prelude.NFData AddFlowOutputs where
+  rnf AddFlowOutputs' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf outputs
+
+instance Data.ToHeaders AddFlowOutputs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddFlowOutputs where
+  toJSON AddFlowOutputs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("outputs" Data..= outputs)]
+      )
+
+instance Data.ToPath AddFlowOutputs where
+  toPath AddFlowOutputs' {..} =
+    Prelude.mconcat
+      ["/v1/flows/", Data.toBS flowArn, "/outputs"]
+
+instance Data.ToQuery AddFlowOutputs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddFlowOutputsResponse' smart constructor.
+data AddFlowOutputsResponse = AddFlowOutputsResponse'
+  { -- | The ARN of the flow that these outputs were added to.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The details of the newly added outputs.
+    outputs :: Prelude.Maybe [Output],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowOutputsResponse' 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:
+--
+-- 'flowArn', 'addFlowOutputsResponse_flowArn' - The ARN of the flow that these outputs were added to.
+--
+-- 'outputs', 'addFlowOutputsResponse_outputs' - The details of the newly added outputs.
+--
+-- 'httpStatus', 'addFlowOutputsResponse_httpStatus' - The response's http status code.
+newAddFlowOutputsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddFlowOutputsResponse
+newAddFlowOutputsResponse pHttpStatus_ =
+  AddFlowOutputsResponse'
+    { flowArn = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that these outputs were added to.
+addFlowOutputsResponse_flowArn :: Lens.Lens' AddFlowOutputsResponse (Prelude.Maybe Prelude.Text)
+addFlowOutputsResponse_flowArn = Lens.lens (\AddFlowOutputsResponse' {flowArn} -> flowArn) (\s@AddFlowOutputsResponse' {} a -> s {flowArn = a} :: AddFlowOutputsResponse)
+
+-- | The details of the newly added outputs.
+addFlowOutputsResponse_outputs :: Lens.Lens' AddFlowOutputsResponse (Prelude.Maybe [Output])
+addFlowOutputsResponse_outputs = Lens.lens (\AddFlowOutputsResponse' {outputs} -> outputs) (\s@AddFlowOutputsResponse' {} a -> s {outputs = a} :: AddFlowOutputsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+addFlowOutputsResponse_httpStatus :: Lens.Lens' AddFlowOutputsResponse Prelude.Int
+addFlowOutputsResponse_httpStatus = Lens.lens (\AddFlowOutputsResponse' {httpStatus} -> httpStatus) (\s@AddFlowOutputsResponse' {} a -> s {httpStatus = a} :: AddFlowOutputsResponse)
+
+instance Prelude.NFData AddFlowOutputsResponse where
+  rnf AddFlowOutputsResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/AddFlowSources.hs b/gen/Amazonka/MediaConnect/AddFlowSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/AddFlowSources.hs
@@ -0,0 +1,195 @@
+{-# 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.MediaConnect.AddFlowSources
+-- 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 Sources to flow
+module Amazonka.MediaConnect.AddFlowSources
+  ( -- * Creating a Request
+    AddFlowSources (..),
+    newAddFlowSources,
+
+    -- * Request Lenses
+    addFlowSources_flowArn,
+    addFlowSources_sources,
+
+    -- * Destructuring the Response
+    AddFlowSourcesResponse (..),
+    newAddFlowSourcesResponse,
+
+    -- * Response Lenses
+    addFlowSourcesResponse_flowArn,
+    addFlowSourcesResponse_sources,
+    addFlowSourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to add sources to the flow.
+--
+-- /See:/ 'newAddFlowSources' smart constructor.
+data AddFlowSources = AddFlowSources'
+  { -- | The flow that you want to mutate.
+    flowArn :: Prelude.Text,
+    -- | A list of sources that you want to add.
+    sources :: [SetSourceRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowSources' 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:
+--
+-- 'flowArn', 'addFlowSources_flowArn' - The flow that you want to mutate.
+--
+-- 'sources', 'addFlowSources_sources' - A list of sources that you want to add.
+newAddFlowSources ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  AddFlowSources
+newAddFlowSources pFlowArn_ =
+  AddFlowSources'
+    { flowArn = pFlowArn_,
+      sources = Prelude.mempty
+    }
+
+-- | The flow that you want to mutate.
+addFlowSources_flowArn :: Lens.Lens' AddFlowSources Prelude.Text
+addFlowSources_flowArn = Lens.lens (\AddFlowSources' {flowArn} -> flowArn) (\s@AddFlowSources' {} a -> s {flowArn = a} :: AddFlowSources)
+
+-- | A list of sources that you want to add.
+addFlowSources_sources :: Lens.Lens' AddFlowSources [SetSourceRequest]
+addFlowSources_sources = Lens.lens (\AddFlowSources' {sources} -> sources) (\s@AddFlowSources' {} a -> s {sources = a} :: AddFlowSources) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AddFlowSources where
+  type
+    AWSResponse AddFlowSources =
+      AddFlowSourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddFlowSourcesResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddFlowSources where
+  hashWithSalt _salt AddFlowSources' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` sources
+
+instance Prelude.NFData AddFlowSources where
+  rnf AddFlowSources' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf sources
+
+instance Data.ToHeaders AddFlowSources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddFlowSources where
+  toJSON AddFlowSources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("sources" Data..= sources)]
+      )
+
+instance Data.ToPath AddFlowSources where
+  toPath AddFlowSources' {..} =
+    Prelude.mconcat
+      ["/v1/flows/", Data.toBS flowArn, "/source"]
+
+instance Data.ToQuery AddFlowSources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddFlowSourcesResponse' smart constructor.
+data AddFlowSourcesResponse = AddFlowSourcesResponse'
+  { -- | The ARN of the flow that these sources were added to.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The details of the newly added sources.
+    sources :: Prelude.Maybe [Source],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowSourcesResponse' 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:
+--
+-- 'flowArn', 'addFlowSourcesResponse_flowArn' - The ARN of the flow that these sources were added to.
+--
+-- 'sources', 'addFlowSourcesResponse_sources' - The details of the newly added sources.
+--
+-- 'httpStatus', 'addFlowSourcesResponse_httpStatus' - The response's http status code.
+newAddFlowSourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddFlowSourcesResponse
+newAddFlowSourcesResponse pHttpStatus_ =
+  AddFlowSourcesResponse'
+    { flowArn = Prelude.Nothing,
+      sources = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that these sources were added to.
+addFlowSourcesResponse_flowArn :: Lens.Lens' AddFlowSourcesResponse (Prelude.Maybe Prelude.Text)
+addFlowSourcesResponse_flowArn = Lens.lens (\AddFlowSourcesResponse' {flowArn} -> flowArn) (\s@AddFlowSourcesResponse' {} a -> s {flowArn = a} :: AddFlowSourcesResponse)
+
+-- | The details of the newly added sources.
+addFlowSourcesResponse_sources :: Lens.Lens' AddFlowSourcesResponse (Prelude.Maybe [Source])
+addFlowSourcesResponse_sources = Lens.lens (\AddFlowSourcesResponse' {sources} -> sources) (\s@AddFlowSourcesResponse' {} a -> s {sources = a} :: AddFlowSourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+addFlowSourcesResponse_httpStatus :: Lens.Lens' AddFlowSourcesResponse Prelude.Int
+addFlowSourcesResponse_httpStatus = Lens.lens (\AddFlowSourcesResponse' {httpStatus} -> httpStatus) (\s@AddFlowSourcesResponse' {} a -> s {httpStatus = a} :: AddFlowSourcesResponse)
+
+instance Prelude.NFData AddFlowSourcesResponse where
+  rnf AddFlowSourcesResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/AddFlowVpcInterfaces.hs b/gen/Amazonka/MediaConnect/AddFlowVpcInterfaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/AddFlowVpcInterfaces.hs
@@ -0,0 +1,198 @@
+{-# 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.MediaConnect.AddFlowVpcInterfaces
+-- 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 VPC interfaces to flow
+module Amazonka.MediaConnect.AddFlowVpcInterfaces
+  ( -- * Creating a Request
+    AddFlowVpcInterfaces (..),
+    newAddFlowVpcInterfaces,
+
+    -- * Request Lenses
+    addFlowVpcInterfaces_flowArn,
+    addFlowVpcInterfaces_vpcInterfaces,
+
+    -- * Destructuring the Response
+    AddFlowVpcInterfacesResponse (..),
+    newAddFlowVpcInterfacesResponse,
+
+    -- * Response Lenses
+    addFlowVpcInterfacesResponse_flowArn,
+    addFlowVpcInterfacesResponse_vpcInterfaces,
+    addFlowVpcInterfacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to add VPC interfaces to the flow.
+--
+-- /See:/ 'newAddFlowVpcInterfaces' smart constructor.
+data AddFlowVpcInterfaces = AddFlowVpcInterfaces'
+  { -- | The flow that you want to mutate.
+    flowArn :: Prelude.Text,
+    -- | A list of VPC interfaces that you want to add.
+    vpcInterfaces :: [VpcInterfaceRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowVpcInterfaces' 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:
+--
+-- 'flowArn', 'addFlowVpcInterfaces_flowArn' - The flow that you want to mutate.
+--
+-- 'vpcInterfaces', 'addFlowVpcInterfaces_vpcInterfaces' - A list of VPC interfaces that you want to add.
+newAddFlowVpcInterfaces ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  AddFlowVpcInterfaces
+newAddFlowVpcInterfaces pFlowArn_ =
+  AddFlowVpcInterfaces'
+    { flowArn = pFlowArn_,
+      vpcInterfaces = Prelude.mempty
+    }
+
+-- | The flow that you want to mutate.
+addFlowVpcInterfaces_flowArn :: Lens.Lens' AddFlowVpcInterfaces Prelude.Text
+addFlowVpcInterfaces_flowArn = Lens.lens (\AddFlowVpcInterfaces' {flowArn} -> flowArn) (\s@AddFlowVpcInterfaces' {} a -> s {flowArn = a} :: AddFlowVpcInterfaces)
+
+-- | A list of VPC interfaces that you want to add.
+addFlowVpcInterfaces_vpcInterfaces :: Lens.Lens' AddFlowVpcInterfaces [VpcInterfaceRequest]
+addFlowVpcInterfaces_vpcInterfaces = Lens.lens (\AddFlowVpcInterfaces' {vpcInterfaces} -> vpcInterfaces) (\s@AddFlowVpcInterfaces' {} a -> s {vpcInterfaces = a} :: AddFlowVpcInterfaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AddFlowVpcInterfaces where
+  type
+    AWSResponse AddFlowVpcInterfaces =
+      AddFlowVpcInterfacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddFlowVpcInterfacesResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "vpcInterfaces" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddFlowVpcInterfaces where
+  hashWithSalt _salt AddFlowVpcInterfaces' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` vpcInterfaces
+
+instance Prelude.NFData AddFlowVpcInterfaces where
+  rnf AddFlowVpcInterfaces' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf vpcInterfaces
+
+instance Data.ToHeaders AddFlowVpcInterfaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddFlowVpcInterfaces where
+  toJSON AddFlowVpcInterfaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("vpcInterfaces" Data..= vpcInterfaces)
+          ]
+      )
+
+instance Data.ToPath AddFlowVpcInterfaces where
+  toPath AddFlowVpcInterfaces' {..} =
+    Prelude.mconcat
+      ["/v1/flows/", Data.toBS flowArn, "/vpcInterfaces"]
+
+instance Data.ToQuery AddFlowVpcInterfaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddFlowVpcInterfacesResponse' smart constructor.
+data AddFlowVpcInterfacesResponse = AddFlowVpcInterfacesResponse'
+  { -- | The ARN of the flow that these VPC interfaces were added to.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The details of the newly added VPC interfaces.
+    vpcInterfaces :: Prelude.Maybe [VpcInterface],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddFlowVpcInterfacesResponse' 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:
+--
+-- 'flowArn', 'addFlowVpcInterfacesResponse_flowArn' - The ARN of the flow that these VPC interfaces were added to.
+--
+-- 'vpcInterfaces', 'addFlowVpcInterfacesResponse_vpcInterfaces' - The details of the newly added VPC interfaces.
+--
+-- 'httpStatus', 'addFlowVpcInterfacesResponse_httpStatus' - The response's http status code.
+newAddFlowVpcInterfacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddFlowVpcInterfacesResponse
+newAddFlowVpcInterfacesResponse pHttpStatus_ =
+  AddFlowVpcInterfacesResponse'
+    { flowArn =
+        Prelude.Nothing,
+      vpcInterfaces = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that these VPC interfaces were added to.
+addFlowVpcInterfacesResponse_flowArn :: Lens.Lens' AddFlowVpcInterfacesResponse (Prelude.Maybe Prelude.Text)
+addFlowVpcInterfacesResponse_flowArn = Lens.lens (\AddFlowVpcInterfacesResponse' {flowArn} -> flowArn) (\s@AddFlowVpcInterfacesResponse' {} a -> s {flowArn = a} :: AddFlowVpcInterfacesResponse)
+
+-- | The details of the newly added VPC interfaces.
+addFlowVpcInterfacesResponse_vpcInterfaces :: Lens.Lens' AddFlowVpcInterfacesResponse (Prelude.Maybe [VpcInterface])
+addFlowVpcInterfacesResponse_vpcInterfaces = Lens.lens (\AddFlowVpcInterfacesResponse' {vpcInterfaces} -> vpcInterfaces) (\s@AddFlowVpcInterfacesResponse' {} a -> s {vpcInterfaces = a} :: AddFlowVpcInterfacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+addFlowVpcInterfacesResponse_httpStatus :: Lens.Lens' AddFlowVpcInterfacesResponse Prelude.Int
+addFlowVpcInterfacesResponse_httpStatus = Lens.lens (\AddFlowVpcInterfacesResponse' {httpStatus} -> httpStatus) (\s@AddFlowVpcInterfacesResponse' {} a -> s {httpStatus = a} :: AddFlowVpcInterfacesResponse)
+
+instance Prelude.NFData AddFlowVpcInterfacesResponse where
+  rnf AddFlowVpcInterfacesResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf vpcInterfaces
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/CreateFlow.hs b/gen/Amazonka/MediaConnect/CreateFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/CreateFlow.hs
@@ -0,0 +1,290 @@
+{-# 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.MediaConnect.CreateFlow
+-- 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 flow. The request must include one source. The request
+-- optionally can include outputs (up to 50) and entitlements (up to 50).
+module Amazonka.MediaConnect.CreateFlow
+  ( -- * Creating a Request
+    CreateFlow (..),
+    newCreateFlow,
+
+    -- * Request Lenses
+    createFlow_availabilityZone,
+    createFlow_entitlements,
+    createFlow_maintenance,
+    createFlow_mediaStreams,
+    createFlow_outputs,
+    createFlow_source,
+    createFlow_sourceFailoverConfig,
+    createFlow_sources,
+    createFlow_vpcInterfaces,
+    createFlow_name,
+
+    -- * Destructuring the Response
+    CreateFlowResponse (..),
+    newCreateFlowResponse,
+
+    -- * Response Lenses
+    createFlowResponse_flow,
+    createFlowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new flow. The request must include one source. The request
+-- optionally can include outputs (up to 50) and entitlements (up to 50).
+--
+-- /See:/ 'newCreateFlow' smart constructor.
+data CreateFlow = CreateFlow'
+  { -- | The Availability Zone that you want to create the flow in. These options
+    -- are limited to the Availability Zones within the current AWS Region.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The entitlements that you want to grant on a flow.
+    entitlements :: Prelude.Maybe [GrantEntitlementRequest],
+    maintenance :: Prelude.Maybe AddMaintenance,
+    -- | The media streams that you want to add to the flow. You can associate
+    -- these media streams with sources and outputs on the flow.
+    mediaStreams :: Prelude.Maybe [AddMediaStreamRequest],
+    -- | The outputs that you want to add to this flow.
+    outputs :: Prelude.Maybe [AddOutputRequest],
+    source :: Prelude.Maybe SetSourceRequest,
+    sourceFailoverConfig :: Prelude.Maybe FailoverConfig,
+    sources :: Prelude.Maybe [SetSourceRequest],
+    -- | The VPC interfaces you want on the flow.
+    vpcInterfaces :: Prelude.Maybe [VpcInterfaceRequest],
+    -- | The name of the flow.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFlow' 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:
+--
+-- 'availabilityZone', 'createFlow_availabilityZone' - The Availability Zone that you want to create the flow in. These options
+-- are limited to the Availability Zones within the current AWS Region.
+--
+-- 'entitlements', 'createFlow_entitlements' - The entitlements that you want to grant on a flow.
+--
+-- 'maintenance', 'createFlow_maintenance' - Undocumented member.
+--
+-- 'mediaStreams', 'createFlow_mediaStreams' - The media streams that you want to add to the flow. You can associate
+-- these media streams with sources and outputs on the flow.
+--
+-- 'outputs', 'createFlow_outputs' - The outputs that you want to add to this flow.
+--
+-- 'source', 'createFlow_source' - Undocumented member.
+--
+-- 'sourceFailoverConfig', 'createFlow_sourceFailoverConfig' - Undocumented member.
+--
+-- 'sources', 'createFlow_sources' - Undocumented member.
+--
+-- 'vpcInterfaces', 'createFlow_vpcInterfaces' - The VPC interfaces you want on the flow.
+--
+-- 'name', 'createFlow_name' - The name of the flow.
+newCreateFlow ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateFlow
+newCreateFlow pName_ =
+  CreateFlow'
+    { availabilityZone = Prelude.Nothing,
+      entitlements = Prelude.Nothing,
+      maintenance = Prelude.Nothing,
+      mediaStreams = Prelude.Nothing,
+      outputs = Prelude.Nothing,
+      source = Prelude.Nothing,
+      sourceFailoverConfig = Prelude.Nothing,
+      sources = Prelude.Nothing,
+      vpcInterfaces = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The Availability Zone that you want to create the flow in. These options
+-- are limited to the Availability Zones within the current AWS Region.
+createFlow_availabilityZone :: Lens.Lens' CreateFlow (Prelude.Maybe Prelude.Text)
+createFlow_availabilityZone = Lens.lens (\CreateFlow' {availabilityZone} -> availabilityZone) (\s@CreateFlow' {} a -> s {availabilityZone = a} :: CreateFlow)
+
+-- | The entitlements that you want to grant on a flow.
+createFlow_entitlements :: Lens.Lens' CreateFlow (Prelude.Maybe [GrantEntitlementRequest])
+createFlow_entitlements = Lens.lens (\CreateFlow' {entitlements} -> entitlements) (\s@CreateFlow' {} a -> s {entitlements = a} :: CreateFlow) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createFlow_maintenance :: Lens.Lens' CreateFlow (Prelude.Maybe AddMaintenance)
+createFlow_maintenance = Lens.lens (\CreateFlow' {maintenance} -> maintenance) (\s@CreateFlow' {} a -> s {maintenance = a} :: CreateFlow)
+
+-- | The media streams that you want to add to the flow. You can associate
+-- these media streams with sources and outputs on the flow.
+createFlow_mediaStreams :: Lens.Lens' CreateFlow (Prelude.Maybe [AddMediaStreamRequest])
+createFlow_mediaStreams = Lens.lens (\CreateFlow' {mediaStreams} -> mediaStreams) (\s@CreateFlow' {} a -> s {mediaStreams = a} :: CreateFlow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The outputs that you want to add to this flow.
+createFlow_outputs :: Lens.Lens' CreateFlow (Prelude.Maybe [AddOutputRequest])
+createFlow_outputs = Lens.lens (\CreateFlow' {outputs} -> outputs) (\s@CreateFlow' {} a -> s {outputs = a} :: CreateFlow) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createFlow_source :: Lens.Lens' CreateFlow (Prelude.Maybe SetSourceRequest)
+createFlow_source = Lens.lens (\CreateFlow' {source} -> source) (\s@CreateFlow' {} a -> s {source = a} :: CreateFlow)
+
+-- | Undocumented member.
+createFlow_sourceFailoverConfig :: Lens.Lens' CreateFlow (Prelude.Maybe FailoverConfig)
+createFlow_sourceFailoverConfig = Lens.lens (\CreateFlow' {sourceFailoverConfig} -> sourceFailoverConfig) (\s@CreateFlow' {} a -> s {sourceFailoverConfig = a} :: CreateFlow)
+
+-- | Undocumented member.
+createFlow_sources :: Lens.Lens' CreateFlow (Prelude.Maybe [SetSourceRequest])
+createFlow_sources = Lens.lens (\CreateFlow' {sources} -> sources) (\s@CreateFlow' {} a -> s {sources = a} :: CreateFlow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC interfaces you want on the flow.
+createFlow_vpcInterfaces :: Lens.Lens' CreateFlow (Prelude.Maybe [VpcInterfaceRequest])
+createFlow_vpcInterfaces = Lens.lens (\CreateFlow' {vpcInterfaces} -> vpcInterfaces) (\s@CreateFlow' {} a -> s {vpcInterfaces = a} :: CreateFlow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the flow.
+createFlow_name :: Lens.Lens' CreateFlow Prelude.Text
+createFlow_name = Lens.lens (\CreateFlow' {name} -> name) (\s@CreateFlow' {} a -> s {name = a} :: CreateFlow)
+
+instance Core.AWSRequest CreateFlow where
+  type AWSResponse CreateFlow = CreateFlowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFlowResponse'
+            Prelude.<$> (x Data..?> "flow")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFlow where
+  hashWithSalt _salt CreateFlow' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` entitlements
+      `Prelude.hashWithSalt` maintenance
+      `Prelude.hashWithSalt` mediaStreams
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` sourceFailoverConfig
+      `Prelude.hashWithSalt` sources
+      `Prelude.hashWithSalt` vpcInterfaces
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateFlow where
+  rnf CreateFlow' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf entitlements
+      `Prelude.seq` Prelude.rnf maintenance
+      `Prelude.seq` Prelude.rnf mediaStreams
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf sourceFailoverConfig
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf vpcInterfaces
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateFlow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateFlow where
+  toJSON CreateFlow' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("availabilityZone" Data..=)
+              Prelude.<$> availabilityZone,
+            ("entitlements" Data..=) Prelude.<$> entitlements,
+            ("maintenance" Data..=) Prelude.<$> maintenance,
+            ("mediaStreams" Data..=) Prelude.<$> mediaStreams,
+            ("outputs" Data..=) Prelude.<$> outputs,
+            ("source" Data..=) Prelude.<$> source,
+            ("sourceFailoverConfig" Data..=)
+              Prelude.<$> sourceFailoverConfig,
+            ("sources" Data..=) Prelude.<$> sources,
+            ("vpcInterfaces" Data..=) Prelude.<$> vpcInterfaces,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateFlow where
+  toPath = Prelude.const "/v1/flows"
+
+instance Data.ToQuery CreateFlow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFlowResponse' smart constructor.
+data CreateFlowResponse = CreateFlowResponse'
+  { flow :: Prelude.Maybe Flow,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFlowResponse' 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:
+--
+-- 'flow', 'createFlowResponse_flow' - Undocumented member.
+--
+-- 'httpStatus', 'createFlowResponse_httpStatus' - The response's http status code.
+newCreateFlowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFlowResponse
+newCreateFlowResponse pHttpStatus_ =
+  CreateFlowResponse'
+    { flow = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+createFlowResponse_flow :: Lens.Lens' CreateFlowResponse (Prelude.Maybe Flow)
+createFlowResponse_flow = Lens.lens (\CreateFlowResponse' {flow} -> flow) (\s@CreateFlowResponse' {} a -> s {flow = a} :: CreateFlowResponse)
+
+-- | The response's http status code.
+createFlowResponse_httpStatus :: Lens.Lens' CreateFlowResponse Prelude.Int
+createFlowResponse_httpStatus = Lens.lens (\CreateFlowResponse' {httpStatus} -> httpStatus) (\s@CreateFlowResponse' {} a -> s {httpStatus = a} :: CreateFlowResponse)
+
+instance Prelude.NFData CreateFlowResponse where
+  rnf CreateFlowResponse' {..} =
+    Prelude.rnf flow
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/DeleteFlow.hs b/gen/Amazonka/MediaConnect/DeleteFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/DeleteFlow.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.DeleteFlow
+-- 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 flow. Before you can delete a flow, you must stop the flow.
+module Amazonka.MediaConnect.DeleteFlow
+  ( -- * Creating a Request
+    DeleteFlow (..),
+    newDeleteFlow,
+
+    -- * Request Lenses
+    deleteFlow_flowArn,
+
+    -- * Destructuring the Response
+    DeleteFlowResponse (..),
+    newDeleteFlowResponse,
+
+    -- * Response Lenses
+    deleteFlowResponse_flowArn,
+    deleteFlowResponse_status,
+    deleteFlowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFlow' smart constructor.
+data DeleteFlow = DeleteFlow'
+  { -- | The ARN of the flow that you want to delete.
+    flowArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFlow' 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:
+--
+-- 'flowArn', 'deleteFlow_flowArn' - The ARN of the flow that you want to delete.
+newDeleteFlow ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  DeleteFlow
+newDeleteFlow pFlowArn_ =
+  DeleteFlow' {flowArn = pFlowArn_}
+
+-- | The ARN of the flow that you want to delete.
+deleteFlow_flowArn :: Lens.Lens' DeleteFlow Prelude.Text
+deleteFlow_flowArn = Lens.lens (\DeleteFlow' {flowArn} -> flowArn) (\s@DeleteFlow' {} a -> s {flowArn = a} :: DeleteFlow)
+
+instance Core.AWSRequest DeleteFlow where
+  type AWSResponse DeleteFlow = DeleteFlowResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteFlowResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFlow where
+  hashWithSalt _salt DeleteFlow' {..} =
+    _salt `Prelude.hashWithSalt` flowArn
+
+instance Prelude.NFData DeleteFlow where
+  rnf DeleteFlow' {..} = Prelude.rnf flowArn
+
+instance Data.ToHeaders DeleteFlow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteFlow where
+  toPath DeleteFlow' {..} =
+    Prelude.mconcat ["/v1/flows/", Data.toBS flowArn]
+
+instance Data.ToQuery DeleteFlow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFlowResponse' smart constructor.
+data DeleteFlowResponse = DeleteFlowResponse'
+  { -- | The ARN of the flow that was deleted.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the flow when the DeleteFlow process begins.
+    status :: Prelude.Maybe Status,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFlowResponse' 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:
+--
+-- 'flowArn', 'deleteFlowResponse_flowArn' - The ARN of the flow that was deleted.
+--
+-- 'status', 'deleteFlowResponse_status' - The status of the flow when the DeleteFlow process begins.
+--
+-- 'httpStatus', 'deleteFlowResponse_httpStatus' - The response's http status code.
+newDeleteFlowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFlowResponse
+newDeleteFlowResponse pHttpStatus_ =
+  DeleteFlowResponse'
+    { flowArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that was deleted.
+deleteFlowResponse_flowArn :: Lens.Lens' DeleteFlowResponse (Prelude.Maybe Prelude.Text)
+deleteFlowResponse_flowArn = Lens.lens (\DeleteFlowResponse' {flowArn} -> flowArn) (\s@DeleteFlowResponse' {} a -> s {flowArn = a} :: DeleteFlowResponse)
+
+-- | The status of the flow when the DeleteFlow process begins.
+deleteFlowResponse_status :: Lens.Lens' DeleteFlowResponse (Prelude.Maybe Status)
+deleteFlowResponse_status = Lens.lens (\DeleteFlowResponse' {status} -> status) (\s@DeleteFlowResponse' {} a -> s {status = a} :: DeleteFlowResponse)
+
+-- | The response's http status code.
+deleteFlowResponse_httpStatus :: Lens.Lens' DeleteFlowResponse Prelude.Int
+deleteFlowResponse_httpStatus = Lens.lens (\DeleteFlowResponse' {httpStatus} -> httpStatus) (\s@DeleteFlowResponse' {} a -> s {httpStatus = a} :: DeleteFlowResponse)
+
+instance Prelude.NFData DeleteFlowResponse where
+  rnf DeleteFlowResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/DescribeFlow.hs b/gen/Amazonka/MediaConnect/DescribeFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/DescribeFlow.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.DescribeFlow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays the details of a flow. The response includes the flow ARN,
+-- name, and Availability Zone, as well as details about the source,
+-- outputs, and entitlements.
+module Amazonka.MediaConnect.DescribeFlow
+  ( -- * Creating a Request
+    DescribeFlow (..),
+    newDescribeFlow,
+
+    -- * Request Lenses
+    describeFlow_flowArn,
+
+    -- * Destructuring the Response
+    DescribeFlowResponse (..),
+    newDescribeFlowResponse,
+
+    -- * Response Lenses
+    describeFlowResponse_flow,
+    describeFlowResponse_messages,
+    describeFlowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFlow' smart constructor.
+data DescribeFlow = DescribeFlow'
+  { -- | The ARN of the flow that you want to describe.
+    flowArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFlow' 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:
+--
+-- 'flowArn', 'describeFlow_flowArn' - The ARN of the flow that you want to describe.
+newDescribeFlow ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  DescribeFlow
+newDescribeFlow pFlowArn_ =
+  DescribeFlow' {flowArn = pFlowArn_}
+
+-- | The ARN of the flow that you want to describe.
+describeFlow_flowArn :: Lens.Lens' DescribeFlow Prelude.Text
+describeFlow_flowArn = Lens.lens (\DescribeFlow' {flowArn} -> flowArn) (\s@DescribeFlow' {} a -> s {flowArn = a} :: DescribeFlow)
+
+instance Core.AWSRequest DescribeFlow where
+  type AWSResponse DescribeFlow = DescribeFlowResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeFlowResponse'
+            Prelude.<$> (x Data..?> "flow")
+            Prelude.<*> (x Data..?> "messages")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFlow where
+  hashWithSalt _salt DescribeFlow' {..} =
+    _salt `Prelude.hashWithSalt` flowArn
+
+instance Prelude.NFData DescribeFlow where
+  rnf DescribeFlow' {..} = Prelude.rnf flowArn
+
+instance Data.ToHeaders DescribeFlow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeFlow where
+  toPath DescribeFlow' {..} =
+    Prelude.mconcat ["/v1/flows/", Data.toBS flowArn]
+
+instance Data.ToQuery DescribeFlow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeFlowResponse' smart constructor.
+data DescribeFlowResponse = DescribeFlowResponse'
+  { flow :: Prelude.Maybe Flow,
+    messages :: Prelude.Maybe Messages,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFlowResponse' 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:
+--
+-- 'flow', 'describeFlowResponse_flow' - Undocumented member.
+--
+-- 'messages', 'describeFlowResponse_messages' - Undocumented member.
+--
+-- 'httpStatus', 'describeFlowResponse_httpStatus' - The response's http status code.
+newDescribeFlowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFlowResponse
+newDescribeFlowResponse pHttpStatus_ =
+  DescribeFlowResponse'
+    { flow = Prelude.Nothing,
+      messages = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeFlowResponse_flow :: Lens.Lens' DescribeFlowResponse (Prelude.Maybe Flow)
+describeFlowResponse_flow = Lens.lens (\DescribeFlowResponse' {flow} -> flow) (\s@DescribeFlowResponse' {} a -> s {flow = a} :: DescribeFlowResponse)
+
+-- | Undocumented member.
+describeFlowResponse_messages :: Lens.Lens' DescribeFlowResponse (Prelude.Maybe Messages)
+describeFlowResponse_messages = Lens.lens (\DescribeFlowResponse' {messages} -> messages) (\s@DescribeFlowResponse' {} a -> s {messages = a} :: DescribeFlowResponse)
+
+-- | The response's http status code.
+describeFlowResponse_httpStatus :: Lens.Lens' DescribeFlowResponse Prelude.Int
+describeFlowResponse_httpStatus = Lens.lens (\DescribeFlowResponse' {httpStatus} -> httpStatus) (\s@DescribeFlowResponse' {} a -> s {httpStatus = a} :: DescribeFlowResponse)
+
+instance Prelude.NFData DescribeFlowResponse where
+  rnf DescribeFlowResponse' {..} =
+    Prelude.rnf flow
+      `Prelude.seq` Prelude.rnf messages
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/DescribeOffering.hs b/gen/Amazonka/MediaConnect/DescribeOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/DescribeOffering.hs
@@ -0,0 +1,160 @@
+{-# 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.MediaConnect.DescribeOffering
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays the details of an offering. The response includes the offering
+-- description, duration, outbound bandwidth, price, and Amazon Resource
+-- Name (ARN).
+module Amazonka.MediaConnect.DescribeOffering
+  ( -- * Creating a Request
+    DescribeOffering (..),
+    newDescribeOffering,
+
+    -- * Request Lenses
+    describeOffering_offeringArn,
+
+    -- * Destructuring the Response
+    DescribeOfferingResponse (..),
+    newDescribeOfferingResponse,
+
+    -- * Response Lenses
+    describeOfferingResponse_offering,
+    describeOfferingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeOffering' smart constructor.
+data DescribeOffering = DescribeOffering'
+  { -- | The Amazon Resource Name (ARN) of the offering.
+    offeringArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOffering' 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:
+--
+-- 'offeringArn', 'describeOffering_offeringArn' - The Amazon Resource Name (ARN) of the offering.
+newDescribeOffering ::
+  -- | 'offeringArn'
+  Prelude.Text ->
+  DescribeOffering
+newDescribeOffering pOfferingArn_ =
+  DescribeOffering' {offeringArn = pOfferingArn_}
+
+-- | The Amazon Resource Name (ARN) of the offering.
+describeOffering_offeringArn :: Lens.Lens' DescribeOffering Prelude.Text
+describeOffering_offeringArn = Lens.lens (\DescribeOffering' {offeringArn} -> offeringArn) (\s@DescribeOffering' {} a -> s {offeringArn = a} :: DescribeOffering)
+
+instance Core.AWSRequest DescribeOffering where
+  type
+    AWSResponse DescribeOffering =
+      DescribeOfferingResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeOfferingResponse'
+            Prelude.<$> (x Data..?> "offering")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeOffering where
+  hashWithSalt _salt DescribeOffering' {..} =
+    _salt `Prelude.hashWithSalt` offeringArn
+
+instance Prelude.NFData DescribeOffering where
+  rnf DescribeOffering' {..} = Prelude.rnf offeringArn
+
+instance Data.ToHeaders DescribeOffering where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeOffering where
+  toPath DescribeOffering' {..} =
+    Prelude.mconcat
+      ["/v1/offerings/", Data.toBS offeringArn]
+
+instance Data.ToQuery DescribeOffering where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeOfferingResponse' smart constructor.
+data DescribeOfferingResponse = DescribeOfferingResponse'
+  { offering :: Prelude.Maybe Offering,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeOfferingResponse' 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:
+--
+-- 'offering', 'describeOfferingResponse_offering' - Undocumented member.
+--
+-- 'httpStatus', 'describeOfferingResponse_httpStatus' - The response's http status code.
+newDescribeOfferingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeOfferingResponse
+newDescribeOfferingResponse pHttpStatus_ =
+  DescribeOfferingResponse'
+    { offering =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeOfferingResponse_offering :: Lens.Lens' DescribeOfferingResponse (Prelude.Maybe Offering)
+describeOfferingResponse_offering = Lens.lens (\DescribeOfferingResponse' {offering} -> offering) (\s@DescribeOfferingResponse' {} a -> s {offering = a} :: DescribeOfferingResponse)
+
+-- | The response's http status code.
+describeOfferingResponse_httpStatus :: Lens.Lens' DescribeOfferingResponse Prelude.Int
+describeOfferingResponse_httpStatus = Lens.lens (\DescribeOfferingResponse' {httpStatus} -> httpStatus) (\s@DescribeOfferingResponse' {} a -> s {httpStatus = a} :: DescribeOfferingResponse)
+
+instance Prelude.NFData DescribeOfferingResponse where
+  rnf DescribeOfferingResponse' {..} =
+    Prelude.rnf offering
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/DescribeReservation.hs b/gen/Amazonka/MediaConnect/DescribeReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/DescribeReservation.hs
@@ -0,0 +1,165 @@
+{-# 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.MediaConnect.DescribeReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays the details of a reservation. The response includes the
+-- reservation name, state, start date and time, and the details of the
+-- offering that make up the rest of the reservation (such as price,
+-- duration, and outbound bandwidth).
+module Amazonka.MediaConnect.DescribeReservation
+  ( -- * Creating a Request
+    DescribeReservation (..),
+    newDescribeReservation,
+
+    -- * Request Lenses
+    describeReservation_reservationArn,
+
+    -- * Destructuring the Response
+    DescribeReservationResponse (..),
+    newDescribeReservationResponse,
+
+    -- * Response Lenses
+    describeReservationResponse_reservation,
+    describeReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeReservation' smart constructor.
+data DescribeReservation = DescribeReservation'
+  { -- | The Amazon Resource Name (ARN) of the reservation.
+    reservationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservation' 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:
+--
+-- 'reservationArn', 'describeReservation_reservationArn' - The Amazon Resource Name (ARN) of the reservation.
+newDescribeReservation ::
+  -- | 'reservationArn'
+  Prelude.Text ->
+  DescribeReservation
+newDescribeReservation pReservationArn_ =
+  DescribeReservation'
+    { reservationArn =
+        pReservationArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the reservation.
+describeReservation_reservationArn :: Lens.Lens' DescribeReservation Prelude.Text
+describeReservation_reservationArn = Lens.lens (\DescribeReservation' {reservationArn} -> reservationArn) (\s@DescribeReservation' {} a -> s {reservationArn = a} :: DescribeReservation)
+
+instance Core.AWSRequest DescribeReservation where
+  type
+    AWSResponse DescribeReservation =
+      DescribeReservationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeReservationResponse'
+            Prelude.<$> (x Data..?> "reservation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeReservation where
+  hashWithSalt _salt DescribeReservation' {..} =
+    _salt `Prelude.hashWithSalt` reservationArn
+
+instance Prelude.NFData DescribeReservation where
+  rnf DescribeReservation' {..} =
+    Prelude.rnf reservationArn
+
+instance Data.ToHeaders DescribeReservation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeReservation where
+  toPath DescribeReservation' {..} =
+    Prelude.mconcat
+      ["/v1/reservations/", Data.toBS reservationArn]
+
+instance Data.ToQuery DescribeReservation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeReservationResponse' smart constructor.
+data DescribeReservationResponse = DescribeReservationResponse'
+  { reservation :: Prelude.Maybe Reservation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservationResponse' 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:
+--
+-- 'reservation', 'describeReservationResponse_reservation' - Undocumented member.
+--
+-- 'httpStatus', 'describeReservationResponse_httpStatus' - The response's http status code.
+newDescribeReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReservationResponse
+newDescribeReservationResponse pHttpStatus_ =
+  DescribeReservationResponse'
+    { reservation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeReservationResponse_reservation :: Lens.Lens' DescribeReservationResponse (Prelude.Maybe Reservation)
+describeReservationResponse_reservation = Lens.lens (\DescribeReservationResponse' {reservation} -> reservation) (\s@DescribeReservationResponse' {} a -> s {reservation = a} :: DescribeReservationResponse)
+
+-- | The response's http status code.
+describeReservationResponse_httpStatus :: Lens.Lens' DescribeReservationResponse Prelude.Int
+describeReservationResponse_httpStatus = Lens.lens (\DescribeReservationResponse' {httpStatus} -> httpStatus) (\s@DescribeReservationResponse' {} a -> s {httpStatus = a} :: DescribeReservationResponse)
+
+instance Prelude.NFData DescribeReservationResponse where
+  rnf DescribeReservationResponse' {..} =
+    Prelude.rnf reservation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/GrantFlowEntitlements.hs b/gen/Amazonka/MediaConnect/GrantFlowEntitlements.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/GrantFlowEntitlements.hs
@@ -0,0 +1,196 @@
+{-# 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.MediaConnect.GrantFlowEntitlements
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants entitlements to an existing flow.
+module Amazonka.MediaConnect.GrantFlowEntitlements
+  ( -- * Creating a Request
+    GrantFlowEntitlements (..),
+    newGrantFlowEntitlements,
+
+    -- * Request Lenses
+    grantFlowEntitlements_flowArn,
+    grantFlowEntitlements_entitlements,
+
+    -- * Destructuring the Response
+    GrantFlowEntitlementsResponse (..),
+    newGrantFlowEntitlementsResponse,
+
+    -- * Response Lenses
+    grantFlowEntitlementsResponse_entitlements,
+    grantFlowEntitlementsResponse_flowArn,
+    grantFlowEntitlementsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to grant entitlements on a flow.
+--
+-- /See:/ 'newGrantFlowEntitlements' smart constructor.
+data GrantFlowEntitlements = GrantFlowEntitlements'
+  { -- | The flow that you want to grant entitlements on.
+    flowArn :: Prelude.Text,
+    -- | The list of entitlements that you want to grant.
+    entitlements :: [GrantEntitlementRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GrantFlowEntitlements' 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:
+--
+-- 'flowArn', 'grantFlowEntitlements_flowArn' - The flow that you want to grant entitlements on.
+--
+-- 'entitlements', 'grantFlowEntitlements_entitlements' - The list of entitlements that you want to grant.
+newGrantFlowEntitlements ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  GrantFlowEntitlements
+newGrantFlowEntitlements pFlowArn_ =
+  GrantFlowEntitlements'
+    { flowArn = pFlowArn_,
+      entitlements = Prelude.mempty
+    }
+
+-- | The flow that you want to grant entitlements on.
+grantFlowEntitlements_flowArn :: Lens.Lens' GrantFlowEntitlements Prelude.Text
+grantFlowEntitlements_flowArn = Lens.lens (\GrantFlowEntitlements' {flowArn} -> flowArn) (\s@GrantFlowEntitlements' {} a -> s {flowArn = a} :: GrantFlowEntitlements)
+
+-- | The list of entitlements that you want to grant.
+grantFlowEntitlements_entitlements :: Lens.Lens' GrantFlowEntitlements [GrantEntitlementRequest]
+grantFlowEntitlements_entitlements = Lens.lens (\GrantFlowEntitlements' {entitlements} -> entitlements) (\s@GrantFlowEntitlements' {} a -> s {entitlements = a} :: GrantFlowEntitlements) Prelude.. Lens.coerced
+
+instance Core.AWSRequest GrantFlowEntitlements where
+  type
+    AWSResponse GrantFlowEntitlements =
+      GrantFlowEntitlementsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GrantFlowEntitlementsResponse'
+            Prelude.<$> (x Data..?> "entitlements" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "flowArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GrantFlowEntitlements where
+  hashWithSalt _salt GrantFlowEntitlements' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` entitlements
+
+instance Prelude.NFData GrantFlowEntitlements where
+  rnf GrantFlowEntitlements' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf entitlements
+
+instance Data.ToHeaders GrantFlowEntitlements where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GrantFlowEntitlements where
+  toJSON GrantFlowEntitlements' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("entitlements" Data..= entitlements)]
+      )
+
+instance Data.ToPath GrantFlowEntitlements where
+  toPath GrantFlowEntitlements' {..} =
+    Prelude.mconcat
+      ["/v1/flows/", Data.toBS flowArn, "/entitlements"]
+
+instance Data.ToQuery GrantFlowEntitlements where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGrantFlowEntitlementsResponse' smart constructor.
+data GrantFlowEntitlementsResponse = GrantFlowEntitlementsResponse'
+  { -- | The entitlements that were just granted.
+    entitlements :: Prelude.Maybe [Entitlement],
+    -- | The ARN of the flow that these entitlements were granted to.
+    flowArn :: 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 'GrantFlowEntitlementsResponse' 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:
+--
+-- 'entitlements', 'grantFlowEntitlementsResponse_entitlements' - The entitlements that were just granted.
+--
+-- 'flowArn', 'grantFlowEntitlementsResponse_flowArn' - The ARN of the flow that these entitlements were granted to.
+--
+-- 'httpStatus', 'grantFlowEntitlementsResponse_httpStatus' - The response's http status code.
+newGrantFlowEntitlementsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GrantFlowEntitlementsResponse
+newGrantFlowEntitlementsResponse pHttpStatus_ =
+  GrantFlowEntitlementsResponse'
+    { entitlements =
+        Prelude.Nothing,
+      flowArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The entitlements that were just granted.
+grantFlowEntitlementsResponse_entitlements :: Lens.Lens' GrantFlowEntitlementsResponse (Prelude.Maybe [Entitlement])
+grantFlowEntitlementsResponse_entitlements = Lens.lens (\GrantFlowEntitlementsResponse' {entitlements} -> entitlements) (\s@GrantFlowEntitlementsResponse' {} a -> s {entitlements = a} :: GrantFlowEntitlementsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the flow that these entitlements were granted to.
+grantFlowEntitlementsResponse_flowArn :: Lens.Lens' GrantFlowEntitlementsResponse (Prelude.Maybe Prelude.Text)
+grantFlowEntitlementsResponse_flowArn = Lens.lens (\GrantFlowEntitlementsResponse' {flowArn} -> flowArn) (\s@GrantFlowEntitlementsResponse' {} a -> s {flowArn = a} :: GrantFlowEntitlementsResponse)
+
+-- | The response's http status code.
+grantFlowEntitlementsResponse_httpStatus :: Lens.Lens' GrantFlowEntitlementsResponse Prelude.Int
+grantFlowEntitlementsResponse_httpStatus = Lens.lens (\GrantFlowEntitlementsResponse' {httpStatus} -> httpStatus) (\s@GrantFlowEntitlementsResponse' {} a -> s {httpStatus = a} :: GrantFlowEntitlementsResponse)
+
+instance Prelude.NFData GrantFlowEntitlementsResponse where
+  rnf GrantFlowEntitlementsResponse' {..} =
+    Prelude.rnf entitlements
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/Lens.hs b/gen/Amazonka/MediaConnect/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Lens.hs
@@ -0,0 +1,669 @@
+{-# 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.MediaConnect.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.MediaConnect.Lens
+  ( -- * Operations
+
+    -- ** AddFlowMediaStreams
+    addFlowMediaStreams_flowArn,
+    addFlowMediaStreams_mediaStreams,
+    addFlowMediaStreamsResponse_flowArn,
+    addFlowMediaStreamsResponse_mediaStreams,
+    addFlowMediaStreamsResponse_httpStatus,
+
+    -- ** AddFlowOutputs
+    addFlowOutputs_flowArn,
+    addFlowOutputs_outputs,
+    addFlowOutputsResponse_flowArn,
+    addFlowOutputsResponse_outputs,
+    addFlowOutputsResponse_httpStatus,
+
+    -- ** AddFlowSources
+    addFlowSources_flowArn,
+    addFlowSources_sources,
+    addFlowSourcesResponse_flowArn,
+    addFlowSourcesResponse_sources,
+    addFlowSourcesResponse_httpStatus,
+
+    -- ** AddFlowVpcInterfaces
+    addFlowVpcInterfaces_flowArn,
+    addFlowVpcInterfaces_vpcInterfaces,
+    addFlowVpcInterfacesResponse_flowArn,
+    addFlowVpcInterfacesResponse_vpcInterfaces,
+    addFlowVpcInterfacesResponse_httpStatus,
+
+    -- ** CreateFlow
+    createFlow_availabilityZone,
+    createFlow_entitlements,
+    createFlow_maintenance,
+    createFlow_mediaStreams,
+    createFlow_outputs,
+    createFlow_source,
+    createFlow_sourceFailoverConfig,
+    createFlow_sources,
+    createFlow_vpcInterfaces,
+    createFlow_name,
+    createFlowResponse_flow,
+    createFlowResponse_httpStatus,
+
+    -- ** DeleteFlow
+    deleteFlow_flowArn,
+    deleteFlowResponse_flowArn,
+    deleteFlowResponse_status,
+    deleteFlowResponse_httpStatus,
+
+    -- ** DescribeFlow
+    describeFlow_flowArn,
+    describeFlowResponse_flow,
+    describeFlowResponse_messages,
+    describeFlowResponse_httpStatus,
+
+    -- ** DescribeOffering
+    describeOffering_offeringArn,
+    describeOfferingResponse_offering,
+    describeOfferingResponse_httpStatus,
+
+    -- ** DescribeReservation
+    describeReservation_reservationArn,
+    describeReservationResponse_reservation,
+    describeReservationResponse_httpStatus,
+
+    -- ** GrantFlowEntitlements
+    grantFlowEntitlements_flowArn,
+    grantFlowEntitlements_entitlements,
+    grantFlowEntitlementsResponse_entitlements,
+    grantFlowEntitlementsResponse_flowArn,
+    grantFlowEntitlementsResponse_httpStatus,
+
+    -- ** ListEntitlements
+    listEntitlements_maxResults,
+    listEntitlements_nextToken,
+    listEntitlementsResponse_entitlements,
+    listEntitlementsResponse_nextToken,
+    listEntitlementsResponse_httpStatus,
+
+    -- ** ListFlows
+    listFlows_maxResults,
+    listFlows_nextToken,
+    listFlowsResponse_flows,
+    listFlowsResponse_nextToken,
+    listFlowsResponse_httpStatus,
+
+    -- ** ListOfferings
+    listOfferings_maxResults,
+    listOfferings_nextToken,
+    listOfferingsResponse_nextToken,
+    listOfferingsResponse_offerings,
+    listOfferingsResponse_httpStatus,
+
+    -- ** ListReservations
+    listReservations_maxResults,
+    listReservations_nextToken,
+    listReservationsResponse_nextToken,
+    listReservationsResponse_reservations,
+    listReservationsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PurchaseOffering
+    purchaseOffering_offeringArn,
+    purchaseOffering_start,
+    purchaseOffering_reservationName,
+    purchaseOfferingResponse_reservation,
+    purchaseOfferingResponse_httpStatus,
+
+    -- ** RemoveFlowMediaStream
+    removeFlowMediaStream_flowArn,
+    removeFlowMediaStream_mediaStreamName,
+    removeFlowMediaStreamResponse_flowArn,
+    removeFlowMediaStreamResponse_mediaStreamName,
+    removeFlowMediaStreamResponse_httpStatus,
+
+    -- ** RemoveFlowOutput
+    removeFlowOutput_flowArn,
+    removeFlowOutput_outputArn,
+    removeFlowOutputResponse_flowArn,
+    removeFlowOutputResponse_outputArn,
+    removeFlowOutputResponse_httpStatus,
+
+    -- ** RemoveFlowSource
+    removeFlowSource_flowArn,
+    removeFlowSource_sourceArn,
+    removeFlowSourceResponse_flowArn,
+    removeFlowSourceResponse_sourceArn,
+    removeFlowSourceResponse_httpStatus,
+
+    -- ** RemoveFlowVpcInterface
+    removeFlowVpcInterface_flowArn,
+    removeFlowVpcInterface_vpcInterfaceName,
+    removeFlowVpcInterfaceResponse_flowArn,
+    removeFlowVpcInterfaceResponse_nonDeletedNetworkInterfaceIds,
+    removeFlowVpcInterfaceResponse_vpcInterfaceName,
+    removeFlowVpcInterfaceResponse_httpStatus,
+
+    -- ** RevokeFlowEntitlement
+    revokeFlowEntitlement_flowArn,
+    revokeFlowEntitlement_entitlementArn,
+    revokeFlowEntitlementResponse_entitlementArn,
+    revokeFlowEntitlementResponse_flowArn,
+    revokeFlowEntitlementResponse_httpStatus,
+
+    -- ** StartFlow
+    startFlow_flowArn,
+    startFlowResponse_flowArn,
+    startFlowResponse_status,
+    startFlowResponse_httpStatus,
+
+    -- ** StopFlow
+    stopFlow_flowArn,
+    stopFlowResponse_flowArn,
+    stopFlowResponse_status,
+    stopFlowResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_tagKeys,
+    untagResource_resourceArn,
+
+    -- ** UpdateFlow
+    updateFlow_maintenance,
+    updateFlow_sourceFailoverConfig,
+    updateFlow_flowArn,
+    updateFlowResponse_flow,
+    updateFlowResponse_httpStatus,
+
+    -- ** UpdateFlowEntitlement
+    updateFlowEntitlement_description,
+    updateFlowEntitlement_encryption,
+    updateFlowEntitlement_entitlementStatus,
+    updateFlowEntitlement_subscribers,
+    updateFlowEntitlement_flowArn,
+    updateFlowEntitlement_entitlementArn,
+    updateFlowEntitlementResponse_entitlement,
+    updateFlowEntitlementResponse_flowArn,
+    updateFlowEntitlementResponse_httpStatus,
+
+    -- ** UpdateFlowMediaStream
+    updateFlowMediaStream_attributes,
+    updateFlowMediaStream_clockRate,
+    updateFlowMediaStream_description,
+    updateFlowMediaStream_mediaStreamType,
+    updateFlowMediaStream_videoFormat,
+    updateFlowMediaStream_flowArn,
+    updateFlowMediaStream_mediaStreamName,
+    updateFlowMediaStreamResponse_flowArn,
+    updateFlowMediaStreamResponse_mediaStream,
+    updateFlowMediaStreamResponse_httpStatus,
+
+    -- ** UpdateFlowOutput
+    updateFlowOutput_cidrAllowList,
+    updateFlowOutput_description,
+    updateFlowOutput_destination,
+    updateFlowOutput_encryption,
+    updateFlowOutput_maxLatency,
+    updateFlowOutput_mediaStreamOutputConfigurations,
+    updateFlowOutput_minLatency,
+    updateFlowOutput_port,
+    updateFlowOutput_protocol,
+    updateFlowOutput_remoteId,
+    updateFlowOutput_senderControlPort,
+    updateFlowOutput_senderIpAddress,
+    updateFlowOutput_smoothingLatency,
+    updateFlowOutput_streamId,
+    updateFlowOutput_vpcInterfaceAttachment,
+    updateFlowOutput_flowArn,
+    updateFlowOutput_outputArn,
+    updateFlowOutputResponse_flowArn,
+    updateFlowOutputResponse_output,
+    updateFlowOutputResponse_httpStatus,
+
+    -- ** UpdateFlowSource
+    updateFlowSource_decryption,
+    updateFlowSource_description,
+    updateFlowSource_entitlementArn,
+    updateFlowSource_ingestPort,
+    updateFlowSource_maxBitrate,
+    updateFlowSource_maxLatency,
+    updateFlowSource_maxSyncBuffer,
+    updateFlowSource_mediaStreamSourceConfigurations,
+    updateFlowSource_minLatency,
+    updateFlowSource_protocol,
+    updateFlowSource_senderControlPort,
+    updateFlowSource_senderIpAddress,
+    updateFlowSource_sourceListenerAddress,
+    updateFlowSource_sourceListenerPort,
+    updateFlowSource_streamId,
+    updateFlowSource_vpcInterfaceName,
+    updateFlowSource_whitelistCidr,
+    updateFlowSource_flowArn,
+    updateFlowSource_sourceArn,
+    updateFlowSourceResponse_flowArn,
+    updateFlowSourceResponse_source,
+    updateFlowSourceResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AddMaintenance
+    addMaintenance_maintenanceDay,
+    addMaintenance_maintenanceStartHour,
+
+    -- ** AddMediaStreamRequest
+    addMediaStreamRequest_attributes,
+    addMediaStreamRequest_clockRate,
+    addMediaStreamRequest_description,
+    addMediaStreamRequest_videoFormat,
+    addMediaStreamRequest_mediaStreamType,
+    addMediaStreamRequest_mediaStreamId,
+    addMediaStreamRequest_mediaStreamName,
+
+    -- ** AddOutputRequest
+    addOutputRequest_cidrAllowList,
+    addOutputRequest_description,
+    addOutputRequest_destination,
+    addOutputRequest_encryption,
+    addOutputRequest_maxLatency,
+    addOutputRequest_mediaStreamOutputConfigurations,
+    addOutputRequest_minLatency,
+    addOutputRequest_name,
+    addOutputRequest_port,
+    addOutputRequest_remoteId,
+    addOutputRequest_senderControlPort,
+    addOutputRequest_smoothingLatency,
+    addOutputRequest_streamId,
+    addOutputRequest_vpcInterfaceAttachment,
+    addOutputRequest_protocol,
+
+    -- ** DestinationConfiguration
+    destinationConfiguration_destinationIp,
+    destinationConfiguration_destinationPort,
+    destinationConfiguration_interface,
+    destinationConfiguration_outboundIp,
+
+    -- ** DestinationConfigurationRequest
+    destinationConfigurationRequest_destinationIp,
+    destinationConfigurationRequest_destinationPort,
+    destinationConfigurationRequest_interface,
+
+    -- ** EncodingParameters
+    encodingParameters_encoderProfile,
+    encodingParameters_compressionFactor,
+
+    -- ** EncodingParametersRequest
+    encodingParametersRequest_encoderProfile,
+    encodingParametersRequest_compressionFactor,
+
+    -- ** Encryption
+    encryption_algorithm,
+    encryption_constantInitializationVector,
+    encryption_deviceId,
+    encryption_keyType,
+    encryption_region,
+    encryption_resourceId,
+    encryption_secretArn,
+    encryption_url,
+    encryption_roleArn,
+
+    -- ** Entitlement
+    entitlement_dataTransferSubscriberFeePercent,
+    entitlement_description,
+    entitlement_encryption,
+    entitlement_entitlementStatus,
+    entitlement_entitlementArn,
+    entitlement_subscribers,
+    entitlement_name,
+
+    -- ** FailoverConfig
+    failoverConfig_failoverMode,
+    failoverConfig_recoveryWindow,
+    failoverConfig_sourcePriority,
+    failoverConfig_state,
+
+    -- ** Flow
+    flow_description,
+    flow_egressIp,
+    flow_maintenance,
+    flow_mediaStreams,
+    flow_sourceFailoverConfig,
+    flow_sources,
+    flow_vpcInterfaces,
+    flow_status,
+    flow_entitlements,
+    flow_outputs,
+    flow_availabilityZone,
+    flow_flowArn,
+    flow_source,
+    flow_name,
+
+    -- ** Fmtp
+    fmtp_channelOrder,
+    fmtp_colorimetry,
+    fmtp_exactFramerate,
+    fmtp_par,
+    fmtp_range,
+    fmtp_scanMode,
+    fmtp_tcs,
+
+    -- ** FmtpRequest
+    fmtpRequest_channelOrder,
+    fmtpRequest_colorimetry,
+    fmtpRequest_exactFramerate,
+    fmtpRequest_par,
+    fmtpRequest_range,
+    fmtpRequest_scanMode,
+    fmtpRequest_tcs,
+
+    -- ** GrantEntitlementRequest
+    grantEntitlementRequest_dataTransferSubscriberFeePercent,
+    grantEntitlementRequest_description,
+    grantEntitlementRequest_encryption,
+    grantEntitlementRequest_entitlementStatus,
+    grantEntitlementRequest_name,
+    grantEntitlementRequest_subscribers,
+
+    -- ** InputConfiguration
+    inputConfiguration_inputPort,
+    inputConfiguration_inputIp,
+    inputConfiguration_interface,
+
+    -- ** InputConfigurationRequest
+    inputConfigurationRequest_inputPort,
+    inputConfigurationRequest_interface,
+
+    -- ** Interface
+    interface_name,
+
+    -- ** InterfaceRequest
+    interfaceRequest_name,
+
+    -- ** ListedEntitlement
+    listedEntitlement_dataTransferSubscriberFeePercent,
+    listedEntitlement_entitlementArn,
+    listedEntitlement_entitlementName,
+
+    -- ** ListedFlow
+    listedFlow_maintenance,
+    listedFlow_status,
+    listedFlow_description,
+    listedFlow_sourceType,
+    listedFlow_availabilityZone,
+    listedFlow_flowArn,
+    listedFlow_name,
+
+    -- ** Maintenance
+    maintenance_maintenanceDay,
+    maintenance_maintenanceDeadline,
+    maintenance_maintenanceScheduledDate,
+    maintenance_maintenanceStartHour,
+
+    -- ** MediaStream
+    mediaStream_attributes,
+    mediaStream_clockRate,
+    mediaStream_description,
+    mediaStream_videoFormat,
+    mediaStream_mediaStreamType,
+    mediaStream_mediaStreamId,
+    mediaStream_mediaStreamName,
+    mediaStream_fmt,
+
+    -- ** MediaStreamAttributes
+    mediaStreamAttributes_lang,
+    mediaStreamAttributes_fmtp,
+
+    -- ** MediaStreamAttributesRequest
+    mediaStreamAttributesRequest_fmtp,
+    mediaStreamAttributesRequest_lang,
+
+    -- ** MediaStreamOutputConfiguration
+    mediaStreamOutputConfiguration_destinationConfigurations,
+    mediaStreamOutputConfiguration_encodingParameters,
+    mediaStreamOutputConfiguration_mediaStreamName,
+    mediaStreamOutputConfiguration_encodingName,
+
+    -- ** MediaStreamOutputConfigurationRequest
+    mediaStreamOutputConfigurationRequest_destinationConfigurations,
+    mediaStreamOutputConfigurationRequest_encodingParameters,
+    mediaStreamOutputConfigurationRequest_mediaStreamName,
+    mediaStreamOutputConfigurationRequest_encodingName,
+
+    -- ** MediaStreamSourceConfiguration
+    mediaStreamSourceConfiguration_inputConfigurations,
+    mediaStreamSourceConfiguration_mediaStreamName,
+    mediaStreamSourceConfiguration_encodingName,
+
+    -- ** MediaStreamSourceConfigurationRequest
+    mediaStreamSourceConfigurationRequest_inputConfigurations,
+    mediaStreamSourceConfigurationRequest_mediaStreamName,
+    mediaStreamSourceConfigurationRequest_encodingName,
+
+    -- ** Messages
+    messages_errors,
+
+    -- ** Offering
+    offering_currencyCode,
+    offering_offeringArn,
+    offering_offeringDescription,
+    offering_durationUnits,
+    offering_duration,
+    offering_pricePerUnit,
+    offering_resourceSpecification,
+    offering_priceUnits,
+
+    -- ** Output
+    output_dataTransferSubscriberFeePercent,
+    output_description,
+    output_destination,
+    output_encryption,
+    output_entitlementArn,
+    output_listenerAddress,
+    output_mediaLiveInputArn,
+    output_mediaStreamOutputConfigurations,
+    output_port,
+    output_transport,
+    output_vpcInterfaceAttachment,
+    output_outputArn,
+    output_name,
+
+    -- ** Reservation
+    reservation_currencyCode,
+    reservation_reservationState,
+    reservation_offeringArn,
+    reservation_reservationArn,
+    reservation_start,
+    reservation_offeringDescription,
+    reservation_reservationName,
+    reservation_end,
+    reservation_duration,
+    reservation_durationUnits,
+    reservation_pricePerUnit,
+    reservation_resourceSpecification,
+    reservation_priceUnits,
+
+    -- ** ResourceSpecification
+    resourceSpecification_reservedBitrate,
+    resourceSpecification_resourceType,
+
+    -- ** SetSourceRequest
+    setSourceRequest_decryption,
+    setSourceRequest_description,
+    setSourceRequest_entitlementArn,
+    setSourceRequest_ingestPort,
+    setSourceRequest_maxBitrate,
+    setSourceRequest_maxLatency,
+    setSourceRequest_maxSyncBuffer,
+    setSourceRequest_mediaStreamSourceConfigurations,
+    setSourceRequest_minLatency,
+    setSourceRequest_name,
+    setSourceRequest_protocol,
+    setSourceRequest_senderControlPort,
+    setSourceRequest_senderIpAddress,
+    setSourceRequest_sourceListenerAddress,
+    setSourceRequest_sourceListenerPort,
+    setSourceRequest_streamId,
+    setSourceRequest_vpcInterfaceName,
+    setSourceRequest_whitelistCidr,
+
+    -- ** Source
+    source_dataTransferSubscriberFeePercent,
+    source_decryption,
+    source_description,
+    source_entitlementArn,
+    source_ingestIp,
+    source_ingestPort,
+    source_mediaStreamSourceConfigurations,
+    source_senderControlPort,
+    source_senderIpAddress,
+    source_transport,
+    source_vpcInterfaceName,
+    source_whitelistCidr,
+    source_sourceArn,
+    source_name,
+
+    -- ** SourcePriority
+    sourcePriority_primarySource,
+
+    -- ** Transport
+    transport_cidrAllowList,
+    transport_maxBitrate,
+    transport_maxLatency,
+    transport_maxSyncBuffer,
+    transport_minLatency,
+    transport_remoteId,
+    transport_senderControlPort,
+    transport_senderIpAddress,
+    transport_smoothingLatency,
+    transport_sourceListenerAddress,
+    transport_sourceListenerPort,
+    transport_streamId,
+    transport_protocol,
+
+    -- ** UpdateEncryption
+    updateEncryption_algorithm,
+    updateEncryption_constantInitializationVector,
+    updateEncryption_deviceId,
+    updateEncryption_keyType,
+    updateEncryption_region,
+    updateEncryption_resourceId,
+    updateEncryption_roleArn,
+    updateEncryption_secretArn,
+    updateEncryption_url,
+
+    -- ** UpdateFailoverConfig
+    updateFailoverConfig_failoverMode,
+    updateFailoverConfig_recoveryWindow,
+    updateFailoverConfig_sourcePriority,
+    updateFailoverConfig_state,
+
+    -- ** UpdateMaintenance
+    updateMaintenance_maintenanceDay,
+    updateMaintenance_maintenanceScheduledDate,
+    updateMaintenance_maintenanceStartHour,
+
+    -- ** VpcInterface
+    vpcInterface_networkInterfaceType,
+    vpcInterface_networkInterfaceIds,
+    vpcInterface_subnetId,
+    vpcInterface_securityGroupIds,
+    vpcInterface_roleArn,
+    vpcInterface_name,
+
+    -- ** VpcInterfaceAttachment
+    vpcInterfaceAttachment_vpcInterfaceName,
+
+    -- ** VpcInterfaceRequest
+    vpcInterfaceRequest_networkInterfaceType,
+    vpcInterfaceRequest_subnetId,
+    vpcInterfaceRequest_securityGroupIds,
+    vpcInterfaceRequest_roleArn,
+    vpcInterfaceRequest_name,
+  )
+where
+
+import Amazonka.MediaConnect.AddFlowMediaStreams
+import Amazonka.MediaConnect.AddFlowOutputs
+import Amazonka.MediaConnect.AddFlowSources
+import Amazonka.MediaConnect.AddFlowVpcInterfaces
+import Amazonka.MediaConnect.CreateFlow
+import Amazonka.MediaConnect.DeleteFlow
+import Amazonka.MediaConnect.DescribeFlow
+import Amazonka.MediaConnect.DescribeOffering
+import Amazonka.MediaConnect.DescribeReservation
+import Amazonka.MediaConnect.GrantFlowEntitlements
+import Amazonka.MediaConnect.ListEntitlements
+import Amazonka.MediaConnect.ListFlows
+import Amazonka.MediaConnect.ListOfferings
+import Amazonka.MediaConnect.ListReservations
+import Amazonka.MediaConnect.ListTagsForResource
+import Amazonka.MediaConnect.PurchaseOffering
+import Amazonka.MediaConnect.RemoveFlowMediaStream
+import Amazonka.MediaConnect.RemoveFlowOutput
+import Amazonka.MediaConnect.RemoveFlowSource
+import Amazonka.MediaConnect.RemoveFlowVpcInterface
+import Amazonka.MediaConnect.RevokeFlowEntitlement
+import Amazonka.MediaConnect.StartFlow
+import Amazonka.MediaConnect.StopFlow
+import Amazonka.MediaConnect.TagResource
+import Amazonka.MediaConnect.Types.AddMaintenance
+import Amazonka.MediaConnect.Types.AddMediaStreamRequest
+import Amazonka.MediaConnect.Types.AddOutputRequest
+import Amazonka.MediaConnect.Types.DestinationConfiguration
+import Amazonka.MediaConnect.Types.DestinationConfigurationRequest
+import Amazonka.MediaConnect.Types.EncodingParameters
+import Amazonka.MediaConnect.Types.EncodingParametersRequest
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.Entitlement
+import Amazonka.MediaConnect.Types.FailoverConfig
+import Amazonka.MediaConnect.Types.Flow
+import Amazonka.MediaConnect.Types.Fmtp
+import Amazonka.MediaConnect.Types.FmtpRequest
+import Amazonka.MediaConnect.Types.GrantEntitlementRequest
+import Amazonka.MediaConnect.Types.InputConfiguration
+import Amazonka.MediaConnect.Types.InputConfigurationRequest
+import Amazonka.MediaConnect.Types.Interface
+import Amazonka.MediaConnect.Types.InterfaceRequest
+import Amazonka.MediaConnect.Types.ListedEntitlement
+import Amazonka.MediaConnect.Types.ListedFlow
+import Amazonka.MediaConnect.Types.Maintenance
+import Amazonka.MediaConnect.Types.MediaStream
+import Amazonka.MediaConnect.Types.MediaStreamAttributes
+import Amazonka.MediaConnect.Types.MediaStreamAttributesRequest
+import Amazonka.MediaConnect.Types.MediaStreamOutputConfiguration
+import Amazonka.MediaConnect.Types.MediaStreamOutputConfigurationRequest
+import Amazonka.MediaConnect.Types.MediaStreamSourceConfiguration
+import Amazonka.MediaConnect.Types.MediaStreamSourceConfigurationRequest
+import Amazonka.MediaConnect.Types.Messages
+import Amazonka.MediaConnect.Types.Offering
+import Amazonka.MediaConnect.Types.Output
+import Amazonka.MediaConnect.Types.Reservation
+import Amazonka.MediaConnect.Types.ResourceSpecification
+import Amazonka.MediaConnect.Types.SetSourceRequest
+import Amazonka.MediaConnect.Types.Source
+import Amazonka.MediaConnect.Types.SourcePriority
+import Amazonka.MediaConnect.Types.Transport
+import Amazonka.MediaConnect.Types.UpdateEncryption
+import Amazonka.MediaConnect.Types.UpdateFailoverConfig
+import Amazonka.MediaConnect.Types.UpdateMaintenance
+import Amazonka.MediaConnect.Types.VpcInterface
+import Amazonka.MediaConnect.Types.VpcInterfaceAttachment
+import Amazonka.MediaConnect.Types.VpcInterfaceRequest
+import Amazonka.MediaConnect.UntagResource
+import Amazonka.MediaConnect.UpdateFlow
+import Amazonka.MediaConnect.UpdateFlowEntitlement
+import Amazonka.MediaConnect.UpdateFlowMediaStream
+import Amazonka.MediaConnect.UpdateFlowOutput
+import Amazonka.MediaConnect.UpdateFlowSource
diff --git a/gen/Amazonka/MediaConnect/ListEntitlements.hs b/gen/Amazonka/MediaConnect/ListEntitlements.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/ListEntitlements.hs
@@ -0,0 +1,260 @@
+{-# 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.MediaConnect.ListEntitlements
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays a list of all entitlements that have been granted to this
+-- account. This request returns 20 results per page.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaConnect.ListEntitlements
+  ( -- * Creating a Request
+    ListEntitlements (..),
+    newListEntitlements,
+
+    -- * Request Lenses
+    listEntitlements_maxResults,
+    listEntitlements_nextToken,
+
+    -- * Destructuring the Response
+    ListEntitlementsResponse (..),
+    newListEntitlementsResponse,
+
+    -- * Response Lenses
+    listEntitlementsResponse_entitlements,
+    listEntitlementsResponse_nextToken,
+    listEntitlementsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEntitlements' smart constructor.
+data ListEntitlements = ListEntitlements'
+  { -- | The maximum number of results to return per API request. For example,
+    -- you submit a ListEntitlements request with MaxResults set at 5. Although
+    -- 20 items match your request, the service returns no more than the first
+    -- 5 items. (The service also returns a NextToken value that you can use to
+    -- fetch the next batch of results.) The service might return fewer results
+    -- than the MaxResults value. If MaxResults is not included in the request,
+    -- the service defaults to pagination with a maximum of 20 results per
+    -- page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListEntitlements request with MaxResults set
+    -- at 5. The service returns the first batch of results (up to 5) and a
+    -- NextToken value. To see the next batch of results, you can submit the
+    -- ListEntitlements request a second time and specify the NextToken value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEntitlements' 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', 'listEntitlements_maxResults' - The maximum number of results to return per API request. For example,
+-- you submit a ListEntitlements request with MaxResults set at 5. Although
+-- 20 items match your request, the service returns no more than the first
+-- 5 items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 20 results per
+-- page.
+--
+-- 'nextToken', 'listEntitlements_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListEntitlements request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListEntitlements request a second time and specify the NextToken value.
+newListEntitlements ::
+  ListEntitlements
+newListEntitlements =
+  ListEntitlements'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per API request. For example,
+-- you submit a ListEntitlements request with MaxResults set at 5. Although
+-- 20 items match your request, the service returns no more than the first
+-- 5 items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 20 results per
+-- page.
+listEntitlements_maxResults :: Lens.Lens' ListEntitlements (Prelude.Maybe Prelude.Natural)
+listEntitlements_maxResults = Lens.lens (\ListEntitlements' {maxResults} -> maxResults) (\s@ListEntitlements' {} a -> s {maxResults = a} :: ListEntitlements)
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListEntitlements request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListEntitlements request a second time and specify the NextToken value.
+listEntitlements_nextToken :: Lens.Lens' ListEntitlements (Prelude.Maybe Prelude.Text)
+listEntitlements_nextToken = Lens.lens (\ListEntitlements' {nextToken} -> nextToken) (\s@ListEntitlements' {} a -> s {nextToken = a} :: ListEntitlements)
+
+instance Core.AWSPager ListEntitlements where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEntitlementsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listEntitlementsResponse_entitlements
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEntitlements_nextToken
+          Lens..~ rs
+          Lens.^? listEntitlementsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEntitlements where
+  type
+    AWSResponse ListEntitlements =
+      ListEntitlementsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEntitlementsResponse'
+            Prelude.<$> (x Data..?> "entitlements" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEntitlements where
+  hashWithSalt _salt ListEntitlements' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEntitlements where
+  rnf ListEntitlements' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEntitlements where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEntitlements where
+  toPath = Prelude.const "/v1/entitlements"
+
+instance Data.ToQuery ListEntitlements where
+  toQuery ListEntitlements' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEntitlementsResponse' smart constructor.
+data ListEntitlementsResponse = ListEntitlementsResponse'
+  { -- | A list of entitlements that have been granted to you from other AWS
+    -- accounts.
+    entitlements :: Prelude.Maybe [ListedEntitlement],
+    -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListEntitlements request with MaxResults set
+    -- at 5. The service returns the first batch of results (up to 5) and a
+    -- NextToken value. To see the next batch of results, you can submit the
+    -- ListEntitlements request a second time and specify the NextToken value.
+    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 'ListEntitlementsResponse' 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:
+--
+-- 'entitlements', 'listEntitlementsResponse_entitlements' - A list of entitlements that have been granted to you from other AWS
+-- accounts.
+--
+-- 'nextToken', 'listEntitlementsResponse_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListEntitlements request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListEntitlements request a second time and specify the NextToken value.
+--
+-- 'httpStatus', 'listEntitlementsResponse_httpStatus' - The response's http status code.
+newListEntitlementsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEntitlementsResponse
+newListEntitlementsResponse pHttpStatus_ =
+  ListEntitlementsResponse'
+    { entitlements =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of entitlements that have been granted to you from other AWS
+-- accounts.
+listEntitlementsResponse_entitlements :: Lens.Lens' ListEntitlementsResponse (Prelude.Maybe [ListedEntitlement])
+listEntitlementsResponse_entitlements = Lens.lens (\ListEntitlementsResponse' {entitlements} -> entitlements) (\s@ListEntitlementsResponse' {} a -> s {entitlements = a} :: ListEntitlementsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListEntitlements request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListEntitlements request a second time and specify the NextToken value.
+listEntitlementsResponse_nextToken :: Lens.Lens' ListEntitlementsResponse (Prelude.Maybe Prelude.Text)
+listEntitlementsResponse_nextToken = Lens.lens (\ListEntitlementsResponse' {nextToken} -> nextToken) (\s@ListEntitlementsResponse' {} a -> s {nextToken = a} :: ListEntitlementsResponse)
+
+-- | The response's http status code.
+listEntitlementsResponse_httpStatus :: Lens.Lens' ListEntitlementsResponse Prelude.Int
+listEntitlementsResponse_httpStatus = Lens.lens (\ListEntitlementsResponse' {httpStatus} -> httpStatus) (\s@ListEntitlementsResponse' {} a -> s {httpStatus = a} :: ListEntitlementsResponse)
+
+instance Prelude.NFData ListEntitlementsResponse where
+  rnf ListEntitlementsResponse' {..} =
+    Prelude.rnf entitlements
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/ListFlows.hs b/gen/Amazonka/MediaConnect/ListFlows.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/ListFlows.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.MediaConnect.ListFlows
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays a list of flows that are associated with this account. This
+-- request returns a paginated result.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaConnect.ListFlows
+  ( -- * Creating a Request
+    ListFlows (..),
+    newListFlows,
+
+    -- * Request Lenses
+    listFlows_maxResults,
+    listFlows_nextToken,
+
+    -- * Destructuring the Response
+    ListFlowsResponse (..),
+    newListFlowsResponse,
+
+    -- * Response Lenses
+    listFlowsResponse_flows,
+    listFlowsResponse_nextToken,
+    listFlowsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFlows' smart constructor.
+data ListFlows = ListFlows'
+  { -- | The maximum number of results to return per API request. For example,
+    -- you submit a ListFlows request with MaxResults set at 5. Although 20
+    -- items match your request, the service returns no more than the first 5
+    -- items. (The service also returns a NextToken value that you can use to
+    -- fetch the next batch of results.) The service might return fewer results
+    -- than the MaxResults value. If MaxResults is not included in the request,
+    -- the service defaults to pagination with a maximum of 10 results per
+    -- page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListFlows request with MaxResults set at 5.
+    -- The service returns the first batch of results (up to 5) and a NextToken
+    -- value. To see the next batch of results, you can submit the ListFlows
+    -- request a second time and specify the NextToken value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFlows' 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', 'listFlows_maxResults' - The maximum number of results to return per API request. For example,
+-- you submit a ListFlows request with MaxResults set at 5. Although 20
+-- items match your request, the service returns no more than the first 5
+-- items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 10 results per
+-- page.
+--
+-- 'nextToken', 'listFlows_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListFlows request with MaxResults set at 5.
+-- The service returns the first batch of results (up to 5) and a NextToken
+-- value. To see the next batch of results, you can submit the ListFlows
+-- request a second time and specify the NextToken value.
+newListFlows ::
+  ListFlows
+newListFlows =
+  ListFlows'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per API request. For example,
+-- you submit a ListFlows request with MaxResults set at 5. Although 20
+-- items match your request, the service returns no more than the first 5
+-- items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 10 results per
+-- page.
+listFlows_maxResults :: Lens.Lens' ListFlows (Prelude.Maybe Prelude.Natural)
+listFlows_maxResults = Lens.lens (\ListFlows' {maxResults} -> maxResults) (\s@ListFlows' {} a -> s {maxResults = a} :: ListFlows)
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListFlows request with MaxResults set at 5.
+-- The service returns the first batch of results (up to 5) and a NextToken
+-- value. To see the next batch of results, you can submit the ListFlows
+-- request a second time and specify the NextToken value.
+listFlows_nextToken :: Lens.Lens' ListFlows (Prelude.Maybe Prelude.Text)
+listFlows_nextToken = Lens.lens (\ListFlows' {nextToken} -> nextToken) (\s@ListFlows' {} a -> s {nextToken = a} :: ListFlows)
+
+instance Core.AWSPager ListFlows where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFlowsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listFlowsResponse_flows
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listFlows_nextToken
+          Lens..~ rs
+          Lens.^? listFlowsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListFlows where
+  type AWSResponse ListFlows = ListFlowsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFlowsResponse'
+            Prelude.<$> (x Data..?> "flows" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFlows where
+  hashWithSalt _salt ListFlows' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListFlows where
+  rnf ListFlows' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListFlows where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListFlows where
+  toPath = Prelude.const "/v1/flows"
+
+instance Data.ToQuery ListFlows where
+  toQuery ListFlows' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListFlowsResponse' smart constructor.
+data ListFlowsResponse = ListFlowsResponse'
+  { -- | A list of flow summaries.
+    flows :: Prelude.Maybe [ListedFlow],
+    -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListFlows request with MaxResults set at 5.
+    -- The service returns the first batch of results (up to 5) and a NextToken
+    -- value. To see the next batch of results, you can submit the ListFlows
+    -- request a second time and specify the NextToken value.
+    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 'ListFlowsResponse' 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:
+--
+-- 'flows', 'listFlowsResponse_flows' - A list of flow summaries.
+--
+-- 'nextToken', 'listFlowsResponse_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListFlows request with MaxResults set at 5.
+-- The service returns the first batch of results (up to 5) and a NextToken
+-- value. To see the next batch of results, you can submit the ListFlows
+-- request a second time and specify the NextToken value.
+--
+-- 'httpStatus', 'listFlowsResponse_httpStatus' - The response's http status code.
+newListFlowsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFlowsResponse
+newListFlowsResponse pHttpStatus_ =
+  ListFlowsResponse'
+    { flows = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of flow summaries.
+listFlowsResponse_flows :: Lens.Lens' ListFlowsResponse (Prelude.Maybe [ListedFlow])
+listFlowsResponse_flows = Lens.lens (\ListFlowsResponse' {flows} -> flows) (\s@ListFlowsResponse' {} a -> s {flows = a} :: ListFlowsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListFlows request with MaxResults set at 5.
+-- The service returns the first batch of results (up to 5) and a NextToken
+-- value. To see the next batch of results, you can submit the ListFlows
+-- request a second time and specify the NextToken value.
+listFlowsResponse_nextToken :: Lens.Lens' ListFlowsResponse (Prelude.Maybe Prelude.Text)
+listFlowsResponse_nextToken = Lens.lens (\ListFlowsResponse' {nextToken} -> nextToken) (\s@ListFlowsResponse' {} a -> s {nextToken = a} :: ListFlowsResponse)
+
+-- | The response's http status code.
+listFlowsResponse_httpStatus :: Lens.Lens' ListFlowsResponse Prelude.Int
+listFlowsResponse_httpStatus = Lens.lens (\ListFlowsResponse' {httpStatus} -> httpStatus) (\s@ListFlowsResponse' {} a -> s {httpStatus = a} :: ListFlowsResponse)
+
+instance Prelude.NFData ListFlowsResponse where
+  rnf ListFlowsResponse' {..} =
+    Prelude.rnf flows
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/ListOfferings.hs b/gen/Amazonka/MediaConnect/ListOfferings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/ListOfferings.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.ListOfferings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays a list of all offerings that are available to this account in
+-- the current AWS Region. If you have an active reservation (which means
+-- you\'ve purchased an offering that has already started and hasn\'t
+-- expired yet), your account isn\'t eligible for other offerings.
+--
+-- This operation returns paginated results.
+module Amazonka.MediaConnect.ListOfferings
+  ( -- * Creating a Request
+    ListOfferings (..),
+    newListOfferings,
+
+    -- * Request Lenses
+    listOfferings_maxResults,
+    listOfferings_nextToken,
+
+    -- * Destructuring the Response
+    ListOfferingsResponse (..),
+    newListOfferingsResponse,
+
+    -- * Response Lenses
+    listOfferingsResponse_nextToken,
+    listOfferingsResponse_offerings,
+    listOfferingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListOfferings' smart constructor.
+data ListOfferings = ListOfferings'
+  { -- | The maximum number of results to return per API request. For example,
+    -- you submit a ListOfferings request with MaxResults set at 5. Although 20
+    -- items match your request, the service returns no more than the first 5
+    -- items. (The service also returns a NextToken value that you can use to
+    -- fetch the next batch of results.) The service might return fewer results
+    -- than the MaxResults value. If MaxResults is not included in the request,
+    -- the service defaults to pagination with a maximum of 10 results per
+    -- page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListOfferings request with MaxResults set at
+    -- 5. The service returns the first batch of results (up to 5) and a
+    -- NextToken value. To see the next batch of results, you can submit the
+    -- ListOfferings request a second time and specify the NextToken value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListOfferings' 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', 'listOfferings_maxResults' - The maximum number of results to return per API request. For example,
+-- you submit a ListOfferings request with MaxResults set at 5. Although 20
+-- items match your request, the service returns no more than the first 5
+-- items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 10 results per
+-- page.
+--
+-- 'nextToken', 'listOfferings_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListOfferings request with MaxResults set at
+-- 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListOfferings request a second time and specify the NextToken value.
+newListOfferings ::
+  ListOfferings
+newListOfferings =
+  ListOfferings'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per API request. For example,
+-- you submit a ListOfferings request with MaxResults set at 5. Although 20
+-- items match your request, the service returns no more than the first 5
+-- items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 10 results per
+-- page.
+listOfferings_maxResults :: Lens.Lens' ListOfferings (Prelude.Maybe Prelude.Natural)
+listOfferings_maxResults = Lens.lens (\ListOfferings' {maxResults} -> maxResults) (\s@ListOfferings' {} a -> s {maxResults = a} :: ListOfferings)
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListOfferings request with MaxResults set at
+-- 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListOfferings request a second time and specify the NextToken value.
+listOfferings_nextToken :: Lens.Lens' ListOfferings (Prelude.Maybe Prelude.Text)
+listOfferings_nextToken = Lens.lens (\ListOfferings' {nextToken} -> nextToken) (\s@ListOfferings' {} a -> s {nextToken = a} :: ListOfferings)
+
+instance Core.AWSPager ListOfferings where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listOfferingsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listOfferingsResponse_offerings
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listOfferings_nextToken
+          Lens..~ rs
+          Lens.^? listOfferingsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListOfferings where
+  type
+    AWSResponse ListOfferings =
+      ListOfferingsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListOfferingsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "offerings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListOfferings where
+  hashWithSalt _salt ListOfferings' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListOfferings where
+  rnf ListOfferings' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListOfferings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListOfferings where
+  toPath = Prelude.const "/v1/offerings"
+
+instance Data.ToQuery ListOfferings where
+  toQuery ListOfferings' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListOfferingsResponse' smart constructor.
+data ListOfferingsResponse = ListOfferingsResponse'
+  { -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListOfferings request with MaxResults set at
+    -- 5. The service returns the first batch of results (up to 5) and a
+    -- NextToken value. To see the next batch of results, you can submit the
+    -- ListOfferings request a second time and specify the NextToken value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of offerings that are available to this account in the current
+    -- AWS Region.
+    offerings :: Prelude.Maybe [Offering],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListOfferingsResponse' 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', 'listOfferingsResponse_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListOfferings request with MaxResults set at
+-- 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListOfferings request a second time and specify the NextToken value.
+--
+-- 'offerings', 'listOfferingsResponse_offerings' - A list of offerings that are available to this account in the current
+-- AWS Region.
+--
+-- 'httpStatus', 'listOfferingsResponse_httpStatus' - The response's http status code.
+newListOfferingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListOfferingsResponse
+newListOfferingsResponse pHttpStatus_ =
+  ListOfferingsResponse'
+    { nextToken = Prelude.Nothing,
+      offerings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListOfferings request with MaxResults set at
+-- 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListOfferings request a second time and specify the NextToken value.
+listOfferingsResponse_nextToken :: Lens.Lens' ListOfferingsResponse (Prelude.Maybe Prelude.Text)
+listOfferingsResponse_nextToken = Lens.lens (\ListOfferingsResponse' {nextToken} -> nextToken) (\s@ListOfferingsResponse' {} a -> s {nextToken = a} :: ListOfferingsResponse)
+
+-- | A list of offerings that are available to this account in the current
+-- AWS Region.
+listOfferingsResponse_offerings :: Lens.Lens' ListOfferingsResponse (Prelude.Maybe [Offering])
+listOfferingsResponse_offerings = Lens.lens (\ListOfferingsResponse' {offerings} -> offerings) (\s@ListOfferingsResponse' {} a -> s {offerings = a} :: ListOfferingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listOfferingsResponse_httpStatus :: Lens.Lens' ListOfferingsResponse Prelude.Int
+listOfferingsResponse_httpStatus = Lens.lens (\ListOfferingsResponse' {httpStatus} -> httpStatus) (\s@ListOfferingsResponse' {} a -> s {httpStatus = a} :: ListOfferingsResponse)
+
+instance Prelude.NFData ListOfferingsResponse where
+  rnf ListOfferingsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf offerings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/ListReservations.hs b/gen/Amazonka/MediaConnect/ListReservations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/ListReservations.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.ListReservations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays a list of all reservations that have been purchased by this
+-- account in the current AWS Region. This list includes all reservations
+-- in all states (such as active and expired).
+--
+-- This operation returns paginated results.
+module Amazonka.MediaConnect.ListReservations
+  ( -- * Creating a Request
+    ListReservations (..),
+    newListReservations,
+
+    -- * Request Lenses
+    listReservations_maxResults,
+    listReservations_nextToken,
+
+    -- * Destructuring the Response
+    ListReservationsResponse (..),
+    newListReservationsResponse,
+
+    -- * Response Lenses
+    listReservationsResponse_nextToken,
+    listReservationsResponse_reservations,
+    listReservationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListReservations' smart constructor.
+data ListReservations = ListReservations'
+  { -- | The maximum number of results to return per API request. For example,
+    -- you submit a ListReservations request with MaxResults set at 5. Although
+    -- 20 items match your request, the service returns no more than the first
+    -- 5 items. (The service also returns a NextToken value that you can use to
+    -- fetch the next batch of results.) The service might return fewer results
+    -- than the MaxResults value. If MaxResults is not included in the request,
+    -- the service defaults to pagination with a maximum of 10 results per
+    -- page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListReservations request with MaxResults set
+    -- at 5. The service returns the first batch of results (up to 5) and a
+    -- NextToken value. To see the next batch of results, you can submit the
+    -- ListOfferings request a second time and specify the NextToken value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListReservations' 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', 'listReservations_maxResults' - The maximum number of results to return per API request. For example,
+-- you submit a ListReservations request with MaxResults set at 5. Although
+-- 20 items match your request, the service returns no more than the first
+-- 5 items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 10 results per
+-- page.
+--
+-- 'nextToken', 'listReservations_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListReservations request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListOfferings request a second time and specify the NextToken value.
+newListReservations ::
+  ListReservations
+newListReservations =
+  ListReservations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per API request. For example,
+-- you submit a ListReservations request with MaxResults set at 5. Although
+-- 20 items match your request, the service returns no more than the first
+-- 5 items. (The service also returns a NextToken value that you can use to
+-- fetch the next batch of results.) The service might return fewer results
+-- than the MaxResults value. If MaxResults is not included in the request,
+-- the service defaults to pagination with a maximum of 10 results per
+-- page.
+listReservations_maxResults :: Lens.Lens' ListReservations (Prelude.Maybe Prelude.Natural)
+listReservations_maxResults = Lens.lens (\ListReservations' {maxResults} -> maxResults) (\s@ListReservations' {} a -> s {maxResults = a} :: ListReservations)
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListReservations request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListOfferings request a second time and specify the NextToken value.
+listReservations_nextToken :: Lens.Lens' ListReservations (Prelude.Maybe Prelude.Text)
+listReservations_nextToken = Lens.lens (\ListReservations' {nextToken} -> nextToken) (\s@ListReservations' {} a -> s {nextToken = a} :: ListReservations)
+
+instance Core.AWSPager ListReservations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listReservationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listReservationsResponse_reservations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listReservations_nextToken
+          Lens..~ rs
+          Lens.^? listReservationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListReservations where
+  type
+    AWSResponse ListReservations =
+      ListReservationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListReservationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "reservations" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListReservations where
+  hashWithSalt _salt ListReservations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListReservations where
+  rnf ListReservations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListReservations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListReservations where
+  toPath = Prelude.const "/v1/reservations"
+
+instance Data.ToQuery ListReservations where
+  toQuery ListReservations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListReservationsResponse' smart constructor.
+data ListReservationsResponse = ListReservationsResponse'
+  { -- | The token that identifies which batch of results that you want to see.
+    -- For example, you submit a ListReservations request with MaxResults set
+    -- at 5. The service returns the first batch of results (up to 5) and a
+    -- NextToken value. To see the next batch of results, you can submit the
+    -- ListReservations request a second time and specify the NextToken value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of all reservations that have been purchased by this account in
+    -- the current AWS Region.
+    reservations :: Prelude.Maybe [Reservation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListReservationsResponse' 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', 'listReservationsResponse_nextToken' - The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListReservations request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListReservations request a second time and specify the NextToken value.
+--
+-- 'reservations', 'listReservationsResponse_reservations' - A list of all reservations that have been purchased by this account in
+-- the current AWS Region.
+--
+-- 'httpStatus', 'listReservationsResponse_httpStatus' - The response's http status code.
+newListReservationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListReservationsResponse
+newListReservationsResponse pHttpStatus_ =
+  ListReservationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      reservations = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that identifies which batch of results that you want to see.
+-- For example, you submit a ListReservations request with MaxResults set
+-- at 5. The service returns the first batch of results (up to 5) and a
+-- NextToken value. To see the next batch of results, you can submit the
+-- ListReservations request a second time and specify the NextToken value.
+listReservationsResponse_nextToken :: Lens.Lens' ListReservationsResponse (Prelude.Maybe Prelude.Text)
+listReservationsResponse_nextToken = Lens.lens (\ListReservationsResponse' {nextToken} -> nextToken) (\s@ListReservationsResponse' {} a -> s {nextToken = a} :: ListReservationsResponse)
+
+-- | A list of all reservations that have been purchased by this account in
+-- the current AWS Region.
+listReservationsResponse_reservations :: Lens.Lens' ListReservationsResponse (Prelude.Maybe [Reservation])
+listReservationsResponse_reservations = Lens.lens (\ListReservationsResponse' {reservations} -> reservations) (\s@ListReservationsResponse' {} a -> s {reservations = a} :: ListReservationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listReservationsResponse_httpStatus :: Lens.Lens' ListReservationsResponse Prelude.Int
+listReservationsResponse_httpStatus = Lens.lens (\ListReservationsResponse' {httpStatus} -> httpStatus) (\s@ListReservationsResponse' {} a -> s {httpStatus = a} :: ListReservationsResponse)
+
+instance Prelude.NFData ListReservationsResponse where
+  rnf ListReservationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf reservations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/ListTagsForResource.hs b/gen/Amazonka/MediaConnect/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/ListTagsForResource.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.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)
+--
+-- List all tags on an AWS Elemental MediaConnect resource
+module Amazonka.MediaConnect.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.MediaConnect.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) that identifies the AWS Elemental
+    -- MediaConnect resource for which to list the tags.
+    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) that identifies the AWS Elemental
+-- MediaConnect resource for which to list the tags.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) that identifies the AWS Elemental
+-- MediaConnect resource for which to list the tags.
+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 map from tag keys to values. Tag keys can have a maximum character
+    -- length of 128 characters, and tag values can have a maximum length of
+    -- 256 characters.
+    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 map from tag keys to values. Tag keys can have a maximum character
+-- length of 128 characters, and tag values can have a maximum length of
+-- 256 characters.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A map from tag keys to values. Tag keys can have a maximum character
+-- length of 128 characters, and tag values can have a maximum length of
+-- 256 characters.
+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/MediaConnect/PurchaseOffering.hs b/gen/Amazonka/MediaConnect/PurchaseOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/PurchaseOffering.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.MediaConnect.PurchaseOffering
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Submits a request to purchase an offering. If you already have an active
+-- reservation, you can\'t purchase another offering.
+module Amazonka.MediaConnect.PurchaseOffering
+  ( -- * Creating a Request
+    PurchaseOffering (..),
+    newPurchaseOffering,
+
+    -- * Request Lenses
+    purchaseOffering_offeringArn,
+    purchaseOffering_start,
+    purchaseOffering_reservationName,
+
+    -- * Destructuring the Response
+    PurchaseOfferingResponse (..),
+    newPurchaseOfferingResponse,
+
+    -- * Response Lenses
+    purchaseOfferingResponse_reservation,
+    purchaseOfferingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to purchase a offering.
+--
+-- /See:/ 'newPurchaseOffering' smart constructor.
+data PurchaseOffering = PurchaseOffering'
+  { -- | The Amazon Resource Name (ARN) of the offering.
+    offeringArn :: Prelude.Text,
+    -- | The date and time that you want the reservation to begin, in Coordinated
+    -- Universal Time (UTC). You can specify any date and time between 12:00am
+    -- on the first day of the current month to the current time on today\'s
+    -- date, inclusive. Specify the start in a 24-hour notation. Use the
+    -- following format: YYYY-MM-DDTHH:mm:SSZ, where T and Z are literal
+    -- characters. For example, to specify 11:30pm on March 5, 2020, enter
+    -- 2020-03-05T23:30:00Z.
+    start :: Prelude.Text,
+    -- | The name that you want to use for the reservation.
+    reservationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseOffering' 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:
+--
+-- 'offeringArn', 'purchaseOffering_offeringArn' - The Amazon Resource Name (ARN) of the offering.
+--
+-- 'start', 'purchaseOffering_start' - The date and time that you want the reservation to begin, in Coordinated
+-- Universal Time (UTC). You can specify any date and time between 12:00am
+-- on the first day of the current month to the current time on today\'s
+-- date, inclusive. Specify the start in a 24-hour notation. Use the
+-- following format: YYYY-MM-DDTHH:mm:SSZ, where T and Z are literal
+-- characters. For example, to specify 11:30pm on March 5, 2020, enter
+-- 2020-03-05T23:30:00Z.
+--
+-- 'reservationName', 'purchaseOffering_reservationName' - The name that you want to use for the reservation.
+newPurchaseOffering ::
+  -- | 'offeringArn'
+  Prelude.Text ->
+  -- | 'start'
+  Prelude.Text ->
+  -- | 'reservationName'
+  Prelude.Text ->
+  PurchaseOffering
+newPurchaseOffering
+  pOfferingArn_
+  pStart_
+  pReservationName_ =
+    PurchaseOffering'
+      { offeringArn = pOfferingArn_,
+        start = pStart_,
+        reservationName = pReservationName_
+      }
+
+-- | The Amazon Resource Name (ARN) of the offering.
+purchaseOffering_offeringArn :: Lens.Lens' PurchaseOffering Prelude.Text
+purchaseOffering_offeringArn = Lens.lens (\PurchaseOffering' {offeringArn} -> offeringArn) (\s@PurchaseOffering' {} a -> s {offeringArn = a} :: PurchaseOffering)
+
+-- | The date and time that you want the reservation to begin, in Coordinated
+-- Universal Time (UTC). You can specify any date and time between 12:00am
+-- on the first day of the current month to the current time on today\'s
+-- date, inclusive. Specify the start in a 24-hour notation. Use the
+-- following format: YYYY-MM-DDTHH:mm:SSZ, where T and Z are literal
+-- characters. For example, to specify 11:30pm on March 5, 2020, enter
+-- 2020-03-05T23:30:00Z.
+purchaseOffering_start :: Lens.Lens' PurchaseOffering Prelude.Text
+purchaseOffering_start = Lens.lens (\PurchaseOffering' {start} -> start) (\s@PurchaseOffering' {} a -> s {start = a} :: PurchaseOffering)
+
+-- | The name that you want to use for the reservation.
+purchaseOffering_reservationName :: Lens.Lens' PurchaseOffering Prelude.Text
+purchaseOffering_reservationName = Lens.lens (\PurchaseOffering' {reservationName} -> reservationName) (\s@PurchaseOffering' {} a -> s {reservationName = a} :: PurchaseOffering)
+
+instance Core.AWSRequest PurchaseOffering where
+  type
+    AWSResponse PurchaseOffering =
+      PurchaseOfferingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PurchaseOfferingResponse'
+            Prelude.<$> (x Data..?> "reservation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PurchaseOffering where
+  hashWithSalt _salt PurchaseOffering' {..} =
+    _salt
+      `Prelude.hashWithSalt` offeringArn
+      `Prelude.hashWithSalt` start
+      `Prelude.hashWithSalt` reservationName
+
+instance Prelude.NFData PurchaseOffering where
+  rnf PurchaseOffering' {..} =
+    Prelude.rnf offeringArn
+      `Prelude.seq` Prelude.rnf start
+      `Prelude.seq` Prelude.rnf reservationName
+
+instance Data.ToHeaders PurchaseOffering where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PurchaseOffering where
+  toJSON PurchaseOffering' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("start" Data..= start),
+            Prelude.Just
+              ("reservationName" Data..= reservationName)
+          ]
+      )
+
+instance Data.ToPath PurchaseOffering where
+  toPath PurchaseOffering' {..} =
+    Prelude.mconcat
+      ["/v1/offerings/", Data.toBS offeringArn]
+
+instance Data.ToQuery PurchaseOffering where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPurchaseOfferingResponse' smart constructor.
+data PurchaseOfferingResponse = PurchaseOfferingResponse'
+  { reservation :: Prelude.Maybe Reservation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseOfferingResponse' 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:
+--
+-- 'reservation', 'purchaseOfferingResponse_reservation' - Undocumented member.
+--
+-- 'httpStatus', 'purchaseOfferingResponse_httpStatus' - The response's http status code.
+newPurchaseOfferingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PurchaseOfferingResponse
+newPurchaseOfferingResponse pHttpStatus_ =
+  PurchaseOfferingResponse'
+    { reservation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+purchaseOfferingResponse_reservation :: Lens.Lens' PurchaseOfferingResponse (Prelude.Maybe Reservation)
+purchaseOfferingResponse_reservation = Lens.lens (\PurchaseOfferingResponse' {reservation} -> reservation) (\s@PurchaseOfferingResponse' {} a -> s {reservation = a} :: PurchaseOfferingResponse)
+
+-- | The response's http status code.
+purchaseOfferingResponse_httpStatus :: Lens.Lens' PurchaseOfferingResponse Prelude.Int
+purchaseOfferingResponse_httpStatus = Lens.lens (\PurchaseOfferingResponse' {httpStatus} -> httpStatus) (\s@PurchaseOfferingResponse' {} a -> s {httpStatus = a} :: PurchaseOfferingResponse)
+
+instance Prelude.NFData PurchaseOfferingResponse where
+  rnf PurchaseOfferingResponse' {..} =
+    Prelude.rnf reservation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/RemoveFlowMediaStream.hs b/gen/Amazonka/MediaConnect/RemoveFlowMediaStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/RemoveFlowMediaStream.hs
@@ -0,0 +1,194 @@
+{-# 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.MediaConnect.RemoveFlowMediaStream
+-- 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 a media stream from a flow. This action is only available if the
+-- media stream is not associated with a source or output.
+module Amazonka.MediaConnect.RemoveFlowMediaStream
+  ( -- * Creating a Request
+    RemoveFlowMediaStream (..),
+    newRemoveFlowMediaStream,
+
+    -- * Request Lenses
+    removeFlowMediaStream_flowArn,
+    removeFlowMediaStream_mediaStreamName,
+
+    -- * Destructuring the Response
+    RemoveFlowMediaStreamResponse (..),
+    newRemoveFlowMediaStreamResponse,
+
+    -- * Response Lenses
+    removeFlowMediaStreamResponse_flowArn,
+    removeFlowMediaStreamResponse_mediaStreamName,
+    removeFlowMediaStreamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveFlowMediaStream' smart constructor.
+data RemoveFlowMediaStream = RemoveFlowMediaStream'
+  { -- | The Amazon Resource Name (ARN) of the flow.
+    flowArn :: Prelude.Text,
+    -- | The name of the media stream that you want to remove.
+    mediaStreamName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveFlowMediaStream' 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:
+--
+-- 'flowArn', 'removeFlowMediaStream_flowArn' - The Amazon Resource Name (ARN) of the flow.
+--
+-- 'mediaStreamName', 'removeFlowMediaStream_mediaStreamName' - The name of the media stream that you want to remove.
+newRemoveFlowMediaStream ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  RemoveFlowMediaStream
+newRemoveFlowMediaStream pFlowArn_ pMediaStreamName_ =
+  RemoveFlowMediaStream'
+    { flowArn = pFlowArn_,
+      mediaStreamName = pMediaStreamName_
+    }
+
+-- | The Amazon Resource Name (ARN) of the flow.
+removeFlowMediaStream_flowArn :: Lens.Lens' RemoveFlowMediaStream Prelude.Text
+removeFlowMediaStream_flowArn = Lens.lens (\RemoveFlowMediaStream' {flowArn} -> flowArn) (\s@RemoveFlowMediaStream' {} a -> s {flowArn = a} :: RemoveFlowMediaStream)
+
+-- | The name of the media stream that you want to remove.
+removeFlowMediaStream_mediaStreamName :: Lens.Lens' RemoveFlowMediaStream Prelude.Text
+removeFlowMediaStream_mediaStreamName = Lens.lens (\RemoveFlowMediaStream' {mediaStreamName} -> mediaStreamName) (\s@RemoveFlowMediaStream' {} a -> s {mediaStreamName = a} :: RemoveFlowMediaStream)
+
+instance Core.AWSRequest RemoveFlowMediaStream where
+  type
+    AWSResponse RemoveFlowMediaStream =
+      RemoveFlowMediaStreamResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RemoveFlowMediaStreamResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "mediaStreamName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveFlowMediaStream where
+  hashWithSalt _salt RemoveFlowMediaStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` mediaStreamName
+
+instance Prelude.NFData RemoveFlowMediaStream where
+  rnf RemoveFlowMediaStream' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf mediaStreamName
+
+instance Data.ToHeaders RemoveFlowMediaStream where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RemoveFlowMediaStream where
+  toPath RemoveFlowMediaStream' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/mediaStreams/",
+        Data.toBS mediaStreamName
+      ]
+
+instance Data.ToQuery RemoveFlowMediaStream where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveFlowMediaStreamResponse' smart constructor.
+data RemoveFlowMediaStreamResponse = RemoveFlowMediaStreamResponse'
+  { -- | The Amazon Resource Name (ARN) of the flow.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the media stream that was removed.
+    mediaStreamName :: 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 'RemoveFlowMediaStreamResponse' 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:
+--
+-- 'flowArn', 'removeFlowMediaStreamResponse_flowArn' - The Amazon Resource Name (ARN) of the flow.
+--
+-- 'mediaStreamName', 'removeFlowMediaStreamResponse_mediaStreamName' - The name of the media stream that was removed.
+--
+-- 'httpStatus', 'removeFlowMediaStreamResponse_httpStatus' - The response's http status code.
+newRemoveFlowMediaStreamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveFlowMediaStreamResponse
+newRemoveFlowMediaStreamResponse pHttpStatus_ =
+  RemoveFlowMediaStreamResponse'
+    { flowArn =
+        Prelude.Nothing,
+      mediaStreamName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the flow.
+removeFlowMediaStreamResponse_flowArn :: Lens.Lens' RemoveFlowMediaStreamResponse (Prelude.Maybe Prelude.Text)
+removeFlowMediaStreamResponse_flowArn = Lens.lens (\RemoveFlowMediaStreamResponse' {flowArn} -> flowArn) (\s@RemoveFlowMediaStreamResponse' {} a -> s {flowArn = a} :: RemoveFlowMediaStreamResponse)
+
+-- | The name of the media stream that was removed.
+removeFlowMediaStreamResponse_mediaStreamName :: Lens.Lens' RemoveFlowMediaStreamResponse (Prelude.Maybe Prelude.Text)
+removeFlowMediaStreamResponse_mediaStreamName = Lens.lens (\RemoveFlowMediaStreamResponse' {mediaStreamName} -> mediaStreamName) (\s@RemoveFlowMediaStreamResponse' {} a -> s {mediaStreamName = a} :: RemoveFlowMediaStreamResponse)
+
+-- | The response's http status code.
+removeFlowMediaStreamResponse_httpStatus :: Lens.Lens' RemoveFlowMediaStreamResponse Prelude.Int
+removeFlowMediaStreamResponse_httpStatus = Lens.lens (\RemoveFlowMediaStreamResponse' {httpStatus} -> httpStatus) (\s@RemoveFlowMediaStreamResponse' {} a -> s {httpStatus = a} :: RemoveFlowMediaStreamResponse)
+
+instance Prelude.NFData RemoveFlowMediaStreamResponse where
+  rnf RemoveFlowMediaStreamResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf mediaStreamName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/RemoveFlowOutput.hs b/gen/Amazonka/MediaConnect/RemoveFlowOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/RemoveFlowOutput.hs
@@ -0,0 +1,197 @@
+{-# 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.MediaConnect.RemoveFlowOutput
+-- 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 an output from an existing flow. This request can be made only
+-- on an output that does not have an entitlement associated with it. If
+-- the output has an entitlement, you must revoke the entitlement instead.
+-- When an entitlement is revoked from a flow, the service automatically
+-- removes the associated output.
+module Amazonka.MediaConnect.RemoveFlowOutput
+  ( -- * Creating a Request
+    RemoveFlowOutput (..),
+    newRemoveFlowOutput,
+
+    -- * Request Lenses
+    removeFlowOutput_flowArn,
+    removeFlowOutput_outputArn,
+
+    -- * Destructuring the Response
+    RemoveFlowOutputResponse (..),
+    newRemoveFlowOutputResponse,
+
+    -- * Response Lenses
+    removeFlowOutputResponse_flowArn,
+    removeFlowOutputResponse_outputArn,
+    removeFlowOutputResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveFlowOutput' smart constructor.
+data RemoveFlowOutput = RemoveFlowOutput'
+  { -- | The flow that you want to remove an output from.
+    flowArn :: Prelude.Text,
+    -- | The ARN of the output that you want to remove.
+    outputArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveFlowOutput' 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:
+--
+-- 'flowArn', 'removeFlowOutput_flowArn' - The flow that you want to remove an output from.
+--
+-- 'outputArn', 'removeFlowOutput_outputArn' - The ARN of the output that you want to remove.
+newRemoveFlowOutput ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'outputArn'
+  Prelude.Text ->
+  RemoveFlowOutput
+newRemoveFlowOutput pFlowArn_ pOutputArn_ =
+  RemoveFlowOutput'
+    { flowArn = pFlowArn_,
+      outputArn = pOutputArn_
+    }
+
+-- | The flow that you want to remove an output from.
+removeFlowOutput_flowArn :: Lens.Lens' RemoveFlowOutput Prelude.Text
+removeFlowOutput_flowArn = Lens.lens (\RemoveFlowOutput' {flowArn} -> flowArn) (\s@RemoveFlowOutput' {} a -> s {flowArn = a} :: RemoveFlowOutput)
+
+-- | The ARN of the output that you want to remove.
+removeFlowOutput_outputArn :: Lens.Lens' RemoveFlowOutput Prelude.Text
+removeFlowOutput_outputArn = Lens.lens (\RemoveFlowOutput' {outputArn} -> outputArn) (\s@RemoveFlowOutput' {} a -> s {outputArn = a} :: RemoveFlowOutput)
+
+instance Core.AWSRequest RemoveFlowOutput where
+  type
+    AWSResponse RemoveFlowOutput =
+      RemoveFlowOutputResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RemoveFlowOutputResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "outputArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveFlowOutput where
+  hashWithSalt _salt RemoveFlowOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` outputArn
+
+instance Prelude.NFData RemoveFlowOutput where
+  rnf RemoveFlowOutput' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf outputArn
+
+instance Data.ToHeaders RemoveFlowOutput where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RemoveFlowOutput where
+  toPath RemoveFlowOutput' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/outputs/",
+        Data.toBS outputArn
+      ]
+
+instance Data.ToQuery RemoveFlowOutput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveFlowOutputResponse' smart constructor.
+data RemoveFlowOutputResponse = RemoveFlowOutputResponse'
+  { -- | The ARN of the flow that is associated with the output you removed.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the output that was removed.
+    outputArn :: 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 'RemoveFlowOutputResponse' 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:
+--
+-- 'flowArn', 'removeFlowOutputResponse_flowArn' - The ARN of the flow that is associated with the output you removed.
+--
+-- 'outputArn', 'removeFlowOutputResponse_outputArn' - The ARN of the output that was removed.
+--
+-- 'httpStatus', 'removeFlowOutputResponse_httpStatus' - The response's http status code.
+newRemoveFlowOutputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveFlowOutputResponse
+newRemoveFlowOutputResponse pHttpStatus_ =
+  RemoveFlowOutputResponse'
+    { flowArn =
+        Prelude.Nothing,
+      outputArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that is associated with the output you removed.
+removeFlowOutputResponse_flowArn :: Lens.Lens' RemoveFlowOutputResponse (Prelude.Maybe Prelude.Text)
+removeFlowOutputResponse_flowArn = Lens.lens (\RemoveFlowOutputResponse' {flowArn} -> flowArn) (\s@RemoveFlowOutputResponse' {} a -> s {flowArn = a} :: RemoveFlowOutputResponse)
+
+-- | The ARN of the output that was removed.
+removeFlowOutputResponse_outputArn :: Lens.Lens' RemoveFlowOutputResponse (Prelude.Maybe Prelude.Text)
+removeFlowOutputResponse_outputArn = Lens.lens (\RemoveFlowOutputResponse' {outputArn} -> outputArn) (\s@RemoveFlowOutputResponse' {} a -> s {outputArn = a} :: RemoveFlowOutputResponse)
+
+-- | The response's http status code.
+removeFlowOutputResponse_httpStatus :: Lens.Lens' RemoveFlowOutputResponse Prelude.Int
+removeFlowOutputResponse_httpStatus = Lens.lens (\RemoveFlowOutputResponse' {httpStatus} -> httpStatus) (\s@RemoveFlowOutputResponse' {} a -> s {httpStatus = a} :: RemoveFlowOutputResponse)
+
+instance Prelude.NFData RemoveFlowOutputResponse where
+  rnf RemoveFlowOutputResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf outputArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/RemoveFlowSource.hs b/gen/Amazonka/MediaConnect/RemoveFlowSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/RemoveFlowSource.hs
@@ -0,0 +1,194 @@
+{-# 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.MediaConnect.RemoveFlowSource
+-- 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 a source from an existing flow. This request can be made only if
+-- there is more than one source on the flow.
+module Amazonka.MediaConnect.RemoveFlowSource
+  ( -- * Creating a Request
+    RemoveFlowSource (..),
+    newRemoveFlowSource,
+
+    -- * Request Lenses
+    removeFlowSource_flowArn,
+    removeFlowSource_sourceArn,
+
+    -- * Destructuring the Response
+    RemoveFlowSourceResponse (..),
+    newRemoveFlowSourceResponse,
+
+    -- * Response Lenses
+    removeFlowSourceResponse_flowArn,
+    removeFlowSourceResponse_sourceArn,
+    removeFlowSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveFlowSource' smart constructor.
+data RemoveFlowSource = RemoveFlowSource'
+  { -- | The flow that you want to remove a source from.
+    flowArn :: Prelude.Text,
+    -- | The ARN of the source that you want to remove.
+    sourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveFlowSource' 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:
+--
+-- 'flowArn', 'removeFlowSource_flowArn' - The flow that you want to remove a source from.
+--
+-- 'sourceArn', 'removeFlowSource_sourceArn' - The ARN of the source that you want to remove.
+newRemoveFlowSource ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'sourceArn'
+  Prelude.Text ->
+  RemoveFlowSource
+newRemoveFlowSource pFlowArn_ pSourceArn_ =
+  RemoveFlowSource'
+    { flowArn = pFlowArn_,
+      sourceArn = pSourceArn_
+    }
+
+-- | The flow that you want to remove a source from.
+removeFlowSource_flowArn :: Lens.Lens' RemoveFlowSource Prelude.Text
+removeFlowSource_flowArn = Lens.lens (\RemoveFlowSource' {flowArn} -> flowArn) (\s@RemoveFlowSource' {} a -> s {flowArn = a} :: RemoveFlowSource)
+
+-- | The ARN of the source that you want to remove.
+removeFlowSource_sourceArn :: Lens.Lens' RemoveFlowSource Prelude.Text
+removeFlowSource_sourceArn = Lens.lens (\RemoveFlowSource' {sourceArn} -> sourceArn) (\s@RemoveFlowSource' {} a -> s {sourceArn = a} :: RemoveFlowSource)
+
+instance Core.AWSRequest RemoveFlowSource where
+  type
+    AWSResponse RemoveFlowSource =
+      RemoveFlowSourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RemoveFlowSourceResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "sourceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveFlowSource where
+  hashWithSalt _salt RemoveFlowSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` sourceArn
+
+instance Prelude.NFData RemoveFlowSource where
+  rnf RemoveFlowSource' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf sourceArn
+
+instance Data.ToHeaders RemoveFlowSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RemoveFlowSource where
+  toPath RemoveFlowSource' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/source/",
+        Data.toBS sourceArn
+      ]
+
+instance Data.ToQuery RemoveFlowSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveFlowSourceResponse' smart constructor.
+data RemoveFlowSourceResponse = RemoveFlowSourceResponse'
+  { -- | The ARN of the flow that is associated with the source you removed.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the source that was removed.
+    sourceArn :: 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 'RemoveFlowSourceResponse' 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:
+--
+-- 'flowArn', 'removeFlowSourceResponse_flowArn' - The ARN of the flow that is associated with the source you removed.
+--
+-- 'sourceArn', 'removeFlowSourceResponse_sourceArn' - The ARN of the source that was removed.
+--
+-- 'httpStatus', 'removeFlowSourceResponse_httpStatus' - The response's http status code.
+newRemoveFlowSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveFlowSourceResponse
+newRemoveFlowSourceResponse pHttpStatus_ =
+  RemoveFlowSourceResponse'
+    { flowArn =
+        Prelude.Nothing,
+      sourceArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that is associated with the source you removed.
+removeFlowSourceResponse_flowArn :: Lens.Lens' RemoveFlowSourceResponse (Prelude.Maybe Prelude.Text)
+removeFlowSourceResponse_flowArn = Lens.lens (\RemoveFlowSourceResponse' {flowArn} -> flowArn) (\s@RemoveFlowSourceResponse' {} a -> s {flowArn = a} :: RemoveFlowSourceResponse)
+
+-- | The ARN of the source that was removed.
+removeFlowSourceResponse_sourceArn :: Lens.Lens' RemoveFlowSourceResponse (Prelude.Maybe Prelude.Text)
+removeFlowSourceResponse_sourceArn = Lens.lens (\RemoveFlowSourceResponse' {sourceArn} -> sourceArn) (\s@RemoveFlowSourceResponse' {} a -> s {sourceArn = a} :: RemoveFlowSourceResponse)
+
+-- | The response's http status code.
+removeFlowSourceResponse_httpStatus :: Lens.Lens' RemoveFlowSourceResponse Prelude.Int
+removeFlowSourceResponse_httpStatus = Lens.lens (\RemoveFlowSourceResponse' {httpStatus} -> httpStatus) (\s@RemoveFlowSourceResponse' {} a -> s {httpStatus = a} :: RemoveFlowSourceResponse)
+
+instance Prelude.NFData RemoveFlowSourceResponse where
+  rnf RemoveFlowSourceResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf sourceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/RemoveFlowVpcInterface.hs b/gen/Amazonka/MediaConnect/RemoveFlowVpcInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/RemoveFlowVpcInterface.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.MediaConnect.RemoveFlowVpcInterface
+-- 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 a VPC Interface from an existing flow. This request can be made
+-- only on a VPC interface that does not have a Source or Output associated
+-- with it. If the VPC interface is referenced by a Source or Output, you
+-- must first delete or update the Source or Output to no longer reference
+-- the VPC interface.
+module Amazonka.MediaConnect.RemoveFlowVpcInterface
+  ( -- * Creating a Request
+    RemoveFlowVpcInterface (..),
+    newRemoveFlowVpcInterface,
+
+    -- * Request Lenses
+    removeFlowVpcInterface_flowArn,
+    removeFlowVpcInterface_vpcInterfaceName,
+
+    -- * Destructuring the Response
+    RemoveFlowVpcInterfaceResponse (..),
+    newRemoveFlowVpcInterfaceResponse,
+
+    -- * Response Lenses
+    removeFlowVpcInterfaceResponse_flowArn,
+    removeFlowVpcInterfaceResponse_nonDeletedNetworkInterfaceIds,
+    removeFlowVpcInterfaceResponse_vpcInterfaceName,
+    removeFlowVpcInterfaceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRemoveFlowVpcInterface' smart constructor.
+data RemoveFlowVpcInterface = RemoveFlowVpcInterface'
+  { -- | The flow that you want to remove a VPC interface from.
+    flowArn :: Prelude.Text,
+    -- | The name of the VPC interface that you want to remove.
+    vpcInterfaceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveFlowVpcInterface' 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:
+--
+-- 'flowArn', 'removeFlowVpcInterface_flowArn' - The flow that you want to remove a VPC interface from.
+--
+-- 'vpcInterfaceName', 'removeFlowVpcInterface_vpcInterfaceName' - The name of the VPC interface that you want to remove.
+newRemoveFlowVpcInterface ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'vpcInterfaceName'
+  Prelude.Text ->
+  RemoveFlowVpcInterface
+newRemoveFlowVpcInterface
+  pFlowArn_
+  pVpcInterfaceName_ =
+    RemoveFlowVpcInterface'
+      { flowArn = pFlowArn_,
+        vpcInterfaceName = pVpcInterfaceName_
+      }
+
+-- | The flow that you want to remove a VPC interface from.
+removeFlowVpcInterface_flowArn :: Lens.Lens' RemoveFlowVpcInterface Prelude.Text
+removeFlowVpcInterface_flowArn = Lens.lens (\RemoveFlowVpcInterface' {flowArn} -> flowArn) (\s@RemoveFlowVpcInterface' {} a -> s {flowArn = a} :: RemoveFlowVpcInterface)
+
+-- | The name of the VPC interface that you want to remove.
+removeFlowVpcInterface_vpcInterfaceName :: Lens.Lens' RemoveFlowVpcInterface Prelude.Text
+removeFlowVpcInterface_vpcInterfaceName = Lens.lens (\RemoveFlowVpcInterface' {vpcInterfaceName} -> vpcInterfaceName) (\s@RemoveFlowVpcInterface' {} a -> s {vpcInterfaceName = a} :: RemoveFlowVpcInterface)
+
+instance Core.AWSRequest RemoveFlowVpcInterface where
+  type
+    AWSResponse RemoveFlowVpcInterface =
+      RemoveFlowVpcInterfaceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RemoveFlowVpcInterfaceResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> ( x
+                            Data..?> "nonDeletedNetworkInterfaceIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "vpcInterfaceName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveFlowVpcInterface where
+  hashWithSalt _salt RemoveFlowVpcInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` vpcInterfaceName
+
+instance Prelude.NFData RemoveFlowVpcInterface where
+  rnf RemoveFlowVpcInterface' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf vpcInterfaceName
+
+instance Data.ToHeaders RemoveFlowVpcInterface where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RemoveFlowVpcInterface where
+  toPath RemoveFlowVpcInterface' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/vpcInterfaces/",
+        Data.toBS vpcInterfaceName
+      ]
+
+instance Data.ToQuery RemoveFlowVpcInterface where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveFlowVpcInterfaceResponse' smart constructor.
+data RemoveFlowVpcInterfaceResponse = RemoveFlowVpcInterfaceResponse'
+  { -- | The ARN of the flow that is associated with the VPC interface you
+    -- removed.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | IDs of network interfaces associated with the removed VPC interface that
+    -- Media Connect was unable to remove.
+    nonDeletedNetworkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the VPC interface that was removed.
+    vpcInterfaceName :: 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 'RemoveFlowVpcInterfaceResponse' 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:
+--
+-- 'flowArn', 'removeFlowVpcInterfaceResponse_flowArn' - The ARN of the flow that is associated with the VPC interface you
+-- removed.
+--
+-- 'nonDeletedNetworkInterfaceIds', 'removeFlowVpcInterfaceResponse_nonDeletedNetworkInterfaceIds' - IDs of network interfaces associated with the removed VPC interface that
+-- Media Connect was unable to remove.
+--
+-- 'vpcInterfaceName', 'removeFlowVpcInterfaceResponse_vpcInterfaceName' - The name of the VPC interface that was removed.
+--
+-- 'httpStatus', 'removeFlowVpcInterfaceResponse_httpStatus' - The response's http status code.
+newRemoveFlowVpcInterfaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveFlowVpcInterfaceResponse
+newRemoveFlowVpcInterfaceResponse pHttpStatus_ =
+  RemoveFlowVpcInterfaceResponse'
+    { flowArn =
+        Prelude.Nothing,
+      nonDeletedNetworkInterfaceIds =
+        Prelude.Nothing,
+      vpcInterfaceName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that is associated with the VPC interface you
+-- removed.
+removeFlowVpcInterfaceResponse_flowArn :: Lens.Lens' RemoveFlowVpcInterfaceResponse (Prelude.Maybe Prelude.Text)
+removeFlowVpcInterfaceResponse_flowArn = Lens.lens (\RemoveFlowVpcInterfaceResponse' {flowArn} -> flowArn) (\s@RemoveFlowVpcInterfaceResponse' {} a -> s {flowArn = a} :: RemoveFlowVpcInterfaceResponse)
+
+-- | IDs of network interfaces associated with the removed VPC interface that
+-- Media Connect was unable to remove.
+removeFlowVpcInterfaceResponse_nonDeletedNetworkInterfaceIds :: Lens.Lens' RemoveFlowVpcInterfaceResponse (Prelude.Maybe [Prelude.Text])
+removeFlowVpcInterfaceResponse_nonDeletedNetworkInterfaceIds = Lens.lens (\RemoveFlowVpcInterfaceResponse' {nonDeletedNetworkInterfaceIds} -> nonDeletedNetworkInterfaceIds) (\s@RemoveFlowVpcInterfaceResponse' {} a -> s {nonDeletedNetworkInterfaceIds = a} :: RemoveFlowVpcInterfaceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the VPC interface that was removed.
+removeFlowVpcInterfaceResponse_vpcInterfaceName :: Lens.Lens' RemoveFlowVpcInterfaceResponse (Prelude.Maybe Prelude.Text)
+removeFlowVpcInterfaceResponse_vpcInterfaceName = Lens.lens (\RemoveFlowVpcInterfaceResponse' {vpcInterfaceName} -> vpcInterfaceName) (\s@RemoveFlowVpcInterfaceResponse' {} a -> s {vpcInterfaceName = a} :: RemoveFlowVpcInterfaceResponse)
+
+-- | The response's http status code.
+removeFlowVpcInterfaceResponse_httpStatus :: Lens.Lens' RemoveFlowVpcInterfaceResponse Prelude.Int
+removeFlowVpcInterfaceResponse_httpStatus = Lens.lens (\RemoveFlowVpcInterfaceResponse' {httpStatus} -> httpStatus) (\s@RemoveFlowVpcInterfaceResponse' {} a -> s {httpStatus = a} :: RemoveFlowVpcInterfaceResponse)
+
+instance
+  Prelude.NFData
+    RemoveFlowVpcInterfaceResponse
+  where
+  rnf RemoveFlowVpcInterfaceResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf nonDeletedNetworkInterfaceIds
+      `Prelude.seq` Prelude.rnf vpcInterfaceName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/RevokeFlowEntitlement.hs b/gen/Amazonka/MediaConnect/RevokeFlowEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/RevokeFlowEntitlement.hs
@@ -0,0 +1,195 @@
+{-# 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.MediaConnect.RevokeFlowEntitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Revokes an entitlement from a flow. Once an entitlement is revoked, the
+-- content becomes unavailable to the subscriber and the associated output
+-- is removed.
+module Amazonka.MediaConnect.RevokeFlowEntitlement
+  ( -- * Creating a Request
+    RevokeFlowEntitlement (..),
+    newRevokeFlowEntitlement,
+
+    -- * Request Lenses
+    revokeFlowEntitlement_flowArn,
+    revokeFlowEntitlement_entitlementArn,
+
+    -- * Destructuring the Response
+    RevokeFlowEntitlementResponse (..),
+    newRevokeFlowEntitlementResponse,
+
+    -- * Response Lenses
+    revokeFlowEntitlementResponse_entitlementArn,
+    revokeFlowEntitlementResponse_flowArn,
+    revokeFlowEntitlementResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRevokeFlowEntitlement' smart constructor.
+data RevokeFlowEntitlement = RevokeFlowEntitlement'
+  { -- | The flow that you want to revoke an entitlement from.
+    flowArn :: Prelude.Text,
+    -- | The ARN of the entitlement that you want to revoke.
+    entitlementArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeFlowEntitlement' 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:
+--
+-- 'flowArn', 'revokeFlowEntitlement_flowArn' - The flow that you want to revoke an entitlement from.
+--
+-- 'entitlementArn', 'revokeFlowEntitlement_entitlementArn' - The ARN of the entitlement that you want to revoke.
+newRevokeFlowEntitlement ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'entitlementArn'
+  Prelude.Text ->
+  RevokeFlowEntitlement
+newRevokeFlowEntitlement pFlowArn_ pEntitlementArn_ =
+  RevokeFlowEntitlement'
+    { flowArn = pFlowArn_,
+      entitlementArn = pEntitlementArn_
+    }
+
+-- | The flow that you want to revoke an entitlement from.
+revokeFlowEntitlement_flowArn :: Lens.Lens' RevokeFlowEntitlement Prelude.Text
+revokeFlowEntitlement_flowArn = Lens.lens (\RevokeFlowEntitlement' {flowArn} -> flowArn) (\s@RevokeFlowEntitlement' {} a -> s {flowArn = a} :: RevokeFlowEntitlement)
+
+-- | The ARN of the entitlement that you want to revoke.
+revokeFlowEntitlement_entitlementArn :: Lens.Lens' RevokeFlowEntitlement Prelude.Text
+revokeFlowEntitlement_entitlementArn = Lens.lens (\RevokeFlowEntitlement' {entitlementArn} -> entitlementArn) (\s@RevokeFlowEntitlement' {} a -> s {entitlementArn = a} :: RevokeFlowEntitlement)
+
+instance Core.AWSRequest RevokeFlowEntitlement where
+  type
+    AWSResponse RevokeFlowEntitlement =
+      RevokeFlowEntitlementResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RevokeFlowEntitlementResponse'
+            Prelude.<$> (x Data..?> "entitlementArn")
+            Prelude.<*> (x Data..?> "flowArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RevokeFlowEntitlement where
+  hashWithSalt _salt RevokeFlowEntitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` entitlementArn
+
+instance Prelude.NFData RevokeFlowEntitlement where
+  rnf RevokeFlowEntitlement' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf entitlementArn
+
+instance Data.ToHeaders RevokeFlowEntitlement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RevokeFlowEntitlement where
+  toPath RevokeFlowEntitlement' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/entitlements/",
+        Data.toBS entitlementArn
+      ]
+
+instance Data.ToQuery RevokeFlowEntitlement where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRevokeFlowEntitlementResponse' smart constructor.
+data RevokeFlowEntitlementResponse = RevokeFlowEntitlementResponse'
+  { -- | The ARN of the entitlement that was revoked.
+    entitlementArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the flow that the entitlement was revoked from.
+    flowArn :: 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 'RevokeFlowEntitlementResponse' 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:
+--
+-- 'entitlementArn', 'revokeFlowEntitlementResponse_entitlementArn' - The ARN of the entitlement that was revoked.
+--
+-- 'flowArn', 'revokeFlowEntitlementResponse_flowArn' - The ARN of the flow that the entitlement was revoked from.
+--
+-- 'httpStatus', 'revokeFlowEntitlementResponse_httpStatus' - The response's http status code.
+newRevokeFlowEntitlementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RevokeFlowEntitlementResponse
+newRevokeFlowEntitlementResponse pHttpStatus_ =
+  RevokeFlowEntitlementResponse'
+    { entitlementArn =
+        Prelude.Nothing,
+      flowArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the entitlement that was revoked.
+revokeFlowEntitlementResponse_entitlementArn :: Lens.Lens' RevokeFlowEntitlementResponse (Prelude.Maybe Prelude.Text)
+revokeFlowEntitlementResponse_entitlementArn = Lens.lens (\RevokeFlowEntitlementResponse' {entitlementArn} -> entitlementArn) (\s@RevokeFlowEntitlementResponse' {} a -> s {entitlementArn = a} :: RevokeFlowEntitlementResponse)
+
+-- | The ARN of the flow that the entitlement was revoked from.
+revokeFlowEntitlementResponse_flowArn :: Lens.Lens' RevokeFlowEntitlementResponse (Prelude.Maybe Prelude.Text)
+revokeFlowEntitlementResponse_flowArn = Lens.lens (\RevokeFlowEntitlementResponse' {flowArn} -> flowArn) (\s@RevokeFlowEntitlementResponse' {} a -> s {flowArn = a} :: RevokeFlowEntitlementResponse)
+
+-- | The response's http status code.
+revokeFlowEntitlementResponse_httpStatus :: Lens.Lens' RevokeFlowEntitlementResponse Prelude.Int
+revokeFlowEntitlementResponse_httpStatus = Lens.lens (\RevokeFlowEntitlementResponse' {httpStatus} -> httpStatus) (\s@RevokeFlowEntitlementResponse' {} a -> s {httpStatus = a} :: RevokeFlowEntitlementResponse)
+
+instance Prelude.NFData RevokeFlowEntitlementResponse where
+  rnf RevokeFlowEntitlementResponse' {..} =
+    Prelude.rnf entitlementArn
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/StartFlow.hs b/gen/Amazonka/MediaConnect/StartFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/StartFlow.hs
@@ -0,0 +1,171 @@
+{-# 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.MediaConnect.StartFlow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a flow.
+module Amazonka.MediaConnect.StartFlow
+  ( -- * Creating a Request
+    StartFlow (..),
+    newStartFlow,
+
+    -- * Request Lenses
+    startFlow_flowArn,
+
+    -- * Destructuring the Response
+    StartFlowResponse (..),
+    newStartFlowResponse,
+
+    -- * Response Lenses
+    startFlowResponse_flowArn,
+    startFlowResponse_status,
+    startFlowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartFlow' smart constructor.
+data StartFlow = StartFlow'
+  { -- | The ARN of the flow that you want to start.
+    flowArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFlow' 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:
+--
+-- 'flowArn', 'startFlow_flowArn' - The ARN of the flow that you want to start.
+newStartFlow ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  StartFlow
+newStartFlow pFlowArn_ =
+  StartFlow' {flowArn = pFlowArn_}
+
+-- | The ARN of the flow that you want to start.
+startFlow_flowArn :: Lens.Lens' StartFlow Prelude.Text
+startFlow_flowArn = Lens.lens (\StartFlow' {flowArn} -> flowArn) (\s@StartFlow' {} a -> s {flowArn = a} :: StartFlow)
+
+instance Core.AWSRequest StartFlow where
+  type AWSResponse StartFlow = StartFlowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartFlowResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartFlow where
+  hashWithSalt _salt StartFlow' {..} =
+    _salt `Prelude.hashWithSalt` flowArn
+
+instance Prelude.NFData StartFlow where
+  rnf StartFlow' {..} = Prelude.rnf flowArn
+
+instance Data.ToHeaders StartFlow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartFlow where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StartFlow where
+  toPath StartFlow' {..} =
+    Prelude.mconcat
+      ["/v1/flows/start/", Data.toBS flowArn]
+
+instance Data.ToQuery StartFlow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartFlowResponse' smart constructor.
+data StartFlowResponse = StartFlowResponse'
+  { -- | The ARN of the flow that you started.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the flow when the StartFlow process begins.
+    status :: Prelude.Maybe Status,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFlowResponse' 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:
+--
+-- 'flowArn', 'startFlowResponse_flowArn' - The ARN of the flow that you started.
+--
+-- 'status', 'startFlowResponse_status' - The status of the flow when the StartFlow process begins.
+--
+-- 'httpStatus', 'startFlowResponse_httpStatus' - The response's http status code.
+newStartFlowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartFlowResponse
+newStartFlowResponse pHttpStatus_ =
+  StartFlowResponse'
+    { flowArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that you started.
+startFlowResponse_flowArn :: Lens.Lens' StartFlowResponse (Prelude.Maybe Prelude.Text)
+startFlowResponse_flowArn = Lens.lens (\StartFlowResponse' {flowArn} -> flowArn) (\s@StartFlowResponse' {} a -> s {flowArn = a} :: StartFlowResponse)
+
+-- | The status of the flow when the StartFlow process begins.
+startFlowResponse_status :: Lens.Lens' StartFlowResponse (Prelude.Maybe Status)
+startFlowResponse_status = Lens.lens (\StartFlowResponse' {status} -> status) (\s@StartFlowResponse' {} a -> s {status = a} :: StartFlowResponse)
+
+-- | The response's http status code.
+startFlowResponse_httpStatus :: Lens.Lens' StartFlowResponse Prelude.Int
+startFlowResponse_httpStatus = Lens.lens (\StartFlowResponse' {httpStatus} -> httpStatus) (\s@StartFlowResponse' {} a -> s {httpStatus = a} :: StartFlowResponse)
+
+instance Prelude.NFData StartFlowResponse where
+  rnf StartFlowResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/StopFlow.hs b/gen/Amazonka/MediaConnect/StopFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/StopFlow.hs
@@ -0,0 +1,171 @@
+{-# 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.MediaConnect.StopFlow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a flow.
+module Amazonka.MediaConnect.StopFlow
+  ( -- * Creating a Request
+    StopFlow (..),
+    newStopFlow,
+
+    -- * Request Lenses
+    stopFlow_flowArn,
+
+    -- * Destructuring the Response
+    StopFlowResponse (..),
+    newStopFlowResponse,
+
+    -- * Response Lenses
+    stopFlowResponse_flowArn,
+    stopFlowResponse_status,
+    stopFlowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopFlow' smart constructor.
+data StopFlow = StopFlow'
+  { -- | The ARN of the flow that you want to stop.
+    flowArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopFlow' 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:
+--
+-- 'flowArn', 'stopFlow_flowArn' - The ARN of the flow that you want to stop.
+newStopFlow ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  StopFlow
+newStopFlow pFlowArn_ =
+  StopFlow' {flowArn = pFlowArn_}
+
+-- | The ARN of the flow that you want to stop.
+stopFlow_flowArn :: Lens.Lens' StopFlow Prelude.Text
+stopFlow_flowArn = Lens.lens (\StopFlow' {flowArn} -> flowArn) (\s@StopFlow' {} a -> s {flowArn = a} :: StopFlow)
+
+instance Core.AWSRequest StopFlow where
+  type AWSResponse StopFlow = StopFlowResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopFlowResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopFlow where
+  hashWithSalt _salt StopFlow' {..} =
+    _salt `Prelude.hashWithSalt` flowArn
+
+instance Prelude.NFData StopFlow where
+  rnf StopFlow' {..} = Prelude.rnf flowArn
+
+instance Data.ToHeaders StopFlow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopFlow where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StopFlow where
+  toPath StopFlow' {..} =
+    Prelude.mconcat
+      ["/v1/flows/stop/", Data.toBS flowArn]
+
+instance Data.ToQuery StopFlow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopFlowResponse' smart constructor.
+data StopFlowResponse = StopFlowResponse'
+  { -- | The ARN of the flow that you stopped.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the flow when the StopFlow process begins.
+    status :: Prelude.Maybe Status,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopFlowResponse' 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:
+--
+-- 'flowArn', 'stopFlowResponse_flowArn' - The ARN of the flow that you stopped.
+--
+-- 'status', 'stopFlowResponse_status' - The status of the flow when the StopFlow process begins.
+--
+-- 'httpStatus', 'stopFlowResponse_httpStatus' - The response's http status code.
+newStopFlowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopFlowResponse
+newStopFlowResponse pHttpStatus_ =
+  StopFlowResponse'
+    { flowArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that you stopped.
+stopFlowResponse_flowArn :: Lens.Lens' StopFlowResponse (Prelude.Maybe Prelude.Text)
+stopFlowResponse_flowArn = Lens.lens (\StopFlowResponse' {flowArn} -> flowArn) (\s@StopFlowResponse' {} a -> s {flowArn = a} :: StopFlowResponse)
+
+-- | The status of the flow when the StopFlow process begins.
+stopFlowResponse_status :: Lens.Lens' StopFlowResponse (Prelude.Maybe Status)
+stopFlowResponse_status = Lens.lens (\StopFlowResponse' {status} -> status) (\s@StopFlowResponse' {} a -> s {status = a} :: StopFlowResponse)
+
+-- | The response's http status code.
+stopFlowResponse_httpStatus :: Lens.Lens' StopFlowResponse Prelude.Int
+stopFlowResponse_httpStatus = Lens.lens (\StopFlowResponse' {httpStatus} -> httpStatus) (\s@StopFlowResponse' {} a -> s {httpStatus = a} :: StopFlowResponse)
+
+instance Prelude.NFData StopFlowResponse where
+  rnf StopFlowResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/TagResource.hs b/gen/Amazonka/MediaConnect/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/TagResource.hs
@@ -0,0 +1,158 @@
+{-# 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.MediaConnect.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)
+--
+-- Associates the specified tags to a resource with the specified
+-- resourceArn. If existing tags on a resource are not specified in the
+-- request parameters, they are not changed. When a resource is deleted,
+-- the tags associated with that resource are deleted as well.
+module Amazonka.MediaConnect.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.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The tags to add to the resource. A tag is an array of key-value pairs.
+-- Tag keys can have a maximum character length of 128 characters, and tag
+-- values can have a maximum length of 256 characters.
+--
+-- /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) that identifies the AWS Elemental
+    -- MediaConnect resource to which to add tags.
+    resourceArn :: Prelude.Text,
+    -- | A map from tag keys to values. Tag keys can have a maximum character
+    -- length of 128 characters, and tag values can have a maximum length of
+    -- 256 characters.
+    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) that identifies the AWS Elemental
+-- MediaConnect resource to which to add tags.
+--
+-- 'tags', 'tagResource_tags' - A map from tag keys to values. Tag keys can have a maximum character
+-- length of 128 characters, and tag values can have a maximum length of
+-- 256 characters.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) that identifies the AWS Elemental
+-- MediaConnect resource to which to add tags.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A map from tag keys to values. Tag keys can have a maximum character
+-- length of 128 characters, and tag values can have a maximum length of
+-- 256 characters.
+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/MediaConnect/Types.hs b/gen/Amazonka/MediaConnect/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types.hs
@@ -0,0 +1,742 @@
+{-# 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.MediaConnect.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.MediaConnect.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AddFlowOutputs420Exception,
+    _BadRequestException,
+    _CreateFlow420Exception,
+    _ForbiddenException,
+    _GrantFlowEntitlements420Exception,
+    _InternalServerErrorException,
+    _NotFoundException,
+    _ServiceUnavailableException,
+    _TooManyRequestsException,
+
+    -- * Algorithm
+    Algorithm (..),
+
+    -- * Colorimetry
+    Colorimetry (..),
+
+    -- * DurationUnits
+    DurationUnits (..),
+
+    -- * EncoderProfile
+    EncoderProfile (..),
+
+    -- * EncodingName
+    EncodingName (..),
+
+    -- * EntitlementStatus
+    EntitlementStatus (..),
+
+    -- * FailoverMode
+    FailoverMode (..),
+
+    -- * KeyType
+    KeyType (..),
+
+    -- * MaintenanceDay
+    MaintenanceDay (..),
+
+    -- * MediaStreamType
+    MediaStreamType (..),
+
+    -- * NetworkInterfaceType
+    NetworkInterfaceType (..),
+
+    -- * PriceUnits
+    PriceUnits (..),
+
+    -- * Protocol
+    Protocol (..),
+
+    -- * Range
+    Range (..),
+
+    -- * ReservationState
+    ReservationState (..),
+
+    -- * ResourceType
+    ResourceType (..),
+
+    -- * ScanMode
+    ScanMode (..),
+
+    -- * SourceType
+    SourceType (..),
+
+    -- * State
+    State (..),
+
+    -- * Status
+    Status (..),
+
+    -- * Tcs
+    Tcs (..),
+
+    -- * AddMaintenance
+    AddMaintenance (..),
+    newAddMaintenance,
+    addMaintenance_maintenanceDay,
+    addMaintenance_maintenanceStartHour,
+
+    -- * AddMediaStreamRequest
+    AddMediaStreamRequest (..),
+    newAddMediaStreamRequest,
+    addMediaStreamRequest_attributes,
+    addMediaStreamRequest_clockRate,
+    addMediaStreamRequest_description,
+    addMediaStreamRequest_videoFormat,
+    addMediaStreamRequest_mediaStreamType,
+    addMediaStreamRequest_mediaStreamId,
+    addMediaStreamRequest_mediaStreamName,
+
+    -- * AddOutputRequest
+    AddOutputRequest (..),
+    newAddOutputRequest,
+    addOutputRequest_cidrAllowList,
+    addOutputRequest_description,
+    addOutputRequest_destination,
+    addOutputRequest_encryption,
+    addOutputRequest_maxLatency,
+    addOutputRequest_mediaStreamOutputConfigurations,
+    addOutputRequest_minLatency,
+    addOutputRequest_name,
+    addOutputRequest_port,
+    addOutputRequest_remoteId,
+    addOutputRequest_senderControlPort,
+    addOutputRequest_smoothingLatency,
+    addOutputRequest_streamId,
+    addOutputRequest_vpcInterfaceAttachment,
+    addOutputRequest_protocol,
+
+    -- * DestinationConfiguration
+    DestinationConfiguration (..),
+    newDestinationConfiguration,
+    destinationConfiguration_destinationIp,
+    destinationConfiguration_destinationPort,
+    destinationConfiguration_interface,
+    destinationConfiguration_outboundIp,
+
+    -- * DestinationConfigurationRequest
+    DestinationConfigurationRequest (..),
+    newDestinationConfigurationRequest,
+    destinationConfigurationRequest_destinationIp,
+    destinationConfigurationRequest_destinationPort,
+    destinationConfigurationRequest_interface,
+
+    -- * EncodingParameters
+    EncodingParameters (..),
+    newEncodingParameters,
+    encodingParameters_encoderProfile,
+    encodingParameters_compressionFactor,
+
+    -- * EncodingParametersRequest
+    EncodingParametersRequest (..),
+    newEncodingParametersRequest,
+    encodingParametersRequest_encoderProfile,
+    encodingParametersRequest_compressionFactor,
+
+    -- * Encryption
+    Encryption (..),
+    newEncryption,
+    encryption_algorithm,
+    encryption_constantInitializationVector,
+    encryption_deviceId,
+    encryption_keyType,
+    encryption_region,
+    encryption_resourceId,
+    encryption_secretArn,
+    encryption_url,
+    encryption_roleArn,
+
+    -- * Entitlement
+    Entitlement (..),
+    newEntitlement,
+    entitlement_dataTransferSubscriberFeePercent,
+    entitlement_description,
+    entitlement_encryption,
+    entitlement_entitlementStatus,
+    entitlement_entitlementArn,
+    entitlement_subscribers,
+    entitlement_name,
+
+    -- * FailoverConfig
+    FailoverConfig (..),
+    newFailoverConfig,
+    failoverConfig_failoverMode,
+    failoverConfig_recoveryWindow,
+    failoverConfig_sourcePriority,
+    failoverConfig_state,
+
+    -- * Flow
+    Flow (..),
+    newFlow,
+    flow_description,
+    flow_egressIp,
+    flow_maintenance,
+    flow_mediaStreams,
+    flow_sourceFailoverConfig,
+    flow_sources,
+    flow_vpcInterfaces,
+    flow_status,
+    flow_entitlements,
+    flow_outputs,
+    flow_availabilityZone,
+    flow_flowArn,
+    flow_source,
+    flow_name,
+
+    -- * Fmtp
+    Fmtp (..),
+    newFmtp,
+    fmtp_channelOrder,
+    fmtp_colorimetry,
+    fmtp_exactFramerate,
+    fmtp_par,
+    fmtp_range,
+    fmtp_scanMode,
+    fmtp_tcs,
+
+    -- * FmtpRequest
+    FmtpRequest (..),
+    newFmtpRequest,
+    fmtpRequest_channelOrder,
+    fmtpRequest_colorimetry,
+    fmtpRequest_exactFramerate,
+    fmtpRequest_par,
+    fmtpRequest_range,
+    fmtpRequest_scanMode,
+    fmtpRequest_tcs,
+
+    -- * GrantEntitlementRequest
+    GrantEntitlementRequest (..),
+    newGrantEntitlementRequest,
+    grantEntitlementRequest_dataTransferSubscriberFeePercent,
+    grantEntitlementRequest_description,
+    grantEntitlementRequest_encryption,
+    grantEntitlementRequest_entitlementStatus,
+    grantEntitlementRequest_name,
+    grantEntitlementRequest_subscribers,
+
+    -- * InputConfiguration
+    InputConfiguration (..),
+    newInputConfiguration,
+    inputConfiguration_inputPort,
+    inputConfiguration_inputIp,
+    inputConfiguration_interface,
+
+    -- * InputConfigurationRequest
+    InputConfigurationRequest (..),
+    newInputConfigurationRequest,
+    inputConfigurationRequest_inputPort,
+    inputConfigurationRequest_interface,
+
+    -- * Interface
+    Interface (..),
+    newInterface,
+    interface_name,
+
+    -- * InterfaceRequest
+    InterfaceRequest (..),
+    newInterfaceRequest,
+    interfaceRequest_name,
+
+    -- * ListedEntitlement
+    ListedEntitlement (..),
+    newListedEntitlement,
+    listedEntitlement_dataTransferSubscriberFeePercent,
+    listedEntitlement_entitlementArn,
+    listedEntitlement_entitlementName,
+
+    -- * ListedFlow
+    ListedFlow (..),
+    newListedFlow,
+    listedFlow_maintenance,
+    listedFlow_status,
+    listedFlow_description,
+    listedFlow_sourceType,
+    listedFlow_availabilityZone,
+    listedFlow_flowArn,
+    listedFlow_name,
+
+    -- * Maintenance
+    Maintenance (..),
+    newMaintenance,
+    maintenance_maintenanceDay,
+    maintenance_maintenanceDeadline,
+    maintenance_maintenanceScheduledDate,
+    maintenance_maintenanceStartHour,
+
+    -- * MediaStream
+    MediaStream (..),
+    newMediaStream,
+    mediaStream_attributes,
+    mediaStream_clockRate,
+    mediaStream_description,
+    mediaStream_videoFormat,
+    mediaStream_mediaStreamType,
+    mediaStream_mediaStreamId,
+    mediaStream_mediaStreamName,
+    mediaStream_fmt,
+
+    -- * MediaStreamAttributes
+    MediaStreamAttributes (..),
+    newMediaStreamAttributes,
+    mediaStreamAttributes_lang,
+    mediaStreamAttributes_fmtp,
+
+    -- * MediaStreamAttributesRequest
+    MediaStreamAttributesRequest (..),
+    newMediaStreamAttributesRequest,
+    mediaStreamAttributesRequest_fmtp,
+    mediaStreamAttributesRequest_lang,
+
+    -- * MediaStreamOutputConfiguration
+    MediaStreamOutputConfiguration (..),
+    newMediaStreamOutputConfiguration,
+    mediaStreamOutputConfiguration_destinationConfigurations,
+    mediaStreamOutputConfiguration_encodingParameters,
+    mediaStreamOutputConfiguration_mediaStreamName,
+    mediaStreamOutputConfiguration_encodingName,
+
+    -- * MediaStreamOutputConfigurationRequest
+    MediaStreamOutputConfigurationRequest (..),
+    newMediaStreamOutputConfigurationRequest,
+    mediaStreamOutputConfigurationRequest_destinationConfigurations,
+    mediaStreamOutputConfigurationRequest_encodingParameters,
+    mediaStreamOutputConfigurationRequest_mediaStreamName,
+    mediaStreamOutputConfigurationRequest_encodingName,
+
+    -- * MediaStreamSourceConfiguration
+    MediaStreamSourceConfiguration (..),
+    newMediaStreamSourceConfiguration,
+    mediaStreamSourceConfiguration_inputConfigurations,
+    mediaStreamSourceConfiguration_mediaStreamName,
+    mediaStreamSourceConfiguration_encodingName,
+
+    -- * MediaStreamSourceConfigurationRequest
+    MediaStreamSourceConfigurationRequest (..),
+    newMediaStreamSourceConfigurationRequest,
+    mediaStreamSourceConfigurationRequest_inputConfigurations,
+    mediaStreamSourceConfigurationRequest_mediaStreamName,
+    mediaStreamSourceConfigurationRequest_encodingName,
+
+    -- * Messages
+    Messages (..),
+    newMessages,
+    messages_errors,
+
+    -- * Offering
+    Offering (..),
+    newOffering,
+    offering_currencyCode,
+    offering_offeringArn,
+    offering_offeringDescription,
+    offering_durationUnits,
+    offering_duration,
+    offering_pricePerUnit,
+    offering_resourceSpecification,
+    offering_priceUnits,
+
+    -- * Output
+    Output (..),
+    newOutput,
+    output_dataTransferSubscriberFeePercent,
+    output_description,
+    output_destination,
+    output_encryption,
+    output_entitlementArn,
+    output_listenerAddress,
+    output_mediaLiveInputArn,
+    output_mediaStreamOutputConfigurations,
+    output_port,
+    output_transport,
+    output_vpcInterfaceAttachment,
+    output_outputArn,
+    output_name,
+
+    -- * Reservation
+    Reservation (..),
+    newReservation,
+    reservation_currencyCode,
+    reservation_reservationState,
+    reservation_offeringArn,
+    reservation_reservationArn,
+    reservation_start,
+    reservation_offeringDescription,
+    reservation_reservationName,
+    reservation_end,
+    reservation_duration,
+    reservation_durationUnits,
+    reservation_pricePerUnit,
+    reservation_resourceSpecification,
+    reservation_priceUnits,
+
+    -- * ResourceSpecification
+    ResourceSpecification (..),
+    newResourceSpecification,
+    resourceSpecification_reservedBitrate,
+    resourceSpecification_resourceType,
+
+    -- * SetSourceRequest
+    SetSourceRequest (..),
+    newSetSourceRequest,
+    setSourceRequest_decryption,
+    setSourceRequest_description,
+    setSourceRequest_entitlementArn,
+    setSourceRequest_ingestPort,
+    setSourceRequest_maxBitrate,
+    setSourceRequest_maxLatency,
+    setSourceRequest_maxSyncBuffer,
+    setSourceRequest_mediaStreamSourceConfigurations,
+    setSourceRequest_minLatency,
+    setSourceRequest_name,
+    setSourceRequest_protocol,
+    setSourceRequest_senderControlPort,
+    setSourceRequest_senderIpAddress,
+    setSourceRequest_sourceListenerAddress,
+    setSourceRequest_sourceListenerPort,
+    setSourceRequest_streamId,
+    setSourceRequest_vpcInterfaceName,
+    setSourceRequest_whitelistCidr,
+
+    -- * Source
+    Source (..),
+    newSource,
+    source_dataTransferSubscriberFeePercent,
+    source_decryption,
+    source_description,
+    source_entitlementArn,
+    source_ingestIp,
+    source_ingestPort,
+    source_mediaStreamSourceConfigurations,
+    source_senderControlPort,
+    source_senderIpAddress,
+    source_transport,
+    source_vpcInterfaceName,
+    source_whitelistCidr,
+    source_sourceArn,
+    source_name,
+
+    -- * SourcePriority
+    SourcePriority (..),
+    newSourcePriority,
+    sourcePriority_primarySource,
+
+    -- * Transport
+    Transport (..),
+    newTransport,
+    transport_cidrAllowList,
+    transport_maxBitrate,
+    transport_maxLatency,
+    transport_maxSyncBuffer,
+    transport_minLatency,
+    transport_remoteId,
+    transport_senderControlPort,
+    transport_senderIpAddress,
+    transport_smoothingLatency,
+    transport_sourceListenerAddress,
+    transport_sourceListenerPort,
+    transport_streamId,
+    transport_protocol,
+
+    -- * UpdateEncryption
+    UpdateEncryption (..),
+    newUpdateEncryption,
+    updateEncryption_algorithm,
+    updateEncryption_constantInitializationVector,
+    updateEncryption_deviceId,
+    updateEncryption_keyType,
+    updateEncryption_region,
+    updateEncryption_resourceId,
+    updateEncryption_roleArn,
+    updateEncryption_secretArn,
+    updateEncryption_url,
+
+    -- * UpdateFailoverConfig
+    UpdateFailoverConfig (..),
+    newUpdateFailoverConfig,
+    updateFailoverConfig_failoverMode,
+    updateFailoverConfig_recoveryWindow,
+    updateFailoverConfig_sourcePriority,
+    updateFailoverConfig_state,
+
+    -- * UpdateMaintenance
+    UpdateMaintenance (..),
+    newUpdateMaintenance,
+    updateMaintenance_maintenanceDay,
+    updateMaintenance_maintenanceScheduledDate,
+    updateMaintenance_maintenanceStartHour,
+
+    -- * VpcInterface
+    VpcInterface (..),
+    newVpcInterface,
+    vpcInterface_networkInterfaceType,
+    vpcInterface_networkInterfaceIds,
+    vpcInterface_subnetId,
+    vpcInterface_securityGroupIds,
+    vpcInterface_roleArn,
+    vpcInterface_name,
+
+    -- * VpcInterfaceAttachment
+    VpcInterfaceAttachment (..),
+    newVpcInterfaceAttachment,
+    vpcInterfaceAttachment_vpcInterfaceName,
+
+    -- * VpcInterfaceRequest
+    VpcInterfaceRequest (..),
+    newVpcInterfaceRequest,
+    vpcInterfaceRequest_networkInterfaceType,
+    vpcInterfaceRequest_subnetId,
+    vpcInterfaceRequest_securityGroupIds,
+    vpcInterfaceRequest_roleArn,
+    vpcInterfaceRequest_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MediaConnect.Types.AddMaintenance
+import Amazonka.MediaConnect.Types.AddMediaStreamRequest
+import Amazonka.MediaConnect.Types.AddOutputRequest
+import Amazonka.MediaConnect.Types.Algorithm
+import Amazonka.MediaConnect.Types.Colorimetry
+import Amazonka.MediaConnect.Types.DestinationConfiguration
+import Amazonka.MediaConnect.Types.DestinationConfigurationRequest
+import Amazonka.MediaConnect.Types.DurationUnits
+import Amazonka.MediaConnect.Types.EncoderProfile
+import Amazonka.MediaConnect.Types.EncodingName
+import Amazonka.MediaConnect.Types.EncodingParameters
+import Amazonka.MediaConnect.Types.EncodingParametersRequest
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.Entitlement
+import Amazonka.MediaConnect.Types.EntitlementStatus
+import Amazonka.MediaConnect.Types.FailoverConfig
+import Amazonka.MediaConnect.Types.FailoverMode
+import Amazonka.MediaConnect.Types.Flow
+import Amazonka.MediaConnect.Types.Fmtp
+import Amazonka.MediaConnect.Types.FmtpRequest
+import Amazonka.MediaConnect.Types.GrantEntitlementRequest
+import Amazonka.MediaConnect.Types.InputConfiguration
+import Amazonka.MediaConnect.Types.InputConfigurationRequest
+import Amazonka.MediaConnect.Types.Interface
+import Amazonka.MediaConnect.Types.InterfaceRequest
+import Amazonka.MediaConnect.Types.KeyType
+import Amazonka.MediaConnect.Types.ListedEntitlement
+import Amazonka.MediaConnect.Types.ListedFlow
+import Amazonka.MediaConnect.Types.Maintenance
+import Amazonka.MediaConnect.Types.MaintenanceDay
+import Amazonka.MediaConnect.Types.MediaStream
+import Amazonka.MediaConnect.Types.MediaStreamAttributes
+import Amazonka.MediaConnect.Types.MediaStreamAttributesRequest
+import Amazonka.MediaConnect.Types.MediaStreamOutputConfiguration
+import Amazonka.MediaConnect.Types.MediaStreamOutputConfigurationRequest
+import Amazonka.MediaConnect.Types.MediaStreamSourceConfiguration
+import Amazonka.MediaConnect.Types.MediaStreamSourceConfigurationRequest
+import Amazonka.MediaConnect.Types.MediaStreamType
+import Amazonka.MediaConnect.Types.Messages
+import Amazonka.MediaConnect.Types.NetworkInterfaceType
+import Amazonka.MediaConnect.Types.Offering
+import Amazonka.MediaConnect.Types.Output
+import Amazonka.MediaConnect.Types.PriceUnits
+import Amazonka.MediaConnect.Types.Protocol
+import Amazonka.MediaConnect.Types.Range
+import Amazonka.MediaConnect.Types.Reservation
+import Amazonka.MediaConnect.Types.ReservationState
+import Amazonka.MediaConnect.Types.ResourceSpecification
+import Amazonka.MediaConnect.Types.ResourceType
+import Amazonka.MediaConnect.Types.ScanMode
+import Amazonka.MediaConnect.Types.SetSourceRequest
+import Amazonka.MediaConnect.Types.Source
+import Amazonka.MediaConnect.Types.SourcePriority
+import Amazonka.MediaConnect.Types.SourceType
+import Amazonka.MediaConnect.Types.State
+import Amazonka.MediaConnect.Types.Status
+import Amazonka.MediaConnect.Types.Tcs
+import Amazonka.MediaConnect.Types.Transport
+import Amazonka.MediaConnect.Types.UpdateEncryption
+import Amazonka.MediaConnect.Types.UpdateFailoverConfig
+import Amazonka.MediaConnect.Types.UpdateMaintenance
+import Amazonka.MediaConnect.Types.VpcInterface
+import Amazonka.MediaConnect.Types.VpcInterfaceAttachment
+import Amazonka.MediaConnect.Types.VpcInterfaceRequest
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-11-14@ of the Amazon MediaConnect SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "MediaConnect",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "mediaconnect",
+      Core.signingName = "mediaconnect",
+      Core.version = "2018-11-14",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "MediaConnect",
+      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
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_AddFlowOutputs420Exception :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AddFlowOutputs420Exception =
+  Core._MatchServiceError
+    defaultService
+    "AddFlowOutputs420Exception"
+    Prelude.. Core.hasStatus 420
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_CreateFlow420Exception :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_CreateFlow420Exception =
+  Core._MatchServiceError
+    defaultService
+    "CreateFlow420Exception"
+    Prelude.. Core.hasStatus 420
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_ForbiddenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ForbiddenException =
+  Core._MatchServiceError
+    defaultService
+    "ForbiddenException"
+    Prelude.. Core.hasStatus 403
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_GrantFlowEntitlements420Exception :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_GrantFlowEntitlements420Exception =
+  Core._MatchServiceError
+    defaultService
+    "GrantFlowEntitlements420Exception"
+    Prelude.. Core.hasStatus 420
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_InternalServerErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerErrorException"
+    Prelude.. Core.hasStatus 500
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | Exception raised by AWS Elemental MediaConnect. See the error message
+-- and documentation for the operation for more information on the cause of
+-- this exception.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
diff --git a/gen/Amazonka/MediaConnect/Types/AddMaintenance.hs b/gen/Amazonka/MediaConnect/Types/AddMaintenance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/AddMaintenance.hs
@@ -0,0 +1,100 @@
+{-# 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.MediaConnect.Types.AddMaintenance
+-- 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.MediaConnect.Types.AddMaintenance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.MaintenanceDay
+import qualified Amazonka.Prelude as Prelude
+
+-- | Create maintenance setting for a flow
+--
+-- /See:/ 'newAddMaintenance' smart constructor.
+data AddMaintenance = AddMaintenance'
+  { -- | A day of a week when the maintenance will happen. Use
+    -- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+    maintenanceDay :: MaintenanceDay,
+    -- | UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+    -- Minutes must be 00. Example: 13:00. The default value is 02:00.
+    maintenanceStartHour :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddMaintenance' 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:
+--
+-- 'maintenanceDay', 'addMaintenance_maintenanceDay' - A day of a week when the maintenance will happen. Use
+-- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+--
+-- 'maintenanceStartHour', 'addMaintenance_maintenanceStartHour' - UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+-- Minutes must be 00. Example: 13:00. The default value is 02:00.
+newAddMaintenance ::
+  -- | 'maintenanceDay'
+  MaintenanceDay ->
+  -- | 'maintenanceStartHour'
+  Prelude.Text ->
+  AddMaintenance
+newAddMaintenance
+  pMaintenanceDay_
+  pMaintenanceStartHour_ =
+    AddMaintenance'
+      { maintenanceDay = pMaintenanceDay_,
+        maintenanceStartHour = pMaintenanceStartHour_
+      }
+
+-- | A day of a week when the maintenance will happen. Use
+-- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+addMaintenance_maintenanceDay :: Lens.Lens' AddMaintenance MaintenanceDay
+addMaintenance_maintenanceDay = Lens.lens (\AddMaintenance' {maintenanceDay} -> maintenanceDay) (\s@AddMaintenance' {} a -> s {maintenanceDay = a} :: AddMaintenance)
+
+-- | UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+-- Minutes must be 00. Example: 13:00. The default value is 02:00.
+addMaintenance_maintenanceStartHour :: Lens.Lens' AddMaintenance Prelude.Text
+addMaintenance_maintenanceStartHour = Lens.lens (\AddMaintenance' {maintenanceStartHour} -> maintenanceStartHour) (\s@AddMaintenance' {} a -> s {maintenanceStartHour = a} :: AddMaintenance)
+
+instance Prelude.Hashable AddMaintenance where
+  hashWithSalt _salt AddMaintenance' {..} =
+    _salt
+      `Prelude.hashWithSalt` maintenanceDay
+      `Prelude.hashWithSalt` maintenanceStartHour
+
+instance Prelude.NFData AddMaintenance where
+  rnf AddMaintenance' {..} =
+    Prelude.rnf maintenanceDay
+      `Prelude.seq` Prelude.rnf maintenanceStartHour
+
+instance Data.ToJSON AddMaintenance where
+  toJSON AddMaintenance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("maintenanceDay" Data..= maintenanceDay),
+            Prelude.Just
+              ( "maintenanceStartHour"
+                  Data..= maintenanceStartHour
+              )
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/AddMediaStreamRequest.hs b/gen/Amazonka/MediaConnect/Types/AddMediaStreamRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/AddMediaStreamRequest.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.AddMediaStreamRequest
+-- 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.MediaConnect.Types.AddMediaStreamRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.MediaStreamAttributesRequest
+import Amazonka.MediaConnect.Types.MediaStreamType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The media stream that you want to add to the flow.
+--
+-- /See:/ 'newAddMediaStreamRequest' smart constructor.
+data AddMediaStreamRequest = AddMediaStreamRequest'
+  { -- | The attributes that you want to assign to the new media stream.
+    attributes :: Prelude.Maybe MediaStreamAttributesRequest,
+    -- | The sample rate (in Hz) for the stream. If the media stream type is
+    -- video or ancillary data, set this value to 90000. If the media stream
+    -- type is audio, set this value to either 48000 or 96000.
+    clockRate :: Prelude.Maybe Prelude.Int,
+    -- | A description that can help you quickly identify what your media stream
+    -- is used for.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The resolution of the video.
+    videoFormat :: Prelude.Maybe Prelude.Text,
+    -- | The type of media stream.
+    mediaStreamType :: MediaStreamType,
+    -- | A unique identifier for the media stream.
+    mediaStreamId :: Prelude.Int,
+    -- | A name that helps you distinguish one media stream from another.
+    mediaStreamName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddMediaStreamRequest' 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:
+--
+-- 'attributes', 'addMediaStreamRequest_attributes' - The attributes that you want to assign to the new media stream.
+--
+-- 'clockRate', 'addMediaStreamRequest_clockRate' - The sample rate (in Hz) for the stream. If the media stream type is
+-- video or ancillary data, set this value to 90000. If the media stream
+-- type is audio, set this value to either 48000 or 96000.
+--
+-- 'description', 'addMediaStreamRequest_description' - A description that can help you quickly identify what your media stream
+-- is used for.
+--
+-- 'videoFormat', 'addMediaStreamRequest_videoFormat' - The resolution of the video.
+--
+-- 'mediaStreamType', 'addMediaStreamRequest_mediaStreamType' - The type of media stream.
+--
+-- 'mediaStreamId', 'addMediaStreamRequest_mediaStreamId' - A unique identifier for the media stream.
+--
+-- 'mediaStreamName', 'addMediaStreamRequest_mediaStreamName' - A name that helps you distinguish one media stream from another.
+newAddMediaStreamRequest ::
+  -- | 'mediaStreamType'
+  MediaStreamType ->
+  -- | 'mediaStreamId'
+  Prelude.Int ->
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  AddMediaStreamRequest
+newAddMediaStreamRequest
+  pMediaStreamType_
+  pMediaStreamId_
+  pMediaStreamName_ =
+    AddMediaStreamRequest'
+      { attributes =
+          Prelude.Nothing,
+        clockRate = Prelude.Nothing,
+        description = Prelude.Nothing,
+        videoFormat = Prelude.Nothing,
+        mediaStreamType = pMediaStreamType_,
+        mediaStreamId = pMediaStreamId_,
+        mediaStreamName = pMediaStreamName_
+      }
+
+-- | The attributes that you want to assign to the new media stream.
+addMediaStreamRequest_attributes :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe MediaStreamAttributesRequest)
+addMediaStreamRequest_attributes = Lens.lens (\AddMediaStreamRequest' {attributes} -> attributes) (\s@AddMediaStreamRequest' {} a -> s {attributes = a} :: AddMediaStreamRequest)
+
+-- | The sample rate (in Hz) for the stream. If the media stream type is
+-- video or ancillary data, set this value to 90000. If the media stream
+-- type is audio, set this value to either 48000 or 96000.
+addMediaStreamRequest_clockRate :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe Prelude.Int)
+addMediaStreamRequest_clockRate = Lens.lens (\AddMediaStreamRequest' {clockRate} -> clockRate) (\s@AddMediaStreamRequest' {} a -> s {clockRate = a} :: AddMediaStreamRequest)
+
+-- | A description that can help you quickly identify what your media stream
+-- is used for.
+addMediaStreamRequest_description :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe Prelude.Text)
+addMediaStreamRequest_description = Lens.lens (\AddMediaStreamRequest' {description} -> description) (\s@AddMediaStreamRequest' {} a -> s {description = a} :: AddMediaStreamRequest)
+
+-- | The resolution of the video.
+addMediaStreamRequest_videoFormat :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe Prelude.Text)
+addMediaStreamRequest_videoFormat = Lens.lens (\AddMediaStreamRequest' {videoFormat} -> videoFormat) (\s@AddMediaStreamRequest' {} a -> s {videoFormat = a} :: AddMediaStreamRequest)
+
+-- | The type of media stream.
+addMediaStreamRequest_mediaStreamType :: Lens.Lens' AddMediaStreamRequest MediaStreamType
+addMediaStreamRequest_mediaStreamType = Lens.lens (\AddMediaStreamRequest' {mediaStreamType} -> mediaStreamType) (\s@AddMediaStreamRequest' {} a -> s {mediaStreamType = a} :: AddMediaStreamRequest)
+
+-- | A unique identifier for the media stream.
+addMediaStreamRequest_mediaStreamId :: Lens.Lens' AddMediaStreamRequest Prelude.Int
+addMediaStreamRequest_mediaStreamId = Lens.lens (\AddMediaStreamRequest' {mediaStreamId} -> mediaStreamId) (\s@AddMediaStreamRequest' {} a -> s {mediaStreamId = a} :: AddMediaStreamRequest)
+
+-- | A name that helps you distinguish one media stream from another.
+addMediaStreamRequest_mediaStreamName :: Lens.Lens' AddMediaStreamRequest Prelude.Text
+addMediaStreamRequest_mediaStreamName = Lens.lens (\AddMediaStreamRequest' {mediaStreamName} -> mediaStreamName) (\s@AddMediaStreamRequest' {} a -> s {mediaStreamName = a} :: AddMediaStreamRequest)
+
+instance Prelude.Hashable AddMediaStreamRequest where
+  hashWithSalt _salt AddMediaStreamRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` clockRate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` videoFormat
+      `Prelude.hashWithSalt` mediaStreamType
+      `Prelude.hashWithSalt` mediaStreamId
+      `Prelude.hashWithSalt` mediaStreamName
+
+instance Prelude.NFData AddMediaStreamRequest where
+  rnf AddMediaStreamRequest' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf clockRate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf videoFormat
+      `Prelude.seq` Prelude.rnf mediaStreamType
+      `Prelude.seq` Prelude.rnf mediaStreamId
+      `Prelude.seq` Prelude.rnf mediaStreamName
+
+instance Data.ToJSON AddMediaStreamRequest where
+  toJSON AddMediaStreamRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributes" Data..=) Prelude.<$> attributes,
+            ("clockRate" Data..=) Prelude.<$> clockRate,
+            ("description" Data..=) Prelude.<$> description,
+            ("videoFormat" Data..=) Prelude.<$> videoFormat,
+            Prelude.Just
+              ("mediaStreamType" Data..= mediaStreamType),
+            Prelude.Just ("mediaStreamId" Data..= mediaStreamId),
+            Prelude.Just
+              ("mediaStreamName" Data..= mediaStreamName)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/AddOutputRequest.hs b/gen/Amazonka/MediaConnect/Types/AddOutputRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/AddOutputRequest.hs
@@ -0,0 +1,291 @@
+{-# 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.MediaConnect.Types.AddOutputRequest
+-- 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.MediaConnect.Types.AddOutputRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.MediaStreamOutputConfigurationRequest
+import Amazonka.MediaConnect.Types.Protocol
+import Amazonka.MediaConnect.Types.VpcInterfaceAttachment
+import qualified Amazonka.Prelude as Prelude
+
+-- | The output that you want to add to this flow.
+--
+-- /See:/ 'newAddOutputRequest' smart constructor.
+data AddOutputRequest = AddOutputRequest'
+  { -- | The range of IP addresses that should be allowed to initiate output
+    -- requests to this flow. These IP addresses should be in the form of a
+    -- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+    cidrAllowList :: Prelude.Maybe [Prelude.Text],
+    -- | A description of the output. This description appears only on the AWS
+    -- Elemental MediaConnect console and will not be seen by the end user.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The IP address from which video will be sent to output destinations.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The type of key used for the encryption. If no keyType is provided, the
+    -- service will use the default setting (static-key).
+    encryption :: Prelude.Maybe Encryption,
+    -- | The maximum latency in milliseconds. This parameter applies only to
+    -- RIST-based, Zixi-based, and Fujitsu-based streams.
+    maxLatency :: Prelude.Maybe Prelude.Int,
+    -- | The media streams that are associated with the output, and the
+    -- parameters for those associations.
+    mediaStreamOutputConfigurations :: Prelude.Maybe [MediaStreamOutputConfigurationRequest],
+    -- | The minimum latency in milliseconds for SRT-based streams. In streams
+    -- that use the SRT protocol, this value that you set on your MediaConnect
+    -- source or output represents the minimal potential latency of that
+    -- connection. The latency of the stream is set to the highest number
+    -- between the sender’s minimum latency and the receiver’s minimum latency.
+    minLatency :: Prelude.Maybe Prelude.Int,
+    -- | The name of the output. This value must be unique within the current
+    -- flow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The port to use when content is distributed to this output.
+    port :: Prelude.Maybe Prelude.Int,
+    -- | The remote ID for the Zixi-pull output stream.
+    remoteId :: Prelude.Maybe Prelude.Text,
+    -- | The port that the flow uses to send outbound requests to initiate
+    -- connection with the sender.
+    senderControlPort :: Prelude.Maybe Prelude.Int,
+    -- | The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+    -- streams.
+    smoothingLatency :: Prelude.Maybe Prelude.Int,
+    -- | The stream ID that you want to use for this transport. This parameter
+    -- applies only to Zixi-based streams.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the VPC interface attachment to use for this output.
+    vpcInterfaceAttachment :: Prelude.Maybe VpcInterfaceAttachment,
+    -- | The protocol to use for the output.
+    protocol :: Protocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddOutputRequest' 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:
+--
+-- 'cidrAllowList', 'addOutputRequest_cidrAllowList' - The range of IP addresses that should be allowed to initiate output
+-- requests to this flow. These IP addresses should be in the form of a
+-- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+--
+-- 'description', 'addOutputRequest_description' - A description of the output. This description appears only on the AWS
+-- Elemental MediaConnect console and will not be seen by the end user.
+--
+-- 'destination', 'addOutputRequest_destination' - The IP address from which video will be sent to output destinations.
+--
+-- 'encryption', 'addOutputRequest_encryption' - The type of key used for the encryption. If no keyType is provided, the
+-- service will use the default setting (static-key).
+--
+-- 'maxLatency', 'addOutputRequest_maxLatency' - The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+--
+-- 'mediaStreamOutputConfigurations', 'addOutputRequest_mediaStreamOutputConfigurations' - The media streams that are associated with the output, and the
+-- parameters for those associations.
+--
+-- 'minLatency', 'addOutputRequest_minLatency' - The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+--
+-- 'name', 'addOutputRequest_name' - The name of the output. This value must be unique within the current
+-- flow.
+--
+-- 'port', 'addOutputRequest_port' - The port to use when content is distributed to this output.
+--
+-- 'remoteId', 'addOutputRequest_remoteId' - The remote ID for the Zixi-pull output stream.
+--
+-- 'senderControlPort', 'addOutputRequest_senderControlPort' - The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+--
+-- 'smoothingLatency', 'addOutputRequest_smoothingLatency' - The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+-- streams.
+--
+-- 'streamId', 'addOutputRequest_streamId' - The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+--
+-- 'vpcInterfaceAttachment', 'addOutputRequest_vpcInterfaceAttachment' - The name of the VPC interface attachment to use for this output.
+--
+-- 'protocol', 'addOutputRequest_protocol' - The protocol to use for the output.
+newAddOutputRequest ::
+  -- | 'protocol'
+  Protocol ->
+  AddOutputRequest
+newAddOutputRequest pProtocol_ =
+  AddOutputRequest'
+    { cidrAllowList = Prelude.Nothing,
+      description = Prelude.Nothing,
+      destination = Prelude.Nothing,
+      encryption = Prelude.Nothing,
+      maxLatency = Prelude.Nothing,
+      mediaStreamOutputConfigurations = Prelude.Nothing,
+      minLatency = Prelude.Nothing,
+      name = Prelude.Nothing,
+      port = Prelude.Nothing,
+      remoteId = Prelude.Nothing,
+      senderControlPort = Prelude.Nothing,
+      smoothingLatency = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      vpcInterfaceAttachment = Prelude.Nothing,
+      protocol = pProtocol_
+    }
+
+-- | The range of IP addresses that should be allowed to initiate output
+-- requests to this flow. These IP addresses should be in the form of a
+-- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+addOutputRequest_cidrAllowList :: Lens.Lens' AddOutputRequest (Prelude.Maybe [Prelude.Text])
+addOutputRequest_cidrAllowList = Lens.lens (\AddOutputRequest' {cidrAllowList} -> cidrAllowList) (\s@AddOutputRequest' {} a -> s {cidrAllowList = a} :: AddOutputRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description of the output. This description appears only on the AWS
+-- Elemental MediaConnect console and will not be seen by the end user.
+addOutputRequest_description :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Text)
+addOutputRequest_description = Lens.lens (\AddOutputRequest' {description} -> description) (\s@AddOutputRequest' {} a -> s {description = a} :: AddOutputRequest)
+
+-- | The IP address from which video will be sent to output destinations.
+addOutputRequest_destination :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Text)
+addOutputRequest_destination = Lens.lens (\AddOutputRequest' {destination} -> destination) (\s@AddOutputRequest' {} a -> s {destination = a} :: AddOutputRequest)
+
+-- | The type of key used for the encryption. If no keyType is provided, the
+-- service will use the default setting (static-key).
+addOutputRequest_encryption :: Lens.Lens' AddOutputRequest (Prelude.Maybe Encryption)
+addOutputRequest_encryption = Lens.lens (\AddOutputRequest' {encryption} -> encryption) (\s@AddOutputRequest' {} a -> s {encryption = a} :: AddOutputRequest)
+
+-- | The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+addOutputRequest_maxLatency :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Int)
+addOutputRequest_maxLatency = Lens.lens (\AddOutputRequest' {maxLatency} -> maxLatency) (\s@AddOutputRequest' {} a -> s {maxLatency = a} :: AddOutputRequest)
+
+-- | The media streams that are associated with the output, and the
+-- parameters for those associations.
+addOutputRequest_mediaStreamOutputConfigurations :: Lens.Lens' AddOutputRequest (Prelude.Maybe [MediaStreamOutputConfigurationRequest])
+addOutputRequest_mediaStreamOutputConfigurations = Lens.lens (\AddOutputRequest' {mediaStreamOutputConfigurations} -> mediaStreamOutputConfigurations) (\s@AddOutputRequest' {} a -> s {mediaStreamOutputConfigurations = a} :: AddOutputRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+addOutputRequest_minLatency :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Int)
+addOutputRequest_minLatency = Lens.lens (\AddOutputRequest' {minLatency} -> minLatency) (\s@AddOutputRequest' {} a -> s {minLatency = a} :: AddOutputRequest)
+
+-- | The name of the output. This value must be unique within the current
+-- flow.
+addOutputRequest_name :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Text)
+addOutputRequest_name = Lens.lens (\AddOutputRequest' {name} -> name) (\s@AddOutputRequest' {} a -> s {name = a} :: AddOutputRequest)
+
+-- | The port to use when content is distributed to this output.
+addOutputRequest_port :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Int)
+addOutputRequest_port = Lens.lens (\AddOutputRequest' {port} -> port) (\s@AddOutputRequest' {} a -> s {port = a} :: AddOutputRequest)
+
+-- | The remote ID for the Zixi-pull output stream.
+addOutputRequest_remoteId :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Text)
+addOutputRequest_remoteId = Lens.lens (\AddOutputRequest' {remoteId} -> remoteId) (\s@AddOutputRequest' {} a -> s {remoteId = a} :: AddOutputRequest)
+
+-- | The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+addOutputRequest_senderControlPort :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Int)
+addOutputRequest_senderControlPort = Lens.lens (\AddOutputRequest' {senderControlPort} -> senderControlPort) (\s@AddOutputRequest' {} a -> s {senderControlPort = a} :: AddOutputRequest)
+
+-- | The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+-- streams.
+addOutputRequest_smoothingLatency :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Int)
+addOutputRequest_smoothingLatency = Lens.lens (\AddOutputRequest' {smoothingLatency} -> smoothingLatency) (\s@AddOutputRequest' {} a -> s {smoothingLatency = a} :: AddOutputRequest)
+
+-- | The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+addOutputRequest_streamId :: Lens.Lens' AddOutputRequest (Prelude.Maybe Prelude.Text)
+addOutputRequest_streamId = Lens.lens (\AddOutputRequest' {streamId} -> streamId) (\s@AddOutputRequest' {} a -> s {streamId = a} :: AddOutputRequest)
+
+-- | The name of the VPC interface attachment to use for this output.
+addOutputRequest_vpcInterfaceAttachment :: Lens.Lens' AddOutputRequest (Prelude.Maybe VpcInterfaceAttachment)
+addOutputRequest_vpcInterfaceAttachment = Lens.lens (\AddOutputRequest' {vpcInterfaceAttachment} -> vpcInterfaceAttachment) (\s@AddOutputRequest' {} a -> s {vpcInterfaceAttachment = a} :: AddOutputRequest)
+
+-- | The protocol to use for the output.
+addOutputRequest_protocol :: Lens.Lens' AddOutputRequest Protocol
+addOutputRequest_protocol = Lens.lens (\AddOutputRequest' {protocol} -> protocol) (\s@AddOutputRequest' {} a -> s {protocol = a} :: AddOutputRequest)
+
+instance Prelude.Hashable AddOutputRequest where
+  hashWithSalt _salt AddOutputRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrAllowList
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` maxLatency
+      `Prelude.hashWithSalt` mediaStreamOutputConfigurations
+      `Prelude.hashWithSalt` minLatency
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` port
+      `Prelude.hashWithSalt` remoteId
+      `Prelude.hashWithSalt` senderControlPort
+      `Prelude.hashWithSalt` smoothingLatency
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` vpcInterfaceAttachment
+      `Prelude.hashWithSalt` protocol
+
+instance Prelude.NFData AddOutputRequest where
+  rnf AddOutputRequest' {..} =
+    Prelude.rnf cidrAllowList
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf maxLatency
+      `Prelude.seq` Prelude.rnf mediaStreamOutputConfigurations
+      `Prelude.seq` Prelude.rnf minLatency
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf remoteId
+      `Prelude.seq` Prelude.rnf senderControlPort
+      `Prelude.seq` Prelude.rnf smoothingLatency
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf vpcInterfaceAttachment
+      `Prelude.seq` Prelude.rnf protocol
+
+instance Data.ToJSON AddOutputRequest where
+  toJSON AddOutputRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cidrAllowList" Data..=) Prelude.<$> cidrAllowList,
+            ("description" Data..=) Prelude.<$> description,
+            ("destination" Data..=) Prelude.<$> destination,
+            ("encryption" Data..=) Prelude.<$> encryption,
+            ("maxLatency" Data..=) Prelude.<$> maxLatency,
+            ("mediaStreamOutputConfigurations" Data..=)
+              Prelude.<$> mediaStreamOutputConfigurations,
+            ("minLatency" Data..=) Prelude.<$> minLatency,
+            ("name" Data..=) Prelude.<$> name,
+            ("port" Data..=) Prelude.<$> port,
+            ("remoteId" Data..=) Prelude.<$> remoteId,
+            ("senderControlPort" Data..=)
+              Prelude.<$> senderControlPort,
+            ("smoothingLatency" Data..=)
+              Prelude.<$> smoothingLatency,
+            ("streamId" Data..=) Prelude.<$> streamId,
+            ("vpcInterfaceAttachment" Data..=)
+              Prelude.<$> vpcInterfaceAttachment,
+            Prelude.Just ("protocol" Data..= protocol)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/Algorithm.hs b/gen/Amazonka/MediaConnect/Types/Algorithm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Algorithm.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.MediaConnect.Types.Algorithm
+-- 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.MediaConnect.Types.Algorithm
+  ( Algorithm
+      ( ..,
+        Algorithm_Aes128,
+        Algorithm_Aes192,
+        Algorithm_Aes256
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Algorithm = Algorithm'
+  { fromAlgorithm ::
+      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 Algorithm_Aes128 :: Algorithm
+pattern Algorithm_Aes128 = Algorithm' "aes128"
+
+pattern Algorithm_Aes192 :: Algorithm
+pattern Algorithm_Aes192 = Algorithm' "aes192"
+
+pattern Algorithm_Aes256 :: Algorithm
+pattern Algorithm_Aes256 = Algorithm' "aes256"
+
+{-# COMPLETE
+  Algorithm_Aes128,
+  Algorithm_Aes192,
+  Algorithm_Aes256,
+  Algorithm'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Colorimetry.hs b/gen/Amazonka/MediaConnect/Types/Colorimetry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Colorimetry.hs
@@ -0,0 +1,96 @@
+{-# 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.MediaConnect.Types.Colorimetry
+-- 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.MediaConnect.Types.Colorimetry
+  ( Colorimetry
+      ( ..,
+        Colorimetry_BT2020,
+        Colorimetry_BT2100,
+        Colorimetry_BT601,
+        Colorimetry_BT709,
+        Colorimetry_ST2065_1,
+        Colorimetry_ST2065_3,
+        Colorimetry_XYZ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Colorimetry = Colorimetry'
+  { fromColorimetry ::
+      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 Colorimetry_BT2020 :: Colorimetry
+pattern Colorimetry_BT2020 = Colorimetry' "BT2020"
+
+pattern Colorimetry_BT2100 :: Colorimetry
+pattern Colorimetry_BT2100 = Colorimetry' "BT2100"
+
+pattern Colorimetry_BT601 :: Colorimetry
+pattern Colorimetry_BT601 = Colorimetry' "BT601"
+
+pattern Colorimetry_BT709 :: Colorimetry
+pattern Colorimetry_BT709 = Colorimetry' "BT709"
+
+pattern Colorimetry_ST2065_1 :: Colorimetry
+pattern Colorimetry_ST2065_1 = Colorimetry' "ST2065-1"
+
+pattern Colorimetry_ST2065_3 :: Colorimetry
+pattern Colorimetry_ST2065_3 = Colorimetry' "ST2065-3"
+
+pattern Colorimetry_XYZ :: Colorimetry
+pattern Colorimetry_XYZ = Colorimetry' "XYZ"
+
+{-# COMPLETE
+  Colorimetry_BT2020,
+  Colorimetry_BT2100,
+  Colorimetry_BT601,
+  Colorimetry_BT709,
+  Colorimetry_ST2065_1,
+  Colorimetry_ST2065_3,
+  Colorimetry_XYZ,
+  Colorimetry'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/DestinationConfiguration.hs b/gen/Amazonka/MediaConnect/Types/DestinationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/DestinationConfiguration.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.MediaConnect.Types.DestinationConfiguration
+-- 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.MediaConnect.Types.DestinationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Interface
+import qualified Amazonka.Prelude as Prelude
+
+-- | The transport parameters that are associated with an outbound media
+-- stream.
+--
+-- /See:/ 'newDestinationConfiguration' smart constructor.
+data DestinationConfiguration = DestinationConfiguration'
+  { -- | The IP address where contents of the media stream will be sent.
+    destinationIp :: Prelude.Text,
+    -- | The port to use when the content of the media stream is distributed to
+    -- the output.
+    destinationPort :: Prelude.Int,
+    -- | The VPC interface that is used for the media stream associated with the
+    -- output.
+    interface :: Interface,
+    -- | The IP address that the receiver requires in order to establish a
+    -- connection with the flow. This value is represented by the elastic
+    -- network interface IP address of the VPC. This field applies only to
+    -- outputs that use the CDI or ST 2110 JPEG XS protocol.
+    outboundIp :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DestinationConfiguration' 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:
+--
+-- 'destinationIp', 'destinationConfiguration_destinationIp' - The IP address where contents of the media stream will be sent.
+--
+-- 'destinationPort', 'destinationConfiguration_destinationPort' - The port to use when the content of the media stream is distributed to
+-- the output.
+--
+-- 'interface', 'destinationConfiguration_interface' - The VPC interface that is used for the media stream associated with the
+-- output.
+--
+-- 'outboundIp', 'destinationConfiguration_outboundIp' - The IP address that the receiver requires in order to establish a
+-- connection with the flow. This value is represented by the elastic
+-- network interface IP address of the VPC. This field applies only to
+-- outputs that use the CDI or ST 2110 JPEG XS protocol.
+newDestinationConfiguration ::
+  -- | 'destinationIp'
+  Prelude.Text ->
+  -- | 'destinationPort'
+  Prelude.Int ->
+  -- | 'interface'
+  Interface ->
+  -- | 'outboundIp'
+  Prelude.Text ->
+  DestinationConfiguration
+newDestinationConfiguration
+  pDestinationIp_
+  pDestinationPort_
+  pInterface_
+  pOutboundIp_ =
+    DestinationConfiguration'
+      { destinationIp =
+          pDestinationIp_,
+        destinationPort = pDestinationPort_,
+        interface = pInterface_,
+        outboundIp = pOutboundIp_
+      }
+
+-- | The IP address where contents of the media stream will be sent.
+destinationConfiguration_destinationIp :: Lens.Lens' DestinationConfiguration Prelude.Text
+destinationConfiguration_destinationIp = Lens.lens (\DestinationConfiguration' {destinationIp} -> destinationIp) (\s@DestinationConfiguration' {} a -> s {destinationIp = a} :: DestinationConfiguration)
+
+-- | The port to use when the content of the media stream is distributed to
+-- the output.
+destinationConfiguration_destinationPort :: Lens.Lens' DestinationConfiguration Prelude.Int
+destinationConfiguration_destinationPort = Lens.lens (\DestinationConfiguration' {destinationPort} -> destinationPort) (\s@DestinationConfiguration' {} a -> s {destinationPort = a} :: DestinationConfiguration)
+
+-- | The VPC interface that is used for the media stream associated with the
+-- output.
+destinationConfiguration_interface :: Lens.Lens' DestinationConfiguration Interface
+destinationConfiguration_interface = Lens.lens (\DestinationConfiguration' {interface} -> interface) (\s@DestinationConfiguration' {} a -> s {interface = a} :: DestinationConfiguration)
+
+-- | The IP address that the receiver requires in order to establish a
+-- connection with the flow. This value is represented by the elastic
+-- network interface IP address of the VPC. This field applies only to
+-- outputs that use the CDI or ST 2110 JPEG XS protocol.
+destinationConfiguration_outboundIp :: Lens.Lens' DestinationConfiguration Prelude.Text
+destinationConfiguration_outboundIp = Lens.lens (\DestinationConfiguration' {outboundIp} -> outboundIp) (\s@DestinationConfiguration' {} a -> s {outboundIp = a} :: DestinationConfiguration)
+
+instance Data.FromJSON DestinationConfiguration where
+  parseJSON =
+    Data.withObject
+      "DestinationConfiguration"
+      ( \x ->
+          DestinationConfiguration'
+            Prelude.<$> (x Data..: "destinationIp")
+            Prelude.<*> (x Data..: "destinationPort")
+            Prelude.<*> (x Data..: "interface")
+            Prelude.<*> (x Data..: "outboundIp")
+      )
+
+instance Prelude.Hashable DestinationConfiguration where
+  hashWithSalt _salt DestinationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationIp
+      `Prelude.hashWithSalt` destinationPort
+      `Prelude.hashWithSalt` interface
+      `Prelude.hashWithSalt` outboundIp
+
+instance Prelude.NFData DestinationConfiguration where
+  rnf DestinationConfiguration' {..} =
+    Prelude.rnf destinationIp
+      `Prelude.seq` Prelude.rnf destinationPort
+      `Prelude.seq` Prelude.rnf interface
+      `Prelude.seq` Prelude.rnf outboundIp
diff --git a/gen/Amazonka/MediaConnect/Types/DestinationConfigurationRequest.hs b/gen/Amazonka/MediaConnect/Types/DestinationConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/DestinationConfigurationRequest.hs
@@ -0,0 +1,126 @@
+{-# 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.MediaConnect.Types.DestinationConfigurationRequest
+-- 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.MediaConnect.Types.DestinationConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.InterfaceRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | The transport parameters that you want to associate with an outbound
+-- media stream.
+--
+-- /See:/ 'newDestinationConfigurationRequest' smart constructor.
+data DestinationConfigurationRequest = DestinationConfigurationRequest'
+  { -- | The IP address where you want MediaConnect to send contents of the media
+    -- stream.
+    destinationIp :: Prelude.Text,
+    -- | The port that you want MediaConnect to use when it distributes the media
+    -- stream to the output.
+    destinationPort :: Prelude.Int,
+    -- | The VPC interface that you want to use for the media stream associated
+    -- with the output.
+    interface :: InterfaceRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DestinationConfigurationRequest' 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:
+--
+-- 'destinationIp', 'destinationConfigurationRequest_destinationIp' - The IP address where you want MediaConnect to send contents of the media
+-- stream.
+--
+-- 'destinationPort', 'destinationConfigurationRequest_destinationPort' - The port that you want MediaConnect to use when it distributes the media
+-- stream to the output.
+--
+-- 'interface', 'destinationConfigurationRequest_interface' - The VPC interface that you want to use for the media stream associated
+-- with the output.
+newDestinationConfigurationRequest ::
+  -- | 'destinationIp'
+  Prelude.Text ->
+  -- | 'destinationPort'
+  Prelude.Int ->
+  -- | 'interface'
+  InterfaceRequest ->
+  DestinationConfigurationRequest
+newDestinationConfigurationRequest
+  pDestinationIp_
+  pDestinationPort_
+  pInterface_ =
+    DestinationConfigurationRequest'
+      { destinationIp =
+          pDestinationIp_,
+        destinationPort = pDestinationPort_,
+        interface = pInterface_
+      }
+
+-- | The IP address where you want MediaConnect to send contents of the media
+-- stream.
+destinationConfigurationRequest_destinationIp :: Lens.Lens' DestinationConfigurationRequest Prelude.Text
+destinationConfigurationRequest_destinationIp = Lens.lens (\DestinationConfigurationRequest' {destinationIp} -> destinationIp) (\s@DestinationConfigurationRequest' {} a -> s {destinationIp = a} :: DestinationConfigurationRequest)
+
+-- | The port that you want MediaConnect to use when it distributes the media
+-- stream to the output.
+destinationConfigurationRequest_destinationPort :: Lens.Lens' DestinationConfigurationRequest Prelude.Int
+destinationConfigurationRequest_destinationPort = Lens.lens (\DestinationConfigurationRequest' {destinationPort} -> destinationPort) (\s@DestinationConfigurationRequest' {} a -> s {destinationPort = a} :: DestinationConfigurationRequest)
+
+-- | The VPC interface that you want to use for the media stream associated
+-- with the output.
+destinationConfigurationRequest_interface :: Lens.Lens' DestinationConfigurationRequest InterfaceRequest
+destinationConfigurationRequest_interface = Lens.lens (\DestinationConfigurationRequest' {interface} -> interface) (\s@DestinationConfigurationRequest' {} a -> s {interface = a} :: DestinationConfigurationRequest)
+
+instance
+  Prelude.Hashable
+    DestinationConfigurationRequest
+  where
+  hashWithSalt
+    _salt
+    DestinationConfigurationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` destinationIp
+        `Prelude.hashWithSalt` destinationPort
+        `Prelude.hashWithSalt` interface
+
+instance
+  Prelude.NFData
+    DestinationConfigurationRequest
+  where
+  rnf DestinationConfigurationRequest' {..} =
+    Prelude.rnf destinationIp
+      `Prelude.seq` Prelude.rnf destinationPort
+      `Prelude.seq` Prelude.rnf interface
+
+instance Data.ToJSON DestinationConfigurationRequest where
+  toJSON DestinationConfigurationRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("destinationIp" Data..= destinationIp),
+            Prelude.Just
+              ("destinationPort" Data..= destinationPort),
+            Prelude.Just ("interface" Data..= interface)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/DurationUnits.hs b/gen/Amazonka/MediaConnect/Types/DurationUnits.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/DurationUnits.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.MediaConnect.Types.DurationUnits
+-- 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.MediaConnect.Types.DurationUnits
+  ( DurationUnits
+      ( ..,
+        DurationUnits_MONTHS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DurationUnits = DurationUnits'
+  { fromDurationUnits ::
+      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 DurationUnits_MONTHS :: DurationUnits
+pattern DurationUnits_MONTHS = DurationUnits' "MONTHS"
+
+{-# COMPLETE
+  DurationUnits_MONTHS,
+  DurationUnits'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/EncoderProfile.hs b/gen/Amazonka/MediaConnect/Types/EncoderProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/EncoderProfile.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.MediaConnect.Types.EncoderProfile
+-- 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.MediaConnect.Types.EncoderProfile
+  ( EncoderProfile
+      ( ..,
+        EncoderProfile_High,
+        EncoderProfile_Main
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EncoderProfile = EncoderProfile'
+  { fromEncoderProfile ::
+      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 EncoderProfile_High :: EncoderProfile
+pattern EncoderProfile_High = EncoderProfile' "high"
+
+pattern EncoderProfile_Main :: EncoderProfile
+pattern EncoderProfile_Main = EncoderProfile' "main"
+
+{-# COMPLETE
+  EncoderProfile_High,
+  EncoderProfile_Main,
+  EncoderProfile'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/EncodingName.hs b/gen/Amazonka/MediaConnect/Types/EncodingName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/EncodingName.hs
@@ -0,0 +1,81 @@
+{-# 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.MediaConnect.Types.EncodingName
+-- 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.MediaConnect.Types.EncodingName
+  ( EncodingName
+      ( ..,
+        EncodingName_Jxsv,
+        EncodingName_Pcm,
+        EncodingName_Raw,
+        EncodingName_Smpte291
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EncodingName = EncodingName'
+  { fromEncodingName ::
+      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 EncodingName_Jxsv :: EncodingName
+pattern EncodingName_Jxsv = EncodingName' "jxsv"
+
+pattern EncodingName_Pcm :: EncodingName
+pattern EncodingName_Pcm = EncodingName' "pcm"
+
+pattern EncodingName_Raw :: EncodingName
+pattern EncodingName_Raw = EncodingName' "raw"
+
+pattern EncodingName_Smpte291 :: EncodingName
+pattern EncodingName_Smpte291 = EncodingName' "smpte291"
+
+{-# COMPLETE
+  EncodingName_Jxsv,
+  EncodingName_Pcm,
+  EncodingName_Raw,
+  EncodingName_Smpte291,
+  EncodingName'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/EncodingParameters.hs b/gen/Amazonka/MediaConnect/Types/EncodingParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/EncodingParameters.hs
@@ -0,0 +1,115 @@
+{-# 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.MediaConnect.Types.EncodingParameters
+-- 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.MediaConnect.Types.EncodingParameters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.EncoderProfile
+import qualified Amazonka.Prelude as Prelude
+
+-- | A collection of parameters that determine how MediaConnect will convert
+-- the content. These fields only apply to outputs on flows that have a CDI
+-- source.
+--
+-- /See:/ 'newEncodingParameters' smart constructor.
+data EncodingParameters = EncodingParameters'
+  { -- | A setting on the encoder that drives compression settings. This property
+    -- only applies to video media streams associated with outputs that use the
+    -- ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol.
+    encoderProfile :: EncoderProfile,
+    -- | A value that is used to calculate compression for an output. The bitrate
+    -- of the output is calculated as follows: Output bitrate = (1 \/
+    -- compressionFactor) * (source bitrate) This property only applies to
+    -- outputs that use the ST 2110 JPEG XS protocol, with a flow source that
+    -- uses the CDI protocol. Valid values are floating point numbers in the
+    -- range of 3.0 to 10.0, inclusive.
+    compressionFactor :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncodingParameters' 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:
+--
+-- 'encoderProfile', 'encodingParameters_encoderProfile' - A setting on the encoder that drives compression settings. This property
+-- only applies to video media streams associated with outputs that use the
+-- ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol.
+--
+-- 'compressionFactor', 'encodingParameters_compressionFactor' - A value that is used to calculate compression for an output. The bitrate
+-- of the output is calculated as follows: Output bitrate = (1 \/
+-- compressionFactor) * (source bitrate) This property only applies to
+-- outputs that use the ST 2110 JPEG XS protocol, with a flow source that
+-- uses the CDI protocol. Valid values are floating point numbers in the
+-- range of 3.0 to 10.0, inclusive.
+newEncodingParameters ::
+  -- | 'encoderProfile'
+  EncoderProfile ->
+  -- | 'compressionFactor'
+  Prelude.Double ->
+  EncodingParameters
+newEncodingParameters
+  pEncoderProfile_
+  pCompressionFactor_ =
+    EncodingParameters'
+      { encoderProfile =
+          pEncoderProfile_,
+        compressionFactor = pCompressionFactor_
+      }
+
+-- | A setting on the encoder that drives compression settings. This property
+-- only applies to video media streams associated with outputs that use the
+-- ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol.
+encodingParameters_encoderProfile :: Lens.Lens' EncodingParameters EncoderProfile
+encodingParameters_encoderProfile = Lens.lens (\EncodingParameters' {encoderProfile} -> encoderProfile) (\s@EncodingParameters' {} a -> s {encoderProfile = a} :: EncodingParameters)
+
+-- | A value that is used to calculate compression for an output. The bitrate
+-- of the output is calculated as follows: Output bitrate = (1 \/
+-- compressionFactor) * (source bitrate) This property only applies to
+-- outputs that use the ST 2110 JPEG XS protocol, with a flow source that
+-- uses the CDI protocol. Valid values are floating point numbers in the
+-- range of 3.0 to 10.0, inclusive.
+encodingParameters_compressionFactor :: Lens.Lens' EncodingParameters Prelude.Double
+encodingParameters_compressionFactor = Lens.lens (\EncodingParameters' {compressionFactor} -> compressionFactor) (\s@EncodingParameters' {} a -> s {compressionFactor = a} :: EncodingParameters)
+
+instance Data.FromJSON EncodingParameters where
+  parseJSON =
+    Data.withObject
+      "EncodingParameters"
+      ( \x ->
+          EncodingParameters'
+            Prelude.<$> (x Data..: "encoderProfile")
+            Prelude.<*> (x Data..: "compressionFactor")
+      )
+
+instance Prelude.Hashable EncodingParameters where
+  hashWithSalt _salt EncodingParameters' {..} =
+    _salt
+      `Prelude.hashWithSalt` encoderProfile
+      `Prelude.hashWithSalt` compressionFactor
+
+instance Prelude.NFData EncodingParameters where
+  rnf EncodingParameters' {..} =
+    Prelude.rnf encoderProfile
+      `Prelude.seq` Prelude.rnf compressionFactor
diff --git a/gen/Amazonka/MediaConnect/Types/EncodingParametersRequest.hs b/gen/Amazonka/MediaConnect/Types/EncodingParametersRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/EncodingParametersRequest.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.EncodingParametersRequest
+-- 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.MediaConnect.Types.EncodingParametersRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.EncoderProfile
+import qualified Amazonka.Prelude as Prelude
+
+-- | A collection of parameters that determine how MediaConnect will convert
+-- the content. These fields only apply to outputs on flows that have a CDI
+-- source.
+--
+-- /See:/ 'newEncodingParametersRequest' smart constructor.
+data EncodingParametersRequest = EncodingParametersRequest'
+  { -- | A setting on the encoder that drives compression settings. This property
+    -- only applies to video media streams associated with outputs that use the
+    -- ST 2110 JPEG XS protocol, if at least one source on the flow uses the
+    -- CDI protocol.
+    encoderProfile :: EncoderProfile,
+    -- | A value that is used to calculate compression for an output. The bitrate
+    -- of the output is calculated as follows: Output bitrate = (1 \/
+    -- compressionFactor) * (source bitrate) This property only applies to
+    -- outputs that use the ST 2110 JPEG XS protocol, with a flow source that
+    -- uses the CDI protocol. Valid values are floating point numbers in the
+    -- range of 3.0 to 10.0, inclusive.
+    compressionFactor :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncodingParametersRequest' 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:
+--
+-- 'encoderProfile', 'encodingParametersRequest_encoderProfile' - A setting on the encoder that drives compression settings. This property
+-- only applies to video media streams associated with outputs that use the
+-- ST 2110 JPEG XS protocol, if at least one source on the flow uses the
+-- CDI protocol.
+--
+-- 'compressionFactor', 'encodingParametersRequest_compressionFactor' - A value that is used to calculate compression for an output. The bitrate
+-- of the output is calculated as follows: Output bitrate = (1 \/
+-- compressionFactor) * (source bitrate) This property only applies to
+-- outputs that use the ST 2110 JPEG XS protocol, with a flow source that
+-- uses the CDI protocol. Valid values are floating point numbers in the
+-- range of 3.0 to 10.0, inclusive.
+newEncodingParametersRequest ::
+  -- | 'encoderProfile'
+  EncoderProfile ->
+  -- | 'compressionFactor'
+  Prelude.Double ->
+  EncodingParametersRequest
+newEncodingParametersRequest
+  pEncoderProfile_
+  pCompressionFactor_ =
+    EncodingParametersRequest'
+      { encoderProfile =
+          pEncoderProfile_,
+        compressionFactor = pCompressionFactor_
+      }
+
+-- | A setting on the encoder that drives compression settings. This property
+-- only applies to video media streams associated with outputs that use the
+-- ST 2110 JPEG XS protocol, if at least one source on the flow uses the
+-- CDI protocol.
+encodingParametersRequest_encoderProfile :: Lens.Lens' EncodingParametersRequest EncoderProfile
+encodingParametersRequest_encoderProfile = Lens.lens (\EncodingParametersRequest' {encoderProfile} -> encoderProfile) (\s@EncodingParametersRequest' {} a -> s {encoderProfile = a} :: EncodingParametersRequest)
+
+-- | A value that is used to calculate compression for an output. The bitrate
+-- of the output is calculated as follows: Output bitrate = (1 \/
+-- compressionFactor) * (source bitrate) This property only applies to
+-- outputs that use the ST 2110 JPEG XS protocol, with a flow source that
+-- uses the CDI protocol. Valid values are floating point numbers in the
+-- range of 3.0 to 10.0, inclusive.
+encodingParametersRequest_compressionFactor :: Lens.Lens' EncodingParametersRequest Prelude.Double
+encodingParametersRequest_compressionFactor = Lens.lens (\EncodingParametersRequest' {compressionFactor} -> compressionFactor) (\s@EncodingParametersRequest' {} a -> s {compressionFactor = a} :: EncodingParametersRequest)
+
+instance Prelude.Hashable EncodingParametersRequest where
+  hashWithSalt _salt EncodingParametersRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` encoderProfile
+      `Prelude.hashWithSalt` compressionFactor
+
+instance Prelude.NFData EncodingParametersRequest where
+  rnf EncodingParametersRequest' {..} =
+    Prelude.rnf encoderProfile
+      `Prelude.seq` Prelude.rnf compressionFactor
+
+instance Data.ToJSON EncodingParametersRequest where
+  toJSON EncodingParametersRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("encoderProfile" Data..= encoderProfile),
+            Prelude.Just
+              ("compressionFactor" Data..= compressionFactor)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/Encryption.hs b/gen/Amazonka/MediaConnect/Types/Encryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Encryption.hs
@@ -0,0 +1,240 @@
+{-# 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.MediaConnect.Types.Encryption
+-- 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.MediaConnect.Types.Encryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Algorithm
+import Amazonka.MediaConnect.Types.KeyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the encryption of the flow.
+--
+-- /See:/ 'newEncryption' smart constructor.
+data Encryption = Encryption'
+  { -- | The type of algorithm that is used for the encryption (such as aes128,
+    -- aes192, or aes256).
+    algorithm :: Prelude.Maybe Algorithm,
+    -- | A 128-bit, 16-byte hex value represented by a 32-character string, to be
+    -- used with the key for encrypting content. This parameter is not valid
+    -- for static key encryption.
+    constantInitializationVector :: Prelude.Maybe Prelude.Text,
+    -- | The value of one of the devices that you configured with your digital
+    -- rights management (DRM) platform key provider. This parameter is
+    -- required for SPEKE encryption and is not valid for static key
+    -- encryption.
+    deviceId :: Prelude.Maybe Prelude.Text,
+    -- | The type of key that is used for the encryption. If no keyType is
+    -- provided, the service will use the default setting (static-key).
+    keyType :: Prelude.Maybe KeyType,
+    -- | The AWS Region that the API Gateway proxy endpoint was created in. This
+    -- parameter is required for SPEKE encryption and is not valid for static
+    -- key encryption.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | An identifier for the content. The service sends this value to the key
+    -- server to identify the current endpoint. The resource ID is also known
+    -- as the content ID. This parameter is required for SPEKE encryption and
+    -- is not valid for static key encryption.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the secret that you created in AWS Secrets Manager to store
+    -- the encryption key. This parameter is required for static key encryption
+    -- and is not valid for SPEKE encryption.
+    secretArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL from the API Gateway proxy that you set up to talk to your key
+    -- server. This parameter is required for SPEKE encryption and is not valid
+    -- for static key encryption.
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the role that you created during setup (when you set up AWS
+    -- Elemental MediaConnect as a trusted entity).
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Encryption' 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:
+--
+-- 'algorithm', 'encryption_algorithm' - The type of algorithm that is used for the encryption (such as aes128,
+-- aes192, or aes256).
+--
+-- 'constantInitializationVector', 'encryption_constantInitializationVector' - A 128-bit, 16-byte hex value represented by a 32-character string, to be
+-- used with the key for encrypting content. This parameter is not valid
+-- for static key encryption.
+--
+-- 'deviceId', 'encryption_deviceId' - The value of one of the devices that you configured with your digital
+-- rights management (DRM) platform key provider. This parameter is
+-- required for SPEKE encryption and is not valid for static key
+-- encryption.
+--
+-- 'keyType', 'encryption_keyType' - The type of key that is used for the encryption. If no keyType is
+-- provided, the service will use the default setting (static-key).
+--
+-- 'region', 'encryption_region' - The AWS Region that the API Gateway proxy endpoint was created in. This
+-- parameter is required for SPEKE encryption and is not valid for static
+-- key encryption.
+--
+-- 'resourceId', 'encryption_resourceId' - An identifier for the content. The service sends this value to the key
+-- server to identify the current endpoint. The resource ID is also known
+-- as the content ID. This parameter is required for SPEKE encryption and
+-- is not valid for static key encryption.
+--
+-- 'secretArn', 'encryption_secretArn' - The ARN of the secret that you created in AWS Secrets Manager to store
+-- the encryption key. This parameter is required for static key encryption
+-- and is not valid for SPEKE encryption.
+--
+-- 'url', 'encryption_url' - The URL from the API Gateway proxy that you set up to talk to your key
+-- server. This parameter is required for SPEKE encryption and is not valid
+-- for static key encryption.
+--
+-- 'roleArn', 'encryption_roleArn' - The ARN of the role that you created during setup (when you set up AWS
+-- Elemental MediaConnect as a trusted entity).
+newEncryption ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  Encryption
+newEncryption pRoleArn_ =
+  Encryption'
+    { algorithm = Prelude.Nothing,
+      constantInitializationVector = Prelude.Nothing,
+      deviceId = Prelude.Nothing,
+      keyType = Prelude.Nothing,
+      region = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      secretArn = Prelude.Nothing,
+      url = Prelude.Nothing,
+      roleArn = pRoleArn_
+    }
+
+-- | The type of algorithm that is used for the encryption (such as aes128,
+-- aes192, or aes256).
+encryption_algorithm :: Lens.Lens' Encryption (Prelude.Maybe Algorithm)
+encryption_algorithm = Lens.lens (\Encryption' {algorithm} -> algorithm) (\s@Encryption' {} a -> s {algorithm = a} :: Encryption)
+
+-- | A 128-bit, 16-byte hex value represented by a 32-character string, to be
+-- used with the key for encrypting content. This parameter is not valid
+-- for static key encryption.
+encryption_constantInitializationVector :: Lens.Lens' Encryption (Prelude.Maybe Prelude.Text)
+encryption_constantInitializationVector = Lens.lens (\Encryption' {constantInitializationVector} -> constantInitializationVector) (\s@Encryption' {} a -> s {constantInitializationVector = a} :: Encryption)
+
+-- | The value of one of the devices that you configured with your digital
+-- rights management (DRM) platform key provider. This parameter is
+-- required for SPEKE encryption and is not valid for static key
+-- encryption.
+encryption_deviceId :: Lens.Lens' Encryption (Prelude.Maybe Prelude.Text)
+encryption_deviceId = Lens.lens (\Encryption' {deviceId} -> deviceId) (\s@Encryption' {} a -> s {deviceId = a} :: Encryption)
+
+-- | The type of key that is used for the encryption. If no keyType is
+-- provided, the service will use the default setting (static-key).
+encryption_keyType :: Lens.Lens' Encryption (Prelude.Maybe KeyType)
+encryption_keyType = Lens.lens (\Encryption' {keyType} -> keyType) (\s@Encryption' {} a -> s {keyType = a} :: Encryption)
+
+-- | The AWS Region that the API Gateway proxy endpoint was created in. This
+-- parameter is required for SPEKE encryption and is not valid for static
+-- key encryption.
+encryption_region :: Lens.Lens' Encryption (Prelude.Maybe Prelude.Text)
+encryption_region = Lens.lens (\Encryption' {region} -> region) (\s@Encryption' {} a -> s {region = a} :: Encryption)
+
+-- | An identifier for the content. The service sends this value to the key
+-- server to identify the current endpoint. The resource ID is also known
+-- as the content ID. This parameter is required for SPEKE encryption and
+-- is not valid for static key encryption.
+encryption_resourceId :: Lens.Lens' Encryption (Prelude.Maybe Prelude.Text)
+encryption_resourceId = Lens.lens (\Encryption' {resourceId} -> resourceId) (\s@Encryption' {} a -> s {resourceId = a} :: Encryption)
+
+-- | The ARN of the secret that you created in AWS Secrets Manager to store
+-- the encryption key. This parameter is required for static key encryption
+-- and is not valid for SPEKE encryption.
+encryption_secretArn :: Lens.Lens' Encryption (Prelude.Maybe Prelude.Text)
+encryption_secretArn = Lens.lens (\Encryption' {secretArn} -> secretArn) (\s@Encryption' {} a -> s {secretArn = a} :: Encryption)
+
+-- | The URL from the API Gateway proxy that you set up to talk to your key
+-- server. This parameter is required for SPEKE encryption and is not valid
+-- for static key encryption.
+encryption_url :: Lens.Lens' Encryption (Prelude.Maybe Prelude.Text)
+encryption_url = Lens.lens (\Encryption' {url} -> url) (\s@Encryption' {} a -> s {url = a} :: Encryption)
+
+-- | The ARN of the role that you created during setup (when you set up AWS
+-- Elemental MediaConnect as a trusted entity).
+encryption_roleArn :: Lens.Lens' Encryption Prelude.Text
+encryption_roleArn = Lens.lens (\Encryption' {roleArn} -> roleArn) (\s@Encryption' {} a -> s {roleArn = a} :: Encryption)
+
+instance Data.FromJSON Encryption where
+  parseJSON =
+    Data.withObject
+      "Encryption"
+      ( \x ->
+          Encryption'
+            Prelude.<$> (x Data..:? "algorithm")
+            Prelude.<*> (x Data..:? "constantInitializationVector")
+            Prelude.<*> (x Data..:? "deviceId")
+            Prelude.<*> (x Data..:? "keyType")
+            Prelude.<*> (x Data..:? "region")
+            Prelude.<*> (x Data..:? "resourceId")
+            Prelude.<*> (x Data..:? "secretArn")
+            Prelude.<*> (x Data..:? "url")
+            Prelude.<*> (x Data..: "roleArn")
+      )
+
+instance Prelude.Hashable Encryption where
+  hashWithSalt _salt Encryption' {..} =
+    _salt
+      `Prelude.hashWithSalt` algorithm
+      `Prelude.hashWithSalt` constantInitializationVector
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` keyType
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData Encryption where
+  rnf Encryption' {..} =
+    Prelude.rnf algorithm
+      `Prelude.seq` Prelude.rnf constantInitializationVector
+      `Prelude.seq` Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf keyType
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToJSON Encryption where
+  toJSON Encryption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("algorithm" Data..=) Prelude.<$> algorithm,
+            ("constantInitializationVector" Data..=)
+              Prelude.<$> constantInitializationVector,
+            ("deviceId" Data..=) Prelude.<$> deviceId,
+            ("keyType" Data..=) Prelude.<$> keyType,
+            ("region" Data..=) Prelude.<$> region,
+            ("resourceId" Data..=) Prelude.<$> resourceId,
+            ("secretArn" Data..=) Prelude.<$> secretArn,
+            ("url" Data..=) Prelude.<$> url,
+            Prelude.Just ("roleArn" Data..= roleArn)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/Entitlement.hs b/gen/Amazonka/MediaConnect/Types/Entitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Entitlement.hs
@@ -0,0 +1,163 @@
+{-# 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.MediaConnect.Types.Entitlement
+-- 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.MediaConnect.Types.Entitlement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.EntitlementStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for a flow entitlement.
+--
+-- /See:/ 'newEntitlement' smart constructor.
+data Entitlement = Entitlement'
+  { -- | Percentage from 0-100 of the data transfer cost to be billed to the
+    -- subscriber.
+    dataTransferSubscriberFeePercent :: Prelude.Maybe Prelude.Int,
+    -- | A description of the entitlement.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of encryption that will be used on the output that is
+    -- associated with this entitlement.
+    encryption :: Prelude.Maybe Encryption,
+    -- | An indication of whether the entitlement is enabled.
+    entitlementStatus :: Prelude.Maybe EntitlementStatus,
+    -- | The ARN of the entitlement.
+    entitlementArn :: Prelude.Text,
+    -- | The AWS account IDs that you want to share your content with. The
+    -- receiving accounts (subscribers) will be allowed to create their own
+    -- flow using your content as the source.
+    subscribers :: [Prelude.Text],
+    -- | The name of the entitlement.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Entitlement' 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:
+--
+-- 'dataTransferSubscriberFeePercent', 'entitlement_dataTransferSubscriberFeePercent' - Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+--
+-- 'description', 'entitlement_description' - A description of the entitlement.
+--
+-- 'encryption', 'entitlement_encryption' - The type of encryption that will be used on the output that is
+-- associated with this entitlement.
+--
+-- 'entitlementStatus', 'entitlement_entitlementStatus' - An indication of whether the entitlement is enabled.
+--
+-- 'entitlementArn', 'entitlement_entitlementArn' - The ARN of the entitlement.
+--
+-- 'subscribers', 'entitlement_subscribers' - The AWS account IDs that you want to share your content with. The
+-- receiving accounts (subscribers) will be allowed to create their own
+-- flow using your content as the source.
+--
+-- 'name', 'entitlement_name' - The name of the entitlement.
+newEntitlement ::
+  -- | 'entitlementArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  Entitlement
+newEntitlement pEntitlementArn_ pName_ =
+  Entitlement'
+    { dataTransferSubscriberFeePercent =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      encryption = Prelude.Nothing,
+      entitlementStatus = Prelude.Nothing,
+      entitlementArn = pEntitlementArn_,
+      subscribers = Prelude.mempty,
+      name = pName_
+    }
+
+-- | Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+entitlement_dataTransferSubscriberFeePercent :: Lens.Lens' Entitlement (Prelude.Maybe Prelude.Int)
+entitlement_dataTransferSubscriberFeePercent = Lens.lens (\Entitlement' {dataTransferSubscriberFeePercent} -> dataTransferSubscriberFeePercent) (\s@Entitlement' {} a -> s {dataTransferSubscriberFeePercent = a} :: Entitlement)
+
+-- | A description of the entitlement.
+entitlement_description :: Lens.Lens' Entitlement (Prelude.Maybe Prelude.Text)
+entitlement_description = Lens.lens (\Entitlement' {description} -> description) (\s@Entitlement' {} a -> s {description = a} :: Entitlement)
+
+-- | The type of encryption that will be used on the output that is
+-- associated with this entitlement.
+entitlement_encryption :: Lens.Lens' Entitlement (Prelude.Maybe Encryption)
+entitlement_encryption = Lens.lens (\Entitlement' {encryption} -> encryption) (\s@Entitlement' {} a -> s {encryption = a} :: Entitlement)
+
+-- | An indication of whether the entitlement is enabled.
+entitlement_entitlementStatus :: Lens.Lens' Entitlement (Prelude.Maybe EntitlementStatus)
+entitlement_entitlementStatus = Lens.lens (\Entitlement' {entitlementStatus} -> entitlementStatus) (\s@Entitlement' {} a -> s {entitlementStatus = a} :: Entitlement)
+
+-- | The ARN of the entitlement.
+entitlement_entitlementArn :: Lens.Lens' Entitlement Prelude.Text
+entitlement_entitlementArn = Lens.lens (\Entitlement' {entitlementArn} -> entitlementArn) (\s@Entitlement' {} a -> s {entitlementArn = a} :: Entitlement)
+
+-- | The AWS account IDs that you want to share your content with. The
+-- receiving accounts (subscribers) will be allowed to create their own
+-- flow using your content as the source.
+entitlement_subscribers :: Lens.Lens' Entitlement [Prelude.Text]
+entitlement_subscribers = Lens.lens (\Entitlement' {subscribers} -> subscribers) (\s@Entitlement' {} a -> s {subscribers = a} :: Entitlement) Prelude.. Lens.coerced
+
+-- | The name of the entitlement.
+entitlement_name :: Lens.Lens' Entitlement Prelude.Text
+entitlement_name = Lens.lens (\Entitlement' {name} -> name) (\s@Entitlement' {} a -> s {name = a} :: Entitlement)
+
+instance Data.FromJSON Entitlement where
+  parseJSON =
+    Data.withObject
+      "Entitlement"
+      ( \x ->
+          Entitlement'
+            Prelude.<$> (x Data..:? "dataTransferSubscriberFeePercent")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "encryption")
+            Prelude.<*> (x Data..:? "entitlementStatus")
+            Prelude.<*> (x Data..: "entitlementArn")
+            Prelude.<*> (x Data..:? "subscribers" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable Entitlement where
+  hashWithSalt _salt Entitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTransferSubscriberFeePercent
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` entitlementStatus
+      `Prelude.hashWithSalt` entitlementArn
+      `Prelude.hashWithSalt` subscribers
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Entitlement where
+  rnf Entitlement' {..} =
+    Prelude.rnf dataTransferSubscriberFeePercent
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf entitlementStatus
+      `Prelude.seq` Prelude.rnf entitlementArn
+      `Prelude.seq` Prelude.rnf subscribers
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MediaConnect/Types/EntitlementStatus.hs b/gen/Amazonka/MediaConnect/Types/EntitlementStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/EntitlementStatus.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.MediaConnect.Types.EntitlementStatus
+-- 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.MediaConnect.Types.EntitlementStatus
+  ( EntitlementStatus
+      ( ..,
+        EntitlementStatus_DISABLED,
+        EntitlementStatus_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EntitlementStatus = EntitlementStatus'
+  { fromEntitlementStatus ::
+      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 EntitlementStatus_DISABLED :: EntitlementStatus
+pattern EntitlementStatus_DISABLED = EntitlementStatus' "DISABLED"
+
+pattern EntitlementStatus_ENABLED :: EntitlementStatus
+pattern EntitlementStatus_ENABLED = EntitlementStatus' "ENABLED"
+
+{-# COMPLETE
+  EntitlementStatus_DISABLED,
+  EntitlementStatus_ENABLED,
+  EntitlementStatus'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/FailoverConfig.hs b/gen/Amazonka/MediaConnect/Types/FailoverConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/FailoverConfig.hs
@@ -0,0 +1,132 @@
+{-# 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.MediaConnect.Types.FailoverConfig
+-- 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.MediaConnect.Types.FailoverConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.FailoverMode
+import Amazonka.MediaConnect.Types.SourcePriority
+import Amazonka.MediaConnect.Types.State
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for source failover.
+--
+-- /See:/ 'newFailoverConfig' smart constructor.
+data FailoverConfig = FailoverConfig'
+  { -- | The type of failover you choose for this flow. MERGE combines the source
+    -- streams into a single stream, allowing graceful recovery from any
+    -- single-source loss. FAILOVER allows switching between different streams.
+    failoverMode :: Prelude.Maybe FailoverMode,
+    -- | Search window time to look for dash-7 packets
+    recoveryWindow :: Prelude.Maybe Prelude.Int,
+    -- | The priority you want to assign to a source. You can have a primary
+    -- stream and a backup stream or two equally prioritized streams.
+    sourcePriority :: Prelude.Maybe SourcePriority,
+    state :: Prelude.Maybe State
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailoverConfig' 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:
+--
+-- 'failoverMode', 'failoverConfig_failoverMode' - The type of failover you choose for this flow. MERGE combines the source
+-- streams into a single stream, allowing graceful recovery from any
+-- single-source loss. FAILOVER allows switching between different streams.
+--
+-- 'recoveryWindow', 'failoverConfig_recoveryWindow' - Search window time to look for dash-7 packets
+--
+-- 'sourcePriority', 'failoverConfig_sourcePriority' - The priority you want to assign to a source. You can have a primary
+-- stream and a backup stream or two equally prioritized streams.
+--
+-- 'state', 'failoverConfig_state' - Undocumented member.
+newFailoverConfig ::
+  FailoverConfig
+newFailoverConfig =
+  FailoverConfig'
+    { failoverMode = Prelude.Nothing,
+      recoveryWindow = Prelude.Nothing,
+      sourcePriority = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The type of failover you choose for this flow. MERGE combines the source
+-- streams into a single stream, allowing graceful recovery from any
+-- single-source loss. FAILOVER allows switching between different streams.
+failoverConfig_failoverMode :: Lens.Lens' FailoverConfig (Prelude.Maybe FailoverMode)
+failoverConfig_failoverMode = Lens.lens (\FailoverConfig' {failoverMode} -> failoverMode) (\s@FailoverConfig' {} a -> s {failoverMode = a} :: FailoverConfig)
+
+-- | Search window time to look for dash-7 packets
+failoverConfig_recoveryWindow :: Lens.Lens' FailoverConfig (Prelude.Maybe Prelude.Int)
+failoverConfig_recoveryWindow = Lens.lens (\FailoverConfig' {recoveryWindow} -> recoveryWindow) (\s@FailoverConfig' {} a -> s {recoveryWindow = a} :: FailoverConfig)
+
+-- | The priority you want to assign to a source. You can have a primary
+-- stream and a backup stream or two equally prioritized streams.
+failoverConfig_sourcePriority :: Lens.Lens' FailoverConfig (Prelude.Maybe SourcePriority)
+failoverConfig_sourcePriority = Lens.lens (\FailoverConfig' {sourcePriority} -> sourcePriority) (\s@FailoverConfig' {} a -> s {sourcePriority = a} :: FailoverConfig)
+
+-- | Undocumented member.
+failoverConfig_state :: Lens.Lens' FailoverConfig (Prelude.Maybe State)
+failoverConfig_state = Lens.lens (\FailoverConfig' {state} -> state) (\s@FailoverConfig' {} a -> s {state = a} :: FailoverConfig)
+
+instance Data.FromJSON FailoverConfig where
+  parseJSON =
+    Data.withObject
+      "FailoverConfig"
+      ( \x ->
+          FailoverConfig'
+            Prelude.<$> (x Data..:? "failoverMode")
+            Prelude.<*> (x Data..:? "recoveryWindow")
+            Prelude.<*> (x Data..:? "sourcePriority")
+            Prelude.<*> (x Data..:? "state")
+      )
+
+instance Prelude.Hashable FailoverConfig where
+  hashWithSalt _salt FailoverConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` failoverMode
+      `Prelude.hashWithSalt` recoveryWindow
+      `Prelude.hashWithSalt` sourcePriority
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData FailoverConfig where
+  rnf FailoverConfig' {..} =
+    Prelude.rnf failoverMode
+      `Prelude.seq` Prelude.rnf recoveryWindow
+      `Prelude.seq` Prelude.rnf sourcePriority
+      `Prelude.seq` Prelude.rnf state
+
+instance Data.ToJSON FailoverConfig where
+  toJSON FailoverConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("failoverMode" Data..=) Prelude.<$> failoverMode,
+            ("recoveryWindow" Data..=)
+              Prelude.<$> recoveryWindow,
+            ("sourcePriority" Data..=)
+              Prelude.<$> sourcePriority,
+            ("state" Data..=) Prelude.<$> state
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/FailoverMode.hs b/gen/Amazonka/MediaConnect/Types/FailoverMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/FailoverMode.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.MediaConnect.Types.FailoverMode
+-- 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.MediaConnect.Types.FailoverMode
+  ( FailoverMode
+      ( ..,
+        FailoverMode_FAILOVER,
+        FailoverMode_MERGE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FailoverMode = FailoverMode'
+  { fromFailoverMode ::
+      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 FailoverMode_FAILOVER :: FailoverMode
+pattern FailoverMode_FAILOVER = FailoverMode' "FAILOVER"
+
+pattern FailoverMode_MERGE :: FailoverMode
+pattern FailoverMode_MERGE = FailoverMode' "MERGE"
+
+{-# COMPLETE
+  FailoverMode_FAILOVER,
+  FailoverMode_MERGE,
+  FailoverMode'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Flow.hs b/gen/Amazonka/MediaConnect/Types/Flow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Flow.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.Flow
+-- 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.MediaConnect.Types.Flow where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Entitlement
+import Amazonka.MediaConnect.Types.FailoverConfig
+import Amazonka.MediaConnect.Types.Maintenance
+import Amazonka.MediaConnect.Types.MediaStream
+import Amazonka.MediaConnect.Types.Output
+import Amazonka.MediaConnect.Types.Source
+import Amazonka.MediaConnect.Types.Status
+import Amazonka.MediaConnect.Types.VpcInterface
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for a flow, including its source, outputs, and
+-- entitlements.
+--
+-- /See:/ 'newFlow' smart constructor.
+data Flow = Flow'
+  { -- | A description of the flow. This value is not used or seen outside of the
+    -- current AWS Elemental MediaConnect account.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The IP address from which video will be sent to output destinations.
+    egressIp :: Prelude.Maybe Prelude.Text,
+    maintenance :: Prelude.Maybe Maintenance,
+    -- | The media streams that are associated with the flow. After you associate
+    -- a media stream with a source, you can also associate it with outputs on
+    -- the flow.
+    mediaStreams :: Prelude.Maybe [MediaStream],
+    sourceFailoverConfig :: Prelude.Maybe FailoverConfig,
+    sources :: Prelude.Maybe [Source],
+    -- | The VPC Interfaces for this flow.
+    vpcInterfaces :: Prelude.Maybe [VpcInterface],
+    -- | The current status of the flow.
+    status :: Status,
+    -- | The entitlements in this flow.
+    entitlements :: [Entitlement],
+    -- | The outputs in this flow.
+    outputs :: [Output],
+    -- | The Availability Zone that you want to create the flow in. These options
+    -- are limited to the Availability Zones within the current AWS.
+    availabilityZone :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN), a unique identifier for any AWS
+    -- resource, of the flow.
+    flowArn :: Prelude.Text,
+    source :: Source,
+    -- | The name of the flow.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Flow' 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:
+--
+-- 'description', 'flow_description' - A description of the flow. This value is not used or seen outside of the
+-- current AWS Elemental MediaConnect account.
+--
+-- 'egressIp', 'flow_egressIp' - The IP address from which video will be sent to output destinations.
+--
+-- 'maintenance', 'flow_maintenance' - Undocumented member.
+--
+-- 'mediaStreams', 'flow_mediaStreams' - The media streams that are associated with the flow. After you associate
+-- a media stream with a source, you can also associate it with outputs on
+-- the flow.
+--
+-- 'sourceFailoverConfig', 'flow_sourceFailoverConfig' - Undocumented member.
+--
+-- 'sources', 'flow_sources' - Undocumented member.
+--
+-- 'vpcInterfaces', 'flow_vpcInterfaces' - The VPC Interfaces for this flow.
+--
+-- 'status', 'flow_status' - The current status of the flow.
+--
+-- 'entitlements', 'flow_entitlements' - The entitlements in this flow.
+--
+-- 'outputs', 'flow_outputs' - The outputs in this flow.
+--
+-- 'availabilityZone', 'flow_availabilityZone' - The Availability Zone that you want to create the flow in. These options
+-- are limited to the Availability Zones within the current AWS.
+--
+-- 'flowArn', 'flow_flowArn' - The Amazon Resource Name (ARN), a unique identifier for any AWS
+-- resource, of the flow.
+--
+-- 'source', 'flow_source' - Undocumented member.
+--
+-- 'name', 'flow_name' - The name of the flow.
+newFlow ::
+  -- | 'status'
+  Status ->
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'source'
+  Source ->
+  -- | 'name'
+  Prelude.Text ->
+  Flow
+newFlow
+  pStatus_
+  pAvailabilityZone_
+  pFlowArn_
+  pSource_
+  pName_ =
+    Flow'
+      { description = Prelude.Nothing,
+        egressIp = Prelude.Nothing,
+        maintenance = Prelude.Nothing,
+        mediaStreams = Prelude.Nothing,
+        sourceFailoverConfig = Prelude.Nothing,
+        sources = Prelude.Nothing,
+        vpcInterfaces = Prelude.Nothing,
+        status = pStatus_,
+        entitlements = Prelude.mempty,
+        outputs = Prelude.mempty,
+        availabilityZone = pAvailabilityZone_,
+        flowArn = pFlowArn_,
+        source = pSource_,
+        name = pName_
+      }
+
+-- | A description of the flow. This value is not used or seen outside of the
+-- current AWS Elemental MediaConnect account.
+flow_description :: Lens.Lens' Flow (Prelude.Maybe Prelude.Text)
+flow_description = Lens.lens (\Flow' {description} -> description) (\s@Flow' {} a -> s {description = a} :: Flow)
+
+-- | The IP address from which video will be sent to output destinations.
+flow_egressIp :: Lens.Lens' Flow (Prelude.Maybe Prelude.Text)
+flow_egressIp = Lens.lens (\Flow' {egressIp} -> egressIp) (\s@Flow' {} a -> s {egressIp = a} :: Flow)
+
+-- | Undocumented member.
+flow_maintenance :: Lens.Lens' Flow (Prelude.Maybe Maintenance)
+flow_maintenance = Lens.lens (\Flow' {maintenance} -> maintenance) (\s@Flow' {} a -> s {maintenance = a} :: Flow)
+
+-- | The media streams that are associated with the flow. After you associate
+-- a media stream with a source, you can also associate it with outputs on
+-- the flow.
+flow_mediaStreams :: Lens.Lens' Flow (Prelude.Maybe [MediaStream])
+flow_mediaStreams = Lens.lens (\Flow' {mediaStreams} -> mediaStreams) (\s@Flow' {} a -> s {mediaStreams = a} :: Flow) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+flow_sourceFailoverConfig :: Lens.Lens' Flow (Prelude.Maybe FailoverConfig)
+flow_sourceFailoverConfig = Lens.lens (\Flow' {sourceFailoverConfig} -> sourceFailoverConfig) (\s@Flow' {} a -> s {sourceFailoverConfig = a} :: Flow)
+
+-- | Undocumented member.
+flow_sources :: Lens.Lens' Flow (Prelude.Maybe [Source])
+flow_sources = Lens.lens (\Flow' {sources} -> sources) (\s@Flow' {} a -> s {sources = a} :: Flow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC Interfaces for this flow.
+flow_vpcInterfaces :: Lens.Lens' Flow (Prelude.Maybe [VpcInterface])
+flow_vpcInterfaces = Lens.lens (\Flow' {vpcInterfaces} -> vpcInterfaces) (\s@Flow' {} a -> s {vpcInterfaces = a} :: Flow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current status of the flow.
+flow_status :: Lens.Lens' Flow Status
+flow_status = Lens.lens (\Flow' {status} -> status) (\s@Flow' {} a -> s {status = a} :: Flow)
+
+-- | The entitlements in this flow.
+flow_entitlements :: Lens.Lens' Flow [Entitlement]
+flow_entitlements = Lens.lens (\Flow' {entitlements} -> entitlements) (\s@Flow' {} a -> s {entitlements = a} :: Flow) Prelude.. Lens.coerced
+
+-- | The outputs in this flow.
+flow_outputs :: Lens.Lens' Flow [Output]
+flow_outputs = Lens.lens (\Flow' {outputs} -> outputs) (\s@Flow' {} a -> s {outputs = a} :: Flow) Prelude.. Lens.coerced
+
+-- | The Availability Zone that you want to create the flow in. These options
+-- are limited to the Availability Zones within the current AWS.
+flow_availabilityZone :: Lens.Lens' Flow Prelude.Text
+flow_availabilityZone = Lens.lens (\Flow' {availabilityZone} -> availabilityZone) (\s@Flow' {} a -> s {availabilityZone = a} :: Flow)
+
+-- | The Amazon Resource Name (ARN), a unique identifier for any AWS
+-- resource, of the flow.
+flow_flowArn :: Lens.Lens' Flow Prelude.Text
+flow_flowArn = Lens.lens (\Flow' {flowArn} -> flowArn) (\s@Flow' {} a -> s {flowArn = a} :: Flow)
+
+-- | Undocumented member.
+flow_source :: Lens.Lens' Flow Source
+flow_source = Lens.lens (\Flow' {source} -> source) (\s@Flow' {} a -> s {source = a} :: Flow)
+
+-- | The name of the flow.
+flow_name :: Lens.Lens' Flow Prelude.Text
+flow_name = Lens.lens (\Flow' {name} -> name) (\s@Flow' {} a -> s {name = a} :: Flow)
+
+instance Data.FromJSON Flow where
+  parseJSON =
+    Data.withObject
+      "Flow"
+      ( \x ->
+          Flow'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "egressIp")
+            Prelude.<*> (x Data..:? "maintenance")
+            Prelude.<*> (x Data..:? "mediaStreams" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "sourceFailoverConfig")
+            Prelude.<*> (x Data..:? "sources" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "vpcInterfaces" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..:? "entitlements" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "outputs" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "availabilityZone")
+            Prelude.<*> (x Data..: "flowArn")
+            Prelude.<*> (x Data..: "source")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable Flow where
+  hashWithSalt _salt Flow' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` egressIp
+      `Prelude.hashWithSalt` maintenance
+      `Prelude.hashWithSalt` mediaStreams
+      `Prelude.hashWithSalt` sourceFailoverConfig
+      `Prelude.hashWithSalt` sources
+      `Prelude.hashWithSalt` vpcInterfaces
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` entitlements
+      `Prelude.hashWithSalt` outputs
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Flow where
+  rnf Flow' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf egressIp
+      `Prelude.seq` Prelude.rnf maintenance
+      `Prelude.seq` Prelude.rnf mediaStreams
+      `Prelude.seq` Prelude.rnf sourceFailoverConfig
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf vpcInterfaces
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf entitlements
+      `Prelude.seq` Prelude.rnf outputs
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MediaConnect/Types/Fmtp.hs b/gen/Amazonka/MediaConnect/Types/Fmtp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Fmtp.hs
@@ -0,0 +1,157 @@
+{-# 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.MediaConnect.Types.Fmtp
+-- 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.MediaConnect.Types.Fmtp where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Colorimetry
+import Amazonka.MediaConnect.Types.Range
+import Amazonka.MediaConnect.Types.ScanMode
+import Amazonka.MediaConnect.Types.Tcs
+import qualified Amazonka.Prelude as Prelude
+
+-- | FMTP
+--
+-- /See:/ 'newFmtp' smart constructor.
+data Fmtp = Fmtp'
+  { -- | The format of the audio channel.
+    channelOrder :: Prelude.Maybe Prelude.Text,
+    -- | The format that is used for the representation of color.
+    colorimetry :: Prelude.Maybe Colorimetry,
+    -- | The frame rate for the video stream, in frames\/second. For example:
+    -- 60000\/1001. If you specify a whole number, MediaConnect uses a ratio of
+    -- N\/1. For example, if you specify 60, MediaConnect uses 60\/1 as the
+    -- exactFramerate.
+    exactFramerate :: Prelude.Maybe Prelude.Text,
+    -- | The pixel aspect ratio (PAR) of the video.
+    par :: Prelude.Maybe Prelude.Text,
+    -- | The encoding range of the video.
+    range :: Prelude.Maybe Range,
+    -- | The type of compression that was used to smooth the video’s appearance
+    scanMode :: Prelude.Maybe ScanMode,
+    -- | The transfer characteristic system (TCS) that is used in the video.
+    tcs :: Prelude.Maybe Tcs
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Fmtp' 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:
+--
+-- 'channelOrder', 'fmtp_channelOrder' - The format of the audio channel.
+--
+-- 'colorimetry', 'fmtp_colorimetry' - The format that is used for the representation of color.
+--
+-- 'exactFramerate', 'fmtp_exactFramerate' - The frame rate for the video stream, in frames\/second. For example:
+-- 60000\/1001. If you specify a whole number, MediaConnect uses a ratio of
+-- N\/1. For example, if you specify 60, MediaConnect uses 60\/1 as the
+-- exactFramerate.
+--
+-- 'par', 'fmtp_par' - The pixel aspect ratio (PAR) of the video.
+--
+-- 'range', 'fmtp_range' - The encoding range of the video.
+--
+-- 'scanMode', 'fmtp_scanMode' - The type of compression that was used to smooth the video’s appearance
+--
+-- 'tcs', 'fmtp_tcs' - The transfer characteristic system (TCS) that is used in the video.
+newFmtp ::
+  Fmtp
+newFmtp =
+  Fmtp'
+    { channelOrder = Prelude.Nothing,
+      colorimetry = Prelude.Nothing,
+      exactFramerate = Prelude.Nothing,
+      par = Prelude.Nothing,
+      range = Prelude.Nothing,
+      scanMode = Prelude.Nothing,
+      tcs = Prelude.Nothing
+    }
+
+-- | The format of the audio channel.
+fmtp_channelOrder :: Lens.Lens' Fmtp (Prelude.Maybe Prelude.Text)
+fmtp_channelOrder = Lens.lens (\Fmtp' {channelOrder} -> channelOrder) (\s@Fmtp' {} a -> s {channelOrder = a} :: Fmtp)
+
+-- | The format that is used for the representation of color.
+fmtp_colorimetry :: Lens.Lens' Fmtp (Prelude.Maybe Colorimetry)
+fmtp_colorimetry = Lens.lens (\Fmtp' {colorimetry} -> colorimetry) (\s@Fmtp' {} a -> s {colorimetry = a} :: Fmtp)
+
+-- | The frame rate for the video stream, in frames\/second. For example:
+-- 60000\/1001. If you specify a whole number, MediaConnect uses a ratio of
+-- N\/1. For example, if you specify 60, MediaConnect uses 60\/1 as the
+-- exactFramerate.
+fmtp_exactFramerate :: Lens.Lens' Fmtp (Prelude.Maybe Prelude.Text)
+fmtp_exactFramerate = Lens.lens (\Fmtp' {exactFramerate} -> exactFramerate) (\s@Fmtp' {} a -> s {exactFramerate = a} :: Fmtp)
+
+-- | The pixel aspect ratio (PAR) of the video.
+fmtp_par :: Lens.Lens' Fmtp (Prelude.Maybe Prelude.Text)
+fmtp_par = Lens.lens (\Fmtp' {par} -> par) (\s@Fmtp' {} a -> s {par = a} :: Fmtp)
+
+-- | The encoding range of the video.
+fmtp_range :: Lens.Lens' Fmtp (Prelude.Maybe Range)
+fmtp_range = Lens.lens (\Fmtp' {range} -> range) (\s@Fmtp' {} a -> s {range = a} :: Fmtp)
+
+-- | The type of compression that was used to smooth the video’s appearance
+fmtp_scanMode :: Lens.Lens' Fmtp (Prelude.Maybe ScanMode)
+fmtp_scanMode = Lens.lens (\Fmtp' {scanMode} -> scanMode) (\s@Fmtp' {} a -> s {scanMode = a} :: Fmtp)
+
+-- | The transfer characteristic system (TCS) that is used in the video.
+fmtp_tcs :: Lens.Lens' Fmtp (Prelude.Maybe Tcs)
+fmtp_tcs = Lens.lens (\Fmtp' {tcs} -> tcs) (\s@Fmtp' {} a -> s {tcs = a} :: Fmtp)
+
+instance Data.FromJSON Fmtp where
+  parseJSON =
+    Data.withObject
+      "Fmtp"
+      ( \x ->
+          Fmtp'
+            Prelude.<$> (x Data..:? "channelOrder")
+            Prelude.<*> (x Data..:? "colorimetry")
+            Prelude.<*> (x Data..:? "exactFramerate")
+            Prelude.<*> (x Data..:? "par")
+            Prelude.<*> (x Data..:? "range")
+            Prelude.<*> (x Data..:? "scanMode")
+            Prelude.<*> (x Data..:? "tcs")
+      )
+
+instance Prelude.Hashable Fmtp where
+  hashWithSalt _salt Fmtp' {..} =
+    _salt
+      `Prelude.hashWithSalt` channelOrder
+      `Prelude.hashWithSalt` colorimetry
+      `Prelude.hashWithSalt` exactFramerate
+      `Prelude.hashWithSalt` par
+      `Prelude.hashWithSalt` range
+      `Prelude.hashWithSalt` scanMode
+      `Prelude.hashWithSalt` tcs
+
+instance Prelude.NFData Fmtp where
+  rnf Fmtp' {..} =
+    Prelude.rnf channelOrder
+      `Prelude.seq` Prelude.rnf colorimetry
+      `Prelude.seq` Prelude.rnf exactFramerate
+      `Prelude.seq` Prelude.rnf par
+      `Prelude.seq` Prelude.rnf range
+      `Prelude.seq` Prelude.rnf scanMode
+      `Prelude.seq` Prelude.rnf tcs
diff --git a/gen/Amazonka/MediaConnect/Types/FmtpRequest.hs b/gen/Amazonka/MediaConnect/Types/FmtpRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/FmtpRequest.hs
@@ -0,0 +1,157 @@
+{-# 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.MediaConnect.Types.FmtpRequest
+-- 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.MediaConnect.Types.FmtpRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Colorimetry
+import Amazonka.MediaConnect.Types.Range
+import Amazonka.MediaConnect.Types.ScanMode
+import Amazonka.MediaConnect.Types.Tcs
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings that you want to use to define the media stream.
+--
+-- /See:/ 'newFmtpRequest' smart constructor.
+data FmtpRequest = FmtpRequest'
+  { -- | The format of the audio channel.
+    channelOrder :: Prelude.Maybe Prelude.Text,
+    -- | The format that is used for the representation of color.
+    colorimetry :: Prelude.Maybe Colorimetry,
+    -- | The frame rate for the video stream, in frames\/second. For example:
+    -- 60000\/1001. If you specify a whole number, MediaConnect uses a ratio of
+    -- N\/1. For example, if you specify 60, MediaConnect uses 60\/1 as the
+    -- exactFramerate.
+    exactFramerate :: Prelude.Maybe Prelude.Text,
+    -- | The pixel aspect ratio (PAR) of the video.
+    par :: Prelude.Maybe Prelude.Text,
+    -- | The encoding range of the video.
+    range :: Prelude.Maybe Range,
+    -- | The type of compression that was used to smooth the video’s appearance.
+    scanMode :: Prelude.Maybe ScanMode,
+    -- | The transfer characteristic system (TCS) that is used in the video.
+    tcs :: Prelude.Maybe Tcs
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FmtpRequest' 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:
+--
+-- 'channelOrder', 'fmtpRequest_channelOrder' - The format of the audio channel.
+--
+-- 'colorimetry', 'fmtpRequest_colorimetry' - The format that is used for the representation of color.
+--
+-- 'exactFramerate', 'fmtpRequest_exactFramerate' - The frame rate for the video stream, in frames\/second. For example:
+-- 60000\/1001. If you specify a whole number, MediaConnect uses a ratio of
+-- N\/1. For example, if you specify 60, MediaConnect uses 60\/1 as the
+-- exactFramerate.
+--
+-- 'par', 'fmtpRequest_par' - The pixel aspect ratio (PAR) of the video.
+--
+-- 'range', 'fmtpRequest_range' - The encoding range of the video.
+--
+-- 'scanMode', 'fmtpRequest_scanMode' - The type of compression that was used to smooth the video’s appearance.
+--
+-- 'tcs', 'fmtpRequest_tcs' - The transfer characteristic system (TCS) that is used in the video.
+newFmtpRequest ::
+  FmtpRequest
+newFmtpRequest =
+  FmtpRequest'
+    { channelOrder = Prelude.Nothing,
+      colorimetry = Prelude.Nothing,
+      exactFramerate = Prelude.Nothing,
+      par = Prelude.Nothing,
+      range = Prelude.Nothing,
+      scanMode = Prelude.Nothing,
+      tcs = Prelude.Nothing
+    }
+
+-- | The format of the audio channel.
+fmtpRequest_channelOrder :: Lens.Lens' FmtpRequest (Prelude.Maybe Prelude.Text)
+fmtpRequest_channelOrder = Lens.lens (\FmtpRequest' {channelOrder} -> channelOrder) (\s@FmtpRequest' {} a -> s {channelOrder = a} :: FmtpRequest)
+
+-- | The format that is used for the representation of color.
+fmtpRequest_colorimetry :: Lens.Lens' FmtpRequest (Prelude.Maybe Colorimetry)
+fmtpRequest_colorimetry = Lens.lens (\FmtpRequest' {colorimetry} -> colorimetry) (\s@FmtpRequest' {} a -> s {colorimetry = a} :: FmtpRequest)
+
+-- | The frame rate for the video stream, in frames\/second. For example:
+-- 60000\/1001. If you specify a whole number, MediaConnect uses a ratio of
+-- N\/1. For example, if you specify 60, MediaConnect uses 60\/1 as the
+-- exactFramerate.
+fmtpRequest_exactFramerate :: Lens.Lens' FmtpRequest (Prelude.Maybe Prelude.Text)
+fmtpRequest_exactFramerate = Lens.lens (\FmtpRequest' {exactFramerate} -> exactFramerate) (\s@FmtpRequest' {} a -> s {exactFramerate = a} :: FmtpRequest)
+
+-- | The pixel aspect ratio (PAR) of the video.
+fmtpRequest_par :: Lens.Lens' FmtpRequest (Prelude.Maybe Prelude.Text)
+fmtpRequest_par = Lens.lens (\FmtpRequest' {par} -> par) (\s@FmtpRequest' {} a -> s {par = a} :: FmtpRequest)
+
+-- | The encoding range of the video.
+fmtpRequest_range :: Lens.Lens' FmtpRequest (Prelude.Maybe Range)
+fmtpRequest_range = Lens.lens (\FmtpRequest' {range} -> range) (\s@FmtpRequest' {} a -> s {range = a} :: FmtpRequest)
+
+-- | The type of compression that was used to smooth the video’s appearance.
+fmtpRequest_scanMode :: Lens.Lens' FmtpRequest (Prelude.Maybe ScanMode)
+fmtpRequest_scanMode = Lens.lens (\FmtpRequest' {scanMode} -> scanMode) (\s@FmtpRequest' {} a -> s {scanMode = a} :: FmtpRequest)
+
+-- | The transfer characteristic system (TCS) that is used in the video.
+fmtpRequest_tcs :: Lens.Lens' FmtpRequest (Prelude.Maybe Tcs)
+fmtpRequest_tcs = Lens.lens (\FmtpRequest' {tcs} -> tcs) (\s@FmtpRequest' {} a -> s {tcs = a} :: FmtpRequest)
+
+instance Prelude.Hashable FmtpRequest where
+  hashWithSalt _salt FmtpRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` channelOrder
+      `Prelude.hashWithSalt` colorimetry
+      `Prelude.hashWithSalt` exactFramerate
+      `Prelude.hashWithSalt` par
+      `Prelude.hashWithSalt` range
+      `Prelude.hashWithSalt` scanMode
+      `Prelude.hashWithSalt` tcs
+
+instance Prelude.NFData FmtpRequest where
+  rnf FmtpRequest' {..} =
+    Prelude.rnf channelOrder
+      `Prelude.seq` Prelude.rnf colorimetry
+      `Prelude.seq` Prelude.rnf exactFramerate
+      `Prelude.seq` Prelude.rnf par
+      `Prelude.seq` Prelude.rnf range
+      `Prelude.seq` Prelude.rnf scanMode
+      `Prelude.seq` Prelude.rnf tcs
+
+instance Data.ToJSON FmtpRequest where
+  toJSON FmtpRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("channelOrder" Data..=) Prelude.<$> channelOrder,
+            ("colorimetry" Data..=) Prelude.<$> colorimetry,
+            ("exactFramerate" Data..=)
+              Prelude.<$> exactFramerate,
+            ("par" Data..=) Prelude.<$> par,
+            ("range" Data..=) Prelude.<$> range,
+            ("scanMode" Data..=) Prelude.<$> scanMode,
+            ("tcs" Data..=) Prelude.<$> tcs
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/GrantEntitlementRequest.hs b/gen/Amazonka/MediaConnect/Types/GrantEntitlementRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/GrantEntitlementRequest.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.GrantEntitlementRequest
+-- 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.MediaConnect.Types.GrantEntitlementRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.EntitlementStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The entitlements that you want to grant on a flow.
+--
+-- /See:/ 'newGrantEntitlementRequest' smart constructor.
+data GrantEntitlementRequest = GrantEntitlementRequest'
+  { -- | Percentage from 0-100 of the data transfer cost to be billed to the
+    -- subscriber.
+    dataTransferSubscriberFeePercent :: Prelude.Maybe Prelude.Int,
+    -- | A description of the entitlement. This description appears only on the
+    -- AWS Elemental MediaConnect console and will not be seen by the
+    -- subscriber or end user.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of encryption that will be used on the output that is
+    -- associated with this entitlement.
+    encryption :: Prelude.Maybe Encryption,
+    -- | An indication of whether the new entitlement should be enabled or
+    -- disabled as soon as it is created. If you don’t specify the
+    -- entitlementStatus field in your request, MediaConnect sets it to
+    -- ENABLED.
+    entitlementStatus :: Prelude.Maybe EntitlementStatus,
+    -- | The name of the entitlement. This value must be unique within the
+    -- current flow.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The AWS account IDs that you want to share your content with. The
+    -- receiving accounts (subscribers) will be allowed to create their own
+    -- flows using your content as the source.
+    subscribers :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GrantEntitlementRequest' 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:
+--
+-- 'dataTransferSubscriberFeePercent', 'grantEntitlementRequest_dataTransferSubscriberFeePercent' - Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+--
+-- 'description', 'grantEntitlementRequest_description' - A description of the entitlement. This description appears only on the
+-- AWS Elemental MediaConnect console and will not be seen by the
+-- subscriber or end user.
+--
+-- 'encryption', 'grantEntitlementRequest_encryption' - The type of encryption that will be used on the output that is
+-- associated with this entitlement.
+--
+-- 'entitlementStatus', 'grantEntitlementRequest_entitlementStatus' - An indication of whether the new entitlement should be enabled or
+-- disabled as soon as it is created. If you don’t specify the
+-- entitlementStatus field in your request, MediaConnect sets it to
+-- ENABLED.
+--
+-- 'name', 'grantEntitlementRequest_name' - The name of the entitlement. This value must be unique within the
+-- current flow.
+--
+-- 'subscribers', 'grantEntitlementRequest_subscribers' - The AWS account IDs that you want to share your content with. The
+-- receiving accounts (subscribers) will be allowed to create their own
+-- flows using your content as the source.
+newGrantEntitlementRequest ::
+  GrantEntitlementRequest
+newGrantEntitlementRequest =
+  GrantEntitlementRequest'
+    { dataTransferSubscriberFeePercent =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      encryption = Prelude.Nothing,
+      entitlementStatus = Prelude.Nothing,
+      name = Prelude.Nothing,
+      subscribers = Prelude.mempty
+    }
+
+-- | Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+grantEntitlementRequest_dataTransferSubscriberFeePercent :: Lens.Lens' GrantEntitlementRequest (Prelude.Maybe Prelude.Int)
+grantEntitlementRequest_dataTransferSubscriberFeePercent = Lens.lens (\GrantEntitlementRequest' {dataTransferSubscriberFeePercent} -> dataTransferSubscriberFeePercent) (\s@GrantEntitlementRequest' {} a -> s {dataTransferSubscriberFeePercent = a} :: GrantEntitlementRequest)
+
+-- | A description of the entitlement. This description appears only on the
+-- AWS Elemental MediaConnect console and will not be seen by the
+-- subscriber or end user.
+grantEntitlementRequest_description :: Lens.Lens' GrantEntitlementRequest (Prelude.Maybe Prelude.Text)
+grantEntitlementRequest_description = Lens.lens (\GrantEntitlementRequest' {description} -> description) (\s@GrantEntitlementRequest' {} a -> s {description = a} :: GrantEntitlementRequest)
+
+-- | The type of encryption that will be used on the output that is
+-- associated with this entitlement.
+grantEntitlementRequest_encryption :: Lens.Lens' GrantEntitlementRequest (Prelude.Maybe Encryption)
+grantEntitlementRequest_encryption = Lens.lens (\GrantEntitlementRequest' {encryption} -> encryption) (\s@GrantEntitlementRequest' {} a -> s {encryption = a} :: GrantEntitlementRequest)
+
+-- | An indication of whether the new entitlement should be enabled or
+-- disabled as soon as it is created. If you don’t specify the
+-- entitlementStatus field in your request, MediaConnect sets it to
+-- ENABLED.
+grantEntitlementRequest_entitlementStatus :: Lens.Lens' GrantEntitlementRequest (Prelude.Maybe EntitlementStatus)
+grantEntitlementRequest_entitlementStatus = Lens.lens (\GrantEntitlementRequest' {entitlementStatus} -> entitlementStatus) (\s@GrantEntitlementRequest' {} a -> s {entitlementStatus = a} :: GrantEntitlementRequest)
+
+-- | The name of the entitlement. This value must be unique within the
+-- current flow.
+grantEntitlementRequest_name :: Lens.Lens' GrantEntitlementRequest (Prelude.Maybe Prelude.Text)
+grantEntitlementRequest_name = Lens.lens (\GrantEntitlementRequest' {name} -> name) (\s@GrantEntitlementRequest' {} a -> s {name = a} :: GrantEntitlementRequest)
+
+-- | The AWS account IDs that you want to share your content with. The
+-- receiving accounts (subscribers) will be allowed to create their own
+-- flows using your content as the source.
+grantEntitlementRequest_subscribers :: Lens.Lens' GrantEntitlementRequest [Prelude.Text]
+grantEntitlementRequest_subscribers = Lens.lens (\GrantEntitlementRequest' {subscribers} -> subscribers) (\s@GrantEntitlementRequest' {} a -> s {subscribers = a} :: GrantEntitlementRequest) Prelude.. Lens.coerced
+
+instance Prelude.Hashable GrantEntitlementRequest where
+  hashWithSalt _salt GrantEntitlementRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTransferSubscriberFeePercent
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` entitlementStatus
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` subscribers
+
+instance Prelude.NFData GrantEntitlementRequest where
+  rnf GrantEntitlementRequest' {..} =
+    Prelude.rnf dataTransferSubscriberFeePercent
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf entitlementStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf subscribers
+
+instance Data.ToJSON GrantEntitlementRequest where
+  toJSON GrantEntitlementRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dataTransferSubscriberFeePercent" Data..=)
+              Prelude.<$> dataTransferSubscriberFeePercent,
+            ("description" Data..=) Prelude.<$> description,
+            ("encryption" Data..=) Prelude.<$> encryption,
+            ("entitlementStatus" Data..=)
+              Prelude.<$> entitlementStatus,
+            ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("subscribers" Data..= subscribers)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/InputConfiguration.hs b/gen/Amazonka/MediaConnect/Types/InputConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/InputConfiguration.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.MediaConnect.Types.InputConfiguration
+-- 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.MediaConnect.Types.InputConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Interface
+import qualified Amazonka.Prelude as Prelude
+
+-- | The transport parameters that are associated with an incoming media
+-- stream.
+--
+-- /See:/ 'newInputConfiguration' smart constructor.
+data InputConfiguration = InputConfiguration'
+  { -- | The port that the flow listens on for an incoming media stream.
+    inputPort :: Prelude.Int,
+    -- | The IP address that the flow listens on for incoming content for a media
+    -- stream.
+    inputIp :: Prelude.Text,
+    -- | The VPC interface where the media stream comes in from.
+    interface :: Interface
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputConfiguration' 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:
+--
+-- 'inputPort', 'inputConfiguration_inputPort' - The port that the flow listens on for an incoming media stream.
+--
+-- 'inputIp', 'inputConfiguration_inputIp' - The IP address that the flow listens on for incoming content for a media
+-- stream.
+--
+-- 'interface', 'inputConfiguration_interface' - The VPC interface where the media stream comes in from.
+newInputConfiguration ::
+  -- | 'inputPort'
+  Prelude.Int ->
+  -- | 'inputIp'
+  Prelude.Text ->
+  -- | 'interface'
+  Interface ->
+  InputConfiguration
+newInputConfiguration
+  pInputPort_
+  pInputIp_
+  pInterface_ =
+    InputConfiguration'
+      { inputPort = pInputPort_,
+        inputIp = pInputIp_,
+        interface = pInterface_
+      }
+
+-- | The port that the flow listens on for an incoming media stream.
+inputConfiguration_inputPort :: Lens.Lens' InputConfiguration Prelude.Int
+inputConfiguration_inputPort = Lens.lens (\InputConfiguration' {inputPort} -> inputPort) (\s@InputConfiguration' {} a -> s {inputPort = a} :: InputConfiguration)
+
+-- | The IP address that the flow listens on for incoming content for a media
+-- stream.
+inputConfiguration_inputIp :: Lens.Lens' InputConfiguration Prelude.Text
+inputConfiguration_inputIp = Lens.lens (\InputConfiguration' {inputIp} -> inputIp) (\s@InputConfiguration' {} a -> s {inputIp = a} :: InputConfiguration)
+
+-- | The VPC interface where the media stream comes in from.
+inputConfiguration_interface :: Lens.Lens' InputConfiguration Interface
+inputConfiguration_interface = Lens.lens (\InputConfiguration' {interface} -> interface) (\s@InputConfiguration' {} a -> s {interface = a} :: InputConfiguration)
+
+instance Data.FromJSON InputConfiguration where
+  parseJSON =
+    Data.withObject
+      "InputConfiguration"
+      ( \x ->
+          InputConfiguration'
+            Prelude.<$> (x Data..: "inputPort")
+            Prelude.<*> (x Data..: "inputIp")
+            Prelude.<*> (x Data..: "interface")
+      )
+
+instance Prelude.Hashable InputConfiguration where
+  hashWithSalt _salt InputConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputPort
+      `Prelude.hashWithSalt` inputIp
+      `Prelude.hashWithSalt` interface
+
+instance Prelude.NFData InputConfiguration where
+  rnf InputConfiguration' {..} =
+    Prelude.rnf inputPort
+      `Prelude.seq` Prelude.rnf inputIp
+      `Prelude.seq` Prelude.rnf interface
diff --git a/gen/Amazonka/MediaConnect/Types/InputConfigurationRequest.hs b/gen/Amazonka/MediaConnect/Types/InputConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/InputConfigurationRequest.hs
@@ -0,0 +1,92 @@
+{-# 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.MediaConnect.Types.InputConfigurationRequest
+-- 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.MediaConnect.Types.InputConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.InterfaceRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | The transport parameters that you want to associate with an incoming
+-- media stream.
+--
+-- /See:/ 'newInputConfigurationRequest' smart constructor.
+data InputConfigurationRequest = InputConfigurationRequest'
+  { -- | The port that you want the flow to listen on for an incoming media
+    -- stream.
+    inputPort :: Prelude.Int,
+    -- | The VPC interface that you want to use for the incoming media stream.
+    interface :: InterfaceRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputConfigurationRequest' 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:
+--
+-- 'inputPort', 'inputConfigurationRequest_inputPort' - The port that you want the flow to listen on for an incoming media
+-- stream.
+--
+-- 'interface', 'inputConfigurationRequest_interface' - The VPC interface that you want to use for the incoming media stream.
+newInputConfigurationRequest ::
+  -- | 'inputPort'
+  Prelude.Int ->
+  -- | 'interface'
+  InterfaceRequest ->
+  InputConfigurationRequest
+newInputConfigurationRequest pInputPort_ pInterface_ =
+  InputConfigurationRequest'
+    { inputPort = pInputPort_,
+      interface = pInterface_
+    }
+
+-- | The port that you want the flow to listen on for an incoming media
+-- stream.
+inputConfigurationRequest_inputPort :: Lens.Lens' InputConfigurationRequest Prelude.Int
+inputConfigurationRequest_inputPort = Lens.lens (\InputConfigurationRequest' {inputPort} -> inputPort) (\s@InputConfigurationRequest' {} a -> s {inputPort = a} :: InputConfigurationRequest)
+
+-- | The VPC interface that you want to use for the incoming media stream.
+inputConfigurationRequest_interface :: Lens.Lens' InputConfigurationRequest InterfaceRequest
+inputConfigurationRequest_interface = Lens.lens (\InputConfigurationRequest' {interface} -> interface) (\s@InputConfigurationRequest' {} a -> s {interface = a} :: InputConfigurationRequest)
+
+instance Prelude.Hashable InputConfigurationRequest where
+  hashWithSalt _salt InputConfigurationRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputPort
+      `Prelude.hashWithSalt` interface
+
+instance Prelude.NFData InputConfigurationRequest where
+  rnf InputConfigurationRequest' {..} =
+    Prelude.rnf inputPort
+      `Prelude.seq` Prelude.rnf interface
+
+instance Data.ToJSON InputConfigurationRequest where
+  toJSON InputConfigurationRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("inputPort" Data..= inputPort),
+            Prelude.Just ("interface" Data..= interface)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/Interface.hs b/gen/Amazonka/MediaConnect/Types/Interface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Interface.hs
@@ -0,0 +1,67 @@
+{-# 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.MediaConnect.Types.Interface
+-- 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.MediaConnect.Types.Interface 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 VPC interface that is used for the media stream associated with the
+-- source or output.
+--
+-- /See:/ 'newInterface' smart constructor.
+data Interface = Interface'
+  { -- | The name of the VPC interface.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Interface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'interface_name' - The name of the VPC interface.
+newInterface ::
+  -- | 'name'
+  Prelude.Text ->
+  Interface
+newInterface pName_ = Interface' {name = pName_}
+
+-- | The name of the VPC interface.
+interface_name :: Lens.Lens' Interface Prelude.Text
+interface_name = Lens.lens (\Interface' {name} -> name) (\s@Interface' {} a -> s {name = a} :: Interface)
+
+instance Data.FromJSON Interface where
+  parseJSON =
+    Data.withObject
+      "Interface"
+      (\x -> Interface' Prelude.<$> (x Data..: "name"))
+
+instance Prelude.Hashable Interface where
+  hashWithSalt _salt Interface' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Interface where
+  rnf Interface' {..} = Prelude.rnf name
diff --git a/gen/Amazonka/MediaConnect/Types/InterfaceRequest.hs b/gen/Amazonka/MediaConnect/Types/InterfaceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/InterfaceRequest.hs
@@ -0,0 +1,69 @@
+{-# 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.MediaConnect.Types.InterfaceRequest
+-- 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.MediaConnect.Types.InterfaceRequest 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 VPC interface that you want to designate where the media stream is
+-- coming from or going to.
+--
+-- /See:/ 'newInterfaceRequest' smart constructor.
+data InterfaceRequest = InterfaceRequest'
+  { -- | The name of the VPC interface.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InterfaceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'interfaceRequest_name' - The name of the VPC interface.
+newInterfaceRequest ::
+  -- | 'name'
+  Prelude.Text ->
+  InterfaceRequest
+newInterfaceRequest pName_ =
+  InterfaceRequest' {name = pName_}
+
+-- | The name of the VPC interface.
+interfaceRequest_name :: Lens.Lens' InterfaceRequest Prelude.Text
+interfaceRequest_name = Lens.lens (\InterfaceRequest' {name} -> name) (\s@InterfaceRequest' {} a -> s {name = a} :: InterfaceRequest)
+
+instance Prelude.Hashable InterfaceRequest where
+  hashWithSalt _salt InterfaceRequest' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData InterfaceRequest where
+  rnf InterfaceRequest' {..} = Prelude.rnf name
+
+instance Data.ToJSON InterfaceRequest where
+  toJSON InterfaceRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/KeyType.hs b/gen/Amazonka/MediaConnect/Types/KeyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/KeyType.hs
@@ -0,0 +1,73 @@
+{-# 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.MediaConnect.Types.KeyType
+-- 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.MediaConnect.Types.KeyType
+  ( KeyType
+      ( ..,
+        KeyType_Speke,
+        KeyType_Srt_password,
+        KeyType_Static_key
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype KeyType = KeyType' {fromKeyType :: 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 KeyType_Speke :: KeyType
+pattern KeyType_Speke = KeyType' "speke"
+
+pattern KeyType_Srt_password :: KeyType
+pattern KeyType_Srt_password = KeyType' "srt-password"
+
+pattern KeyType_Static_key :: KeyType
+pattern KeyType_Static_key = KeyType' "static-key"
+
+{-# COMPLETE
+  KeyType_Speke,
+  KeyType_Srt_password,
+  KeyType_Static_key,
+  KeyType'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/ListedEntitlement.hs b/gen/Amazonka/MediaConnect/Types/ListedEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/ListedEntitlement.hs
@@ -0,0 +1,106 @@
+{-# 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.MediaConnect.Types.ListedEntitlement
+-- 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.MediaConnect.Types.ListedEntitlement 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
+
+-- | An entitlement that has been granted to you from other AWS accounts.
+--
+-- /See:/ 'newListedEntitlement' smart constructor.
+data ListedEntitlement = ListedEntitlement'
+  { -- | Percentage from 0-100 of the data transfer cost to be billed to the
+    -- subscriber.
+    dataTransferSubscriberFeePercent :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the entitlement.
+    entitlementArn :: Prelude.Text,
+    -- | The name of the entitlement.
+    entitlementName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListedEntitlement' 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:
+--
+-- 'dataTransferSubscriberFeePercent', 'listedEntitlement_dataTransferSubscriberFeePercent' - Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+--
+-- 'entitlementArn', 'listedEntitlement_entitlementArn' - The ARN of the entitlement.
+--
+-- 'entitlementName', 'listedEntitlement_entitlementName' - The name of the entitlement.
+newListedEntitlement ::
+  -- | 'entitlementArn'
+  Prelude.Text ->
+  -- | 'entitlementName'
+  Prelude.Text ->
+  ListedEntitlement
+newListedEntitlement
+  pEntitlementArn_
+  pEntitlementName_ =
+    ListedEntitlement'
+      { dataTransferSubscriberFeePercent =
+          Prelude.Nothing,
+        entitlementArn = pEntitlementArn_,
+        entitlementName = pEntitlementName_
+      }
+
+-- | Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+listedEntitlement_dataTransferSubscriberFeePercent :: Lens.Lens' ListedEntitlement (Prelude.Maybe Prelude.Int)
+listedEntitlement_dataTransferSubscriberFeePercent = Lens.lens (\ListedEntitlement' {dataTransferSubscriberFeePercent} -> dataTransferSubscriberFeePercent) (\s@ListedEntitlement' {} a -> s {dataTransferSubscriberFeePercent = a} :: ListedEntitlement)
+
+-- | The ARN of the entitlement.
+listedEntitlement_entitlementArn :: Lens.Lens' ListedEntitlement Prelude.Text
+listedEntitlement_entitlementArn = Lens.lens (\ListedEntitlement' {entitlementArn} -> entitlementArn) (\s@ListedEntitlement' {} a -> s {entitlementArn = a} :: ListedEntitlement)
+
+-- | The name of the entitlement.
+listedEntitlement_entitlementName :: Lens.Lens' ListedEntitlement Prelude.Text
+listedEntitlement_entitlementName = Lens.lens (\ListedEntitlement' {entitlementName} -> entitlementName) (\s@ListedEntitlement' {} a -> s {entitlementName = a} :: ListedEntitlement)
+
+instance Data.FromJSON ListedEntitlement where
+  parseJSON =
+    Data.withObject
+      "ListedEntitlement"
+      ( \x ->
+          ListedEntitlement'
+            Prelude.<$> (x Data..:? "dataTransferSubscriberFeePercent")
+            Prelude.<*> (x Data..: "entitlementArn")
+            Prelude.<*> (x Data..: "entitlementName")
+      )
+
+instance Prelude.Hashable ListedEntitlement where
+  hashWithSalt _salt ListedEntitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTransferSubscriberFeePercent
+      `Prelude.hashWithSalt` entitlementArn
+      `Prelude.hashWithSalt` entitlementName
+
+instance Prelude.NFData ListedEntitlement where
+  rnf ListedEntitlement' {..} =
+    Prelude.rnf dataTransferSubscriberFeePercent
+      `Prelude.seq` Prelude.rnf entitlementArn
+      `Prelude.seq` Prelude.rnf entitlementName
diff --git a/gen/Amazonka/MediaConnect/Types/ListedFlow.hs b/gen/Amazonka/MediaConnect/Types/ListedFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/ListedFlow.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.ListedFlow
+-- 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.MediaConnect.Types.ListedFlow where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Maintenance
+import Amazonka.MediaConnect.Types.SourceType
+import Amazonka.MediaConnect.Types.Status
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of a flow, including its ARN, Availability Zone, and
+-- source type.
+--
+-- /See:/ 'newListedFlow' smart constructor.
+data ListedFlow = ListedFlow'
+  { maintenance :: Prelude.Maybe Maintenance,
+    -- | The current status of the flow.
+    status :: Status,
+    -- | A description of the flow.
+    description :: Prelude.Text,
+    -- | The type of source. This value is either owned (originated somewhere
+    -- other than an AWS Elemental MediaConnect flow owned by another AWS
+    -- account) or entitled (originated at an AWS Elemental MediaConnect flow
+    -- owned by another AWS account).
+    sourceType :: SourceType,
+    -- | The Availability Zone that the flow was created in.
+    availabilityZone :: Prelude.Text,
+    -- | The ARN of the flow.
+    flowArn :: Prelude.Text,
+    -- | The name of the flow.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListedFlow' 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:
+--
+-- 'maintenance', 'listedFlow_maintenance' - Undocumented member.
+--
+-- 'status', 'listedFlow_status' - The current status of the flow.
+--
+-- 'description', 'listedFlow_description' - A description of the flow.
+--
+-- 'sourceType', 'listedFlow_sourceType' - The type of source. This value is either owned (originated somewhere
+-- other than an AWS Elemental MediaConnect flow owned by another AWS
+-- account) or entitled (originated at an AWS Elemental MediaConnect flow
+-- owned by another AWS account).
+--
+-- 'availabilityZone', 'listedFlow_availabilityZone' - The Availability Zone that the flow was created in.
+--
+-- 'flowArn', 'listedFlow_flowArn' - The ARN of the flow.
+--
+-- 'name', 'listedFlow_name' - The name of the flow.
+newListedFlow ::
+  -- | 'status'
+  Status ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'sourceType'
+  SourceType ->
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  ListedFlow
+newListedFlow
+  pStatus_
+  pDescription_
+  pSourceType_
+  pAvailabilityZone_
+  pFlowArn_
+  pName_ =
+    ListedFlow'
+      { maintenance = Prelude.Nothing,
+        status = pStatus_,
+        description = pDescription_,
+        sourceType = pSourceType_,
+        availabilityZone = pAvailabilityZone_,
+        flowArn = pFlowArn_,
+        name = pName_
+      }
+
+-- | Undocumented member.
+listedFlow_maintenance :: Lens.Lens' ListedFlow (Prelude.Maybe Maintenance)
+listedFlow_maintenance = Lens.lens (\ListedFlow' {maintenance} -> maintenance) (\s@ListedFlow' {} a -> s {maintenance = a} :: ListedFlow)
+
+-- | The current status of the flow.
+listedFlow_status :: Lens.Lens' ListedFlow Status
+listedFlow_status = Lens.lens (\ListedFlow' {status} -> status) (\s@ListedFlow' {} a -> s {status = a} :: ListedFlow)
+
+-- | A description of the flow.
+listedFlow_description :: Lens.Lens' ListedFlow Prelude.Text
+listedFlow_description = Lens.lens (\ListedFlow' {description} -> description) (\s@ListedFlow' {} a -> s {description = a} :: ListedFlow)
+
+-- | The type of source. This value is either owned (originated somewhere
+-- other than an AWS Elemental MediaConnect flow owned by another AWS
+-- account) or entitled (originated at an AWS Elemental MediaConnect flow
+-- owned by another AWS account).
+listedFlow_sourceType :: Lens.Lens' ListedFlow SourceType
+listedFlow_sourceType = Lens.lens (\ListedFlow' {sourceType} -> sourceType) (\s@ListedFlow' {} a -> s {sourceType = a} :: ListedFlow)
+
+-- | The Availability Zone that the flow was created in.
+listedFlow_availabilityZone :: Lens.Lens' ListedFlow Prelude.Text
+listedFlow_availabilityZone = Lens.lens (\ListedFlow' {availabilityZone} -> availabilityZone) (\s@ListedFlow' {} a -> s {availabilityZone = a} :: ListedFlow)
+
+-- | The ARN of the flow.
+listedFlow_flowArn :: Lens.Lens' ListedFlow Prelude.Text
+listedFlow_flowArn = Lens.lens (\ListedFlow' {flowArn} -> flowArn) (\s@ListedFlow' {} a -> s {flowArn = a} :: ListedFlow)
+
+-- | The name of the flow.
+listedFlow_name :: Lens.Lens' ListedFlow Prelude.Text
+listedFlow_name = Lens.lens (\ListedFlow' {name} -> name) (\s@ListedFlow' {} a -> s {name = a} :: ListedFlow)
+
+instance Data.FromJSON ListedFlow where
+  parseJSON =
+    Data.withObject
+      "ListedFlow"
+      ( \x ->
+          ListedFlow'
+            Prelude.<$> (x Data..:? "maintenance")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "description")
+            Prelude.<*> (x Data..: "sourceType")
+            Prelude.<*> (x Data..: "availabilityZone")
+            Prelude.<*> (x Data..: "flowArn")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable ListedFlow where
+  hashWithSalt _salt ListedFlow' {..} =
+    _salt
+      `Prelude.hashWithSalt` maintenance
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` sourceType
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ListedFlow where
+  rnf ListedFlow' {..} =
+    Prelude.rnf maintenance
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf sourceType
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MediaConnect/Types/Maintenance.hs b/gen/Amazonka/MediaConnect/Types/Maintenance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Maintenance.hs
@@ -0,0 +1,121 @@
+{-# 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.MediaConnect.Types.Maintenance
+-- 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.MediaConnect.Types.Maintenance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.MaintenanceDay
+import qualified Amazonka.Prelude as Prelude
+
+-- | The maintenance setting of a flow
+--
+-- /See:/ 'newMaintenance' smart constructor.
+data Maintenance = Maintenance'
+  { -- | A day of a week when the maintenance will happen. Use
+    -- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+    maintenanceDay :: Prelude.Maybe MaintenanceDay,
+    -- | The Maintenance has to be performed before this deadline in ISO UTC
+    -- format. Example: 2021-01-30T08:30:00Z.
+    maintenanceDeadline :: Prelude.Maybe Prelude.Text,
+    -- | A scheduled date in ISO UTC format when the maintenance will happen. Use
+    -- YYYY-MM-DD format. Example: 2021-01-30.
+    maintenanceScheduledDate :: Prelude.Maybe Prelude.Text,
+    -- | UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+    -- Minutes must be 00. Example: 13:00. The default value is 02:00.
+    maintenanceStartHour :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Maintenance' 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:
+--
+-- 'maintenanceDay', 'maintenance_maintenanceDay' - A day of a week when the maintenance will happen. Use
+-- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+--
+-- 'maintenanceDeadline', 'maintenance_maintenanceDeadline' - The Maintenance has to be performed before this deadline in ISO UTC
+-- format. Example: 2021-01-30T08:30:00Z.
+--
+-- 'maintenanceScheduledDate', 'maintenance_maintenanceScheduledDate' - A scheduled date in ISO UTC format when the maintenance will happen. Use
+-- YYYY-MM-DD format. Example: 2021-01-30.
+--
+-- 'maintenanceStartHour', 'maintenance_maintenanceStartHour' - UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+-- Minutes must be 00. Example: 13:00. The default value is 02:00.
+newMaintenance ::
+  Maintenance
+newMaintenance =
+  Maintenance'
+    { maintenanceDay = Prelude.Nothing,
+      maintenanceDeadline = Prelude.Nothing,
+      maintenanceScheduledDate = Prelude.Nothing,
+      maintenanceStartHour = Prelude.Nothing
+    }
+
+-- | A day of a week when the maintenance will happen. Use
+-- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+maintenance_maintenanceDay :: Lens.Lens' Maintenance (Prelude.Maybe MaintenanceDay)
+maintenance_maintenanceDay = Lens.lens (\Maintenance' {maintenanceDay} -> maintenanceDay) (\s@Maintenance' {} a -> s {maintenanceDay = a} :: Maintenance)
+
+-- | The Maintenance has to be performed before this deadline in ISO UTC
+-- format. Example: 2021-01-30T08:30:00Z.
+maintenance_maintenanceDeadline :: Lens.Lens' Maintenance (Prelude.Maybe Prelude.Text)
+maintenance_maintenanceDeadline = Lens.lens (\Maintenance' {maintenanceDeadline} -> maintenanceDeadline) (\s@Maintenance' {} a -> s {maintenanceDeadline = a} :: Maintenance)
+
+-- | A scheduled date in ISO UTC format when the maintenance will happen. Use
+-- YYYY-MM-DD format. Example: 2021-01-30.
+maintenance_maintenanceScheduledDate :: Lens.Lens' Maintenance (Prelude.Maybe Prelude.Text)
+maintenance_maintenanceScheduledDate = Lens.lens (\Maintenance' {maintenanceScheduledDate} -> maintenanceScheduledDate) (\s@Maintenance' {} a -> s {maintenanceScheduledDate = a} :: Maintenance)
+
+-- | UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+-- Minutes must be 00. Example: 13:00. The default value is 02:00.
+maintenance_maintenanceStartHour :: Lens.Lens' Maintenance (Prelude.Maybe Prelude.Text)
+maintenance_maintenanceStartHour = Lens.lens (\Maintenance' {maintenanceStartHour} -> maintenanceStartHour) (\s@Maintenance' {} a -> s {maintenanceStartHour = a} :: Maintenance)
+
+instance Data.FromJSON Maintenance where
+  parseJSON =
+    Data.withObject
+      "Maintenance"
+      ( \x ->
+          Maintenance'
+            Prelude.<$> (x Data..:? "maintenanceDay")
+            Prelude.<*> (x Data..:? "maintenanceDeadline")
+            Prelude.<*> (x Data..:? "maintenanceScheduledDate")
+            Prelude.<*> (x Data..:? "maintenanceStartHour")
+      )
+
+instance Prelude.Hashable Maintenance where
+  hashWithSalt _salt Maintenance' {..} =
+    _salt
+      `Prelude.hashWithSalt` maintenanceDay
+      `Prelude.hashWithSalt` maintenanceDeadline
+      `Prelude.hashWithSalt` maintenanceScheduledDate
+      `Prelude.hashWithSalt` maintenanceStartHour
+
+instance Prelude.NFData Maintenance where
+  rnf Maintenance' {..} =
+    Prelude.rnf maintenanceDay
+      `Prelude.seq` Prelude.rnf maintenanceDeadline
+      `Prelude.seq` Prelude.rnf maintenanceScheduledDate
+      `Prelude.seq` Prelude.rnf maintenanceStartHour
diff --git a/gen/Amazonka/MediaConnect/Types/MaintenanceDay.hs b/gen/Amazonka/MediaConnect/Types/MaintenanceDay.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MaintenanceDay.hs
@@ -0,0 +1,96 @@
+{-# 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.MediaConnect.Types.MaintenanceDay
+-- 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.MediaConnect.Types.MaintenanceDay
+  ( MaintenanceDay
+      ( ..,
+        MaintenanceDay_Friday,
+        MaintenanceDay_Monday,
+        MaintenanceDay_Saturday,
+        MaintenanceDay_Sunday,
+        MaintenanceDay_Thursday,
+        MaintenanceDay_Tuesday,
+        MaintenanceDay_Wednesday
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MaintenanceDay = MaintenanceDay'
+  { fromMaintenanceDay ::
+      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 MaintenanceDay_Friday :: MaintenanceDay
+pattern MaintenanceDay_Friday = MaintenanceDay' "Friday"
+
+pattern MaintenanceDay_Monday :: MaintenanceDay
+pattern MaintenanceDay_Monday = MaintenanceDay' "Monday"
+
+pattern MaintenanceDay_Saturday :: MaintenanceDay
+pattern MaintenanceDay_Saturday = MaintenanceDay' "Saturday"
+
+pattern MaintenanceDay_Sunday :: MaintenanceDay
+pattern MaintenanceDay_Sunday = MaintenanceDay' "Sunday"
+
+pattern MaintenanceDay_Thursday :: MaintenanceDay
+pattern MaintenanceDay_Thursday = MaintenanceDay' "Thursday"
+
+pattern MaintenanceDay_Tuesday :: MaintenanceDay
+pattern MaintenanceDay_Tuesday = MaintenanceDay' "Tuesday"
+
+pattern MaintenanceDay_Wednesday :: MaintenanceDay
+pattern MaintenanceDay_Wednesday = MaintenanceDay' "Wednesday"
+
+{-# COMPLETE
+  MaintenanceDay_Friday,
+  MaintenanceDay_Monday,
+  MaintenanceDay_Saturday,
+  MaintenanceDay_Sunday,
+  MaintenanceDay_Thursday,
+  MaintenanceDay_Tuesday,
+  MaintenanceDay_Wednesday,
+  MaintenanceDay'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStream.hs b/gen/Amazonka/MediaConnect/Types/MediaStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStream.hs
@@ -0,0 +1,186 @@
+{-# 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.MediaConnect.Types.MediaStream
+-- 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.MediaConnect.Types.MediaStream where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.MediaStreamAttributes
+import Amazonka.MediaConnect.Types.MediaStreamType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A single track or stream of media that contains video, audio, or
+-- ancillary data. After you add a media stream to a flow, you can
+-- associate it with sources and outputs on that flow, as long as they use
+-- the CDI protocol or the ST 2110 JPEG XS protocol. Each source or output
+-- can consist of one or many media streams.
+--
+-- /See:/ 'newMediaStream' smart constructor.
+data MediaStream = MediaStream'
+  { -- | Attributes that are related to the media stream.
+    attributes :: Prelude.Maybe MediaStreamAttributes,
+    -- | The sample rate for the stream. This value is measured in Hz.
+    clockRate :: Prelude.Maybe Prelude.Int,
+    -- | A description that can help you quickly identify what your media stream
+    -- is used for.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The resolution of the video.
+    videoFormat :: Prelude.Maybe Prelude.Text,
+    -- | The type of media stream.
+    mediaStreamType :: MediaStreamType,
+    -- | A unique identifier for the media stream.
+    mediaStreamId :: Prelude.Int,
+    -- | A name that helps you distinguish one media stream from another.
+    mediaStreamName :: Prelude.Text,
+    -- | The format type number (sometimes referred to as RTP payload type) of
+    -- the media stream. MediaConnect assigns this value to the media stream.
+    -- For ST 2110 JPEG XS outputs, you need to provide this value to the
+    -- receiver.
+    fmt :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaStream' 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:
+--
+-- 'attributes', 'mediaStream_attributes' - Attributes that are related to the media stream.
+--
+-- 'clockRate', 'mediaStream_clockRate' - The sample rate for the stream. This value is measured in Hz.
+--
+-- 'description', 'mediaStream_description' - A description that can help you quickly identify what your media stream
+-- is used for.
+--
+-- 'videoFormat', 'mediaStream_videoFormat' - The resolution of the video.
+--
+-- 'mediaStreamType', 'mediaStream_mediaStreamType' - The type of media stream.
+--
+-- 'mediaStreamId', 'mediaStream_mediaStreamId' - A unique identifier for the media stream.
+--
+-- 'mediaStreamName', 'mediaStream_mediaStreamName' - A name that helps you distinguish one media stream from another.
+--
+-- 'fmt', 'mediaStream_fmt' - The format type number (sometimes referred to as RTP payload type) of
+-- the media stream. MediaConnect assigns this value to the media stream.
+-- For ST 2110 JPEG XS outputs, you need to provide this value to the
+-- receiver.
+newMediaStream ::
+  -- | 'mediaStreamType'
+  MediaStreamType ->
+  -- | 'mediaStreamId'
+  Prelude.Int ->
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  -- | 'fmt'
+  Prelude.Int ->
+  MediaStream
+newMediaStream
+  pMediaStreamType_
+  pMediaStreamId_
+  pMediaStreamName_
+  pFmt_ =
+    MediaStream'
+      { attributes = Prelude.Nothing,
+        clockRate = Prelude.Nothing,
+        description = Prelude.Nothing,
+        videoFormat = Prelude.Nothing,
+        mediaStreamType = pMediaStreamType_,
+        mediaStreamId = pMediaStreamId_,
+        mediaStreamName = pMediaStreamName_,
+        fmt = pFmt_
+      }
+
+-- | Attributes that are related to the media stream.
+mediaStream_attributes :: Lens.Lens' MediaStream (Prelude.Maybe MediaStreamAttributes)
+mediaStream_attributes = Lens.lens (\MediaStream' {attributes} -> attributes) (\s@MediaStream' {} a -> s {attributes = a} :: MediaStream)
+
+-- | The sample rate for the stream. This value is measured in Hz.
+mediaStream_clockRate :: Lens.Lens' MediaStream (Prelude.Maybe Prelude.Int)
+mediaStream_clockRate = Lens.lens (\MediaStream' {clockRate} -> clockRate) (\s@MediaStream' {} a -> s {clockRate = a} :: MediaStream)
+
+-- | A description that can help you quickly identify what your media stream
+-- is used for.
+mediaStream_description :: Lens.Lens' MediaStream (Prelude.Maybe Prelude.Text)
+mediaStream_description = Lens.lens (\MediaStream' {description} -> description) (\s@MediaStream' {} a -> s {description = a} :: MediaStream)
+
+-- | The resolution of the video.
+mediaStream_videoFormat :: Lens.Lens' MediaStream (Prelude.Maybe Prelude.Text)
+mediaStream_videoFormat = Lens.lens (\MediaStream' {videoFormat} -> videoFormat) (\s@MediaStream' {} a -> s {videoFormat = a} :: MediaStream)
+
+-- | The type of media stream.
+mediaStream_mediaStreamType :: Lens.Lens' MediaStream MediaStreamType
+mediaStream_mediaStreamType = Lens.lens (\MediaStream' {mediaStreamType} -> mediaStreamType) (\s@MediaStream' {} a -> s {mediaStreamType = a} :: MediaStream)
+
+-- | A unique identifier for the media stream.
+mediaStream_mediaStreamId :: Lens.Lens' MediaStream Prelude.Int
+mediaStream_mediaStreamId = Lens.lens (\MediaStream' {mediaStreamId} -> mediaStreamId) (\s@MediaStream' {} a -> s {mediaStreamId = a} :: MediaStream)
+
+-- | A name that helps you distinguish one media stream from another.
+mediaStream_mediaStreamName :: Lens.Lens' MediaStream Prelude.Text
+mediaStream_mediaStreamName = Lens.lens (\MediaStream' {mediaStreamName} -> mediaStreamName) (\s@MediaStream' {} a -> s {mediaStreamName = a} :: MediaStream)
+
+-- | The format type number (sometimes referred to as RTP payload type) of
+-- the media stream. MediaConnect assigns this value to the media stream.
+-- For ST 2110 JPEG XS outputs, you need to provide this value to the
+-- receiver.
+mediaStream_fmt :: Lens.Lens' MediaStream Prelude.Int
+mediaStream_fmt = Lens.lens (\MediaStream' {fmt} -> fmt) (\s@MediaStream' {} a -> s {fmt = a} :: MediaStream)
+
+instance Data.FromJSON MediaStream where
+  parseJSON =
+    Data.withObject
+      "MediaStream"
+      ( \x ->
+          MediaStream'
+            Prelude.<$> (x Data..:? "attributes")
+            Prelude.<*> (x Data..:? "clockRate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "videoFormat")
+            Prelude.<*> (x Data..: "mediaStreamType")
+            Prelude.<*> (x Data..: "mediaStreamId")
+            Prelude.<*> (x Data..: "mediaStreamName")
+            Prelude.<*> (x Data..: "fmt")
+      )
+
+instance Prelude.Hashable MediaStream where
+  hashWithSalt _salt MediaStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` clockRate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` videoFormat
+      `Prelude.hashWithSalt` mediaStreamType
+      `Prelude.hashWithSalt` mediaStreamId
+      `Prelude.hashWithSalt` mediaStreamName
+      `Prelude.hashWithSalt` fmt
+
+instance Prelude.NFData MediaStream where
+  rnf MediaStream' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf clockRate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf videoFormat
+      `Prelude.seq` Prelude.rnf mediaStreamType
+      `Prelude.seq` Prelude.rnf mediaStreamId
+      `Prelude.seq` Prelude.rnf mediaStreamName
+      `Prelude.seq` Prelude.rnf fmt
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStreamAttributes.hs b/gen/Amazonka/MediaConnect/Types/MediaStreamAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStreamAttributes.hs
@@ -0,0 +1,86 @@
+{-# 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.MediaConnect.Types.MediaStreamAttributes
+-- 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.MediaConnect.Types.MediaStreamAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Fmtp
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes that are related to the media stream.
+--
+-- /See:/ 'newMediaStreamAttributes' smart constructor.
+data MediaStreamAttributes = MediaStreamAttributes'
+  { -- | The audio language, in a format that is recognized by the receiver.
+    lang :: Prelude.Maybe Prelude.Text,
+    -- | A set of parameters that define the media stream.
+    fmtp :: Fmtp
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaStreamAttributes' 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:
+--
+-- 'lang', 'mediaStreamAttributes_lang' - The audio language, in a format that is recognized by the receiver.
+--
+-- 'fmtp', 'mediaStreamAttributes_fmtp' - A set of parameters that define the media stream.
+newMediaStreamAttributes ::
+  -- | 'fmtp'
+  Fmtp ->
+  MediaStreamAttributes
+newMediaStreamAttributes pFmtp_ =
+  MediaStreamAttributes'
+    { lang = Prelude.Nothing,
+      fmtp = pFmtp_
+    }
+
+-- | The audio language, in a format that is recognized by the receiver.
+mediaStreamAttributes_lang :: Lens.Lens' MediaStreamAttributes (Prelude.Maybe Prelude.Text)
+mediaStreamAttributes_lang = Lens.lens (\MediaStreamAttributes' {lang} -> lang) (\s@MediaStreamAttributes' {} a -> s {lang = a} :: MediaStreamAttributes)
+
+-- | A set of parameters that define the media stream.
+mediaStreamAttributes_fmtp :: Lens.Lens' MediaStreamAttributes Fmtp
+mediaStreamAttributes_fmtp = Lens.lens (\MediaStreamAttributes' {fmtp} -> fmtp) (\s@MediaStreamAttributes' {} a -> s {fmtp = a} :: MediaStreamAttributes)
+
+instance Data.FromJSON MediaStreamAttributes where
+  parseJSON =
+    Data.withObject
+      "MediaStreamAttributes"
+      ( \x ->
+          MediaStreamAttributes'
+            Prelude.<$> (x Data..:? "lang")
+            Prelude.<*> (x Data..: "fmtp")
+      )
+
+instance Prelude.Hashable MediaStreamAttributes where
+  hashWithSalt _salt MediaStreamAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` lang
+      `Prelude.hashWithSalt` fmtp
+
+instance Prelude.NFData MediaStreamAttributes where
+  rnf MediaStreamAttributes' {..} =
+    Prelude.rnf lang `Prelude.seq` Prelude.rnf fmtp
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStreamAttributesRequest.hs b/gen/Amazonka/MediaConnect/Types/MediaStreamAttributesRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStreamAttributesRequest.hs
@@ -0,0 +1,87 @@
+{-# 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.MediaConnect.Types.MediaStreamAttributesRequest
+-- 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.MediaConnect.Types.MediaStreamAttributesRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.FmtpRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes that are related to the media stream.
+--
+-- /See:/ 'newMediaStreamAttributesRequest' smart constructor.
+data MediaStreamAttributesRequest = MediaStreamAttributesRequest'
+  { -- | The settings that you want to use to define the media stream.
+    fmtp :: Prelude.Maybe FmtpRequest,
+    -- | The audio language, in a format that is recognized by the receiver.
+    lang :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaStreamAttributesRequest' 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:
+--
+-- 'fmtp', 'mediaStreamAttributesRequest_fmtp' - The settings that you want to use to define the media stream.
+--
+-- 'lang', 'mediaStreamAttributesRequest_lang' - The audio language, in a format that is recognized by the receiver.
+newMediaStreamAttributesRequest ::
+  MediaStreamAttributesRequest
+newMediaStreamAttributesRequest =
+  MediaStreamAttributesRequest'
+    { fmtp =
+        Prelude.Nothing,
+      lang = Prelude.Nothing
+    }
+
+-- | The settings that you want to use to define the media stream.
+mediaStreamAttributesRequest_fmtp :: Lens.Lens' MediaStreamAttributesRequest (Prelude.Maybe FmtpRequest)
+mediaStreamAttributesRequest_fmtp = Lens.lens (\MediaStreamAttributesRequest' {fmtp} -> fmtp) (\s@MediaStreamAttributesRequest' {} a -> s {fmtp = a} :: MediaStreamAttributesRequest)
+
+-- | The audio language, in a format that is recognized by the receiver.
+mediaStreamAttributesRequest_lang :: Lens.Lens' MediaStreamAttributesRequest (Prelude.Maybe Prelude.Text)
+mediaStreamAttributesRequest_lang = Lens.lens (\MediaStreamAttributesRequest' {lang} -> lang) (\s@MediaStreamAttributesRequest' {} a -> s {lang = a} :: MediaStreamAttributesRequest)
+
+instance
+  Prelude.Hashable
+    MediaStreamAttributesRequest
+  where
+  hashWithSalt _salt MediaStreamAttributesRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` fmtp
+      `Prelude.hashWithSalt` lang
+
+instance Prelude.NFData MediaStreamAttributesRequest where
+  rnf MediaStreamAttributesRequest' {..} =
+    Prelude.rnf fmtp `Prelude.seq` Prelude.rnf lang
+
+instance Data.ToJSON MediaStreamAttributesRequest where
+  toJSON MediaStreamAttributesRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("fmtp" Data..=) Prelude.<$> fmtp,
+            ("lang" Data..=) Prelude.<$> lang
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStreamOutputConfiguration.hs b/gen/Amazonka/MediaConnect/Types/MediaStreamOutputConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStreamOutputConfiguration.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.MediaStreamOutputConfiguration
+-- 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.MediaConnect.Types.MediaStreamOutputConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.DestinationConfiguration
+import Amazonka.MediaConnect.Types.EncodingName
+import Amazonka.MediaConnect.Types.EncodingParameters
+import qualified Amazonka.Prelude as Prelude
+
+-- | The media stream that is associated with the output, and the parameters
+-- for that association.
+--
+-- /See:/ 'newMediaStreamOutputConfiguration' smart constructor.
+data MediaStreamOutputConfiguration = MediaStreamOutputConfiguration'
+  { -- | The transport parameters that are associated with each outbound media
+    -- stream.
+    destinationConfigurations :: Prelude.Maybe [DestinationConfiguration],
+    -- | Encoding parameters
+    encodingParameters :: Prelude.Maybe EncodingParameters,
+    -- | The name of the media stream.
+    mediaStreamName :: Prelude.Text,
+    -- | The format that was used to encode the data. For ancillary data streams,
+    -- set the encoding name to smpte291. For audio streams, set the encoding
+    -- name to pcm. For video, 2110 streams, set the encoding name to raw. For
+    -- video, JPEG XS streams, set the encoding name to jxsv.
+    encodingName :: EncodingName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaStreamOutputConfiguration' 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:
+--
+-- 'destinationConfigurations', 'mediaStreamOutputConfiguration_destinationConfigurations' - The transport parameters that are associated with each outbound media
+-- stream.
+--
+-- 'encodingParameters', 'mediaStreamOutputConfiguration_encodingParameters' - Encoding parameters
+--
+-- 'mediaStreamName', 'mediaStreamOutputConfiguration_mediaStreamName' - The name of the media stream.
+--
+-- 'encodingName', 'mediaStreamOutputConfiguration_encodingName' - The format that was used to encode the data. For ancillary data streams,
+-- set the encoding name to smpte291. For audio streams, set the encoding
+-- name to pcm. For video, 2110 streams, set the encoding name to raw. For
+-- video, JPEG XS streams, set the encoding name to jxsv.
+newMediaStreamOutputConfiguration ::
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  -- | 'encodingName'
+  EncodingName ->
+  MediaStreamOutputConfiguration
+newMediaStreamOutputConfiguration
+  pMediaStreamName_
+  pEncodingName_ =
+    MediaStreamOutputConfiguration'
+      { destinationConfigurations =
+          Prelude.Nothing,
+        encodingParameters = Prelude.Nothing,
+        mediaStreamName = pMediaStreamName_,
+        encodingName = pEncodingName_
+      }
+
+-- | The transport parameters that are associated with each outbound media
+-- stream.
+mediaStreamOutputConfiguration_destinationConfigurations :: Lens.Lens' MediaStreamOutputConfiguration (Prelude.Maybe [DestinationConfiguration])
+mediaStreamOutputConfiguration_destinationConfigurations = Lens.lens (\MediaStreamOutputConfiguration' {destinationConfigurations} -> destinationConfigurations) (\s@MediaStreamOutputConfiguration' {} a -> s {destinationConfigurations = a} :: MediaStreamOutputConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Encoding parameters
+mediaStreamOutputConfiguration_encodingParameters :: Lens.Lens' MediaStreamOutputConfiguration (Prelude.Maybe EncodingParameters)
+mediaStreamOutputConfiguration_encodingParameters = Lens.lens (\MediaStreamOutputConfiguration' {encodingParameters} -> encodingParameters) (\s@MediaStreamOutputConfiguration' {} a -> s {encodingParameters = a} :: MediaStreamOutputConfiguration)
+
+-- | The name of the media stream.
+mediaStreamOutputConfiguration_mediaStreamName :: Lens.Lens' MediaStreamOutputConfiguration Prelude.Text
+mediaStreamOutputConfiguration_mediaStreamName = Lens.lens (\MediaStreamOutputConfiguration' {mediaStreamName} -> mediaStreamName) (\s@MediaStreamOutputConfiguration' {} a -> s {mediaStreamName = a} :: MediaStreamOutputConfiguration)
+
+-- | The format that was used to encode the data. For ancillary data streams,
+-- set the encoding name to smpte291. For audio streams, set the encoding
+-- name to pcm. For video, 2110 streams, set the encoding name to raw. For
+-- video, JPEG XS streams, set the encoding name to jxsv.
+mediaStreamOutputConfiguration_encodingName :: Lens.Lens' MediaStreamOutputConfiguration EncodingName
+mediaStreamOutputConfiguration_encodingName = Lens.lens (\MediaStreamOutputConfiguration' {encodingName} -> encodingName) (\s@MediaStreamOutputConfiguration' {} a -> s {encodingName = a} :: MediaStreamOutputConfiguration)
+
+instance Data.FromJSON MediaStreamOutputConfiguration where
+  parseJSON =
+    Data.withObject
+      "MediaStreamOutputConfiguration"
+      ( \x ->
+          MediaStreamOutputConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "destinationConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "encodingParameters")
+            Prelude.<*> (x Data..: "mediaStreamName")
+            Prelude.<*> (x Data..: "encodingName")
+      )
+
+instance
+  Prelude.Hashable
+    MediaStreamOutputConfiguration
+  where
+  hashWithSalt
+    _salt
+    MediaStreamOutputConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` destinationConfigurations
+        `Prelude.hashWithSalt` encodingParameters
+        `Prelude.hashWithSalt` mediaStreamName
+        `Prelude.hashWithSalt` encodingName
+
+instance
+  Prelude.NFData
+    MediaStreamOutputConfiguration
+  where
+  rnf MediaStreamOutputConfiguration' {..} =
+    Prelude.rnf destinationConfigurations
+      `Prelude.seq` Prelude.rnf encodingParameters
+      `Prelude.seq` Prelude.rnf mediaStreamName
+      `Prelude.seq` Prelude.rnf encodingName
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStreamOutputConfigurationRequest.hs b/gen/Amazonka/MediaConnect/Types/MediaStreamOutputConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStreamOutputConfigurationRequest.hs
@@ -0,0 +1,150 @@
+{-# 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.MediaConnect.Types.MediaStreamOutputConfigurationRequest
+-- 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.MediaConnect.Types.MediaStreamOutputConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.DestinationConfigurationRequest
+import Amazonka.MediaConnect.Types.EncodingName
+import Amazonka.MediaConnect.Types.EncodingParametersRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | The media stream that you want to associate with the output, and the
+-- parameters for that association.
+--
+-- /See:/ 'newMediaStreamOutputConfigurationRequest' smart constructor.
+data MediaStreamOutputConfigurationRequest = MediaStreamOutputConfigurationRequest'
+  { -- | The transport parameters that you want to associate with the media
+    -- stream.
+    destinationConfigurations :: Prelude.Maybe [DestinationConfigurationRequest],
+    -- | A collection of parameters that determine how MediaConnect will convert
+    -- the content. These fields only apply to outputs on flows that have a CDI
+    -- source.
+    encodingParameters :: Prelude.Maybe EncodingParametersRequest,
+    -- | The name of the media stream that is associated with the output.
+    mediaStreamName :: Prelude.Text,
+    -- | The format that will be used to encode the data. For ancillary data
+    -- streams, set the encoding name to smpte291. For audio streams, set the
+    -- encoding name to pcm. For video, 2110 streams, set the encoding name to
+    -- raw. For video, JPEG XS streams, set the encoding name to jxsv.
+    encodingName :: EncodingName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaStreamOutputConfigurationRequest' 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:
+--
+-- 'destinationConfigurations', 'mediaStreamOutputConfigurationRequest_destinationConfigurations' - The transport parameters that you want to associate with the media
+-- stream.
+--
+-- 'encodingParameters', 'mediaStreamOutputConfigurationRequest_encodingParameters' - A collection of parameters that determine how MediaConnect will convert
+-- the content. These fields only apply to outputs on flows that have a CDI
+-- source.
+--
+-- 'mediaStreamName', 'mediaStreamOutputConfigurationRequest_mediaStreamName' - The name of the media stream that is associated with the output.
+--
+-- 'encodingName', 'mediaStreamOutputConfigurationRequest_encodingName' - The format that will be used to encode the data. For ancillary data
+-- streams, set the encoding name to smpte291. For audio streams, set the
+-- encoding name to pcm. For video, 2110 streams, set the encoding name to
+-- raw. For video, JPEG XS streams, set the encoding name to jxsv.
+newMediaStreamOutputConfigurationRequest ::
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  -- | 'encodingName'
+  EncodingName ->
+  MediaStreamOutputConfigurationRequest
+newMediaStreamOutputConfigurationRequest
+  pMediaStreamName_
+  pEncodingName_ =
+    MediaStreamOutputConfigurationRequest'
+      { destinationConfigurations =
+          Prelude.Nothing,
+        encodingParameters = Prelude.Nothing,
+        mediaStreamName = pMediaStreamName_,
+        encodingName = pEncodingName_
+      }
+
+-- | The transport parameters that you want to associate with the media
+-- stream.
+mediaStreamOutputConfigurationRequest_destinationConfigurations :: Lens.Lens' MediaStreamOutputConfigurationRequest (Prelude.Maybe [DestinationConfigurationRequest])
+mediaStreamOutputConfigurationRequest_destinationConfigurations = Lens.lens (\MediaStreamOutputConfigurationRequest' {destinationConfigurations} -> destinationConfigurations) (\s@MediaStreamOutputConfigurationRequest' {} a -> s {destinationConfigurations = a} :: MediaStreamOutputConfigurationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A collection of parameters that determine how MediaConnect will convert
+-- the content. These fields only apply to outputs on flows that have a CDI
+-- source.
+mediaStreamOutputConfigurationRequest_encodingParameters :: Lens.Lens' MediaStreamOutputConfigurationRequest (Prelude.Maybe EncodingParametersRequest)
+mediaStreamOutputConfigurationRequest_encodingParameters = Lens.lens (\MediaStreamOutputConfigurationRequest' {encodingParameters} -> encodingParameters) (\s@MediaStreamOutputConfigurationRequest' {} a -> s {encodingParameters = a} :: MediaStreamOutputConfigurationRequest)
+
+-- | The name of the media stream that is associated with the output.
+mediaStreamOutputConfigurationRequest_mediaStreamName :: Lens.Lens' MediaStreamOutputConfigurationRequest Prelude.Text
+mediaStreamOutputConfigurationRequest_mediaStreamName = Lens.lens (\MediaStreamOutputConfigurationRequest' {mediaStreamName} -> mediaStreamName) (\s@MediaStreamOutputConfigurationRequest' {} a -> s {mediaStreamName = a} :: MediaStreamOutputConfigurationRequest)
+
+-- | The format that will be used to encode the data. For ancillary data
+-- streams, set the encoding name to smpte291. For audio streams, set the
+-- encoding name to pcm. For video, 2110 streams, set the encoding name to
+-- raw. For video, JPEG XS streams, set the encoding name to jxsv.
+mediaStreamOutputConfigurationRequest_encodingName :: Lens.Lens' MediaStreamOutputConfigurationRequest EncodingName
+mediaStreamOutputConfigurationRequest_encodingName = Lens.lens (\MediaStreamOutputConfigurationRequest' {encodingName} -> encodingName) (\s@MediaStreamOutputConfigurationRequest' {} a -> s {encodingName = a} :: MediaStreamOutputConfigurationRequest)
+
+instance
+  Prelude.Hashable
+    MediaStreamOutputConfigurationRequest
+  where
+  hashWithSalt
+    _salt
+    MediaStreamOutputConfigurationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` destinationConfigurations
+        `Prelude.hashWithSalt` encodingParameters
+        `Prelude.hashWithSalt` mediaStreamName
+        `Prelude.hashWithSalt` encodingName
+
+instance
+  Prelude.NFData
+    MediaStreamOutputConfigurationRequest
+  where
+  rnf MediaStreamOutputConfigurationRequest' {..} =
+    Prelude.rnf destinationConfigurations
+      `Prelude.seq` Prelude.rnf encodingParameters
+      `Prelude.seq` Prelude.rnf mediaStreamName
+      `Prelude.seq` Prelude.rnf encodingName
+
+instance
+  Data.ToJSON
+    MediaStreamOutputConfigurationRequest
+  where
+  toJSON MediaStreamOutputConfigurationRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("destinationConfigurations" Data..=)
+              Prelude.<$> destinationConfigurations,
+            ("encodingParameters" Data..=)
+              Prelude.<$> encodingParameters,
+            Prelude.Just
+              ("mediaStreamName" Data..= mediaStreamName),
+            Prelude.Just ("encodingName" Data..= encodingName)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStreamSourceConfiguration.hs b/gen/Amazonka/MediaConnect/Types/MediaStreamSourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStreamSourceConfiguration.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.MediaConnect.Types.MediaStreamSourceConfiguration
+-- 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.MediaConnect.Types.MediaStreamSourceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.EncodingName
+import Amazonka.MediaConnect.Types.InputConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | The media stream that is associated with the source, and the parameters
+-- for that association.
+--
+-- /See:/ 'newMediaStreamSourceConfiguration' smart constructor.
+data MediaStreamSourceConfiguration = MediaStreamSourceConfiguration'
+  { -- | The transport parameters that are associated with an incoming media
+    -- stream.
+    inputConfigurations :: Prelude.Maybe [InputConfiguration],
+    -- | The name of the media stream.
+    mediaStreamName :: Prelude.Text,
+    -- | The format that was used to encode the data. For ancillary data streams,
+    -- set the encoding name to smpte291. For audio streams, set the encoding
+    -- name to pcm. For video, 2110 streams, set the encoding name to raw. For
+    -- video, JPEG XS streams, set the encoding name to jxsv.
+    encodingName :: EncodingName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaStreamSourceConfiguration' 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:
+--
+-- 'inputConfigurations', 'mediaStreamSourceConfiguration_inputConfigurations' - The transport parameters that are associated with an incoming media
+-- stream.
+--
+-- 'mediaStreamName', 'mediaStreamSourceConfiguration_mediaStreamName' - The name of the media stream.
+--
+-- 'encodingName', 'mediaStreamSourceConfiguration_encodingName' - The format that was used to encode the data. For ancillary data streams,
+-- set the encoding name to smpte291. For audio streams, set the encoding
+-- name to pcm. For video, 2110 streams, set the encoding name to raw. For
+-- video, JPEG XS streams, set the encoding name to jxsv.
+newMediaStreamSourceConfiguration ::
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  -- | 'encodingName'
+  EncodingName ->
+  MediaStreamSourceConfiguration
+newMediaStreamSourceConfiguration
+  pMediaStreamName_
+  pEncodingName_ =
+    MediaStreamSourceConfiguration'
+      { inputConfigurations =
+          Prelude.Nothing,
+        mediaStreamName = pMediaStreamName_,
+        encodingName = pEncodingName_
+      }
+
+-- | The transport parameters that are associated with an incoming media
+-- stream.
+mediaStreamSourceConfiguration_inputConfigurations :: Lens.Lens' MediaStreamSourceConfiguration (Prelude.Maybe [InputConfiguration])
+mediaStreamSourceConfiguration_inputConfigurations = Lens.lens (\MediaStreamSourceConfiguration' {inputConfigurations} -> inputConfigurations) (\s@MediaStreamSourceConfiguration' {} a -> s {inputConfigurations = a} :: MediaStreamSourceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the media stream.
+mediaStreamSourceConfiguration_mediaStreamName :: Lens.Lens' MediaStreamSourceConfiguration Prelude.Text
+mediaStreamSourceConfiguration_mediaStreamName = Lens.lens (\MediaStreamSourceConfiguration' {mediaStreamName} -> mediaStreamName) (\s@MediaStreamSourceConfiguration' {} a -> s {mediaStreamName = a} :: MediaStreamSourceConfiguration)
+
+-- | The format that was used to encode the data. For ancillary data streams,
+-- set the encoding name to smpte291. For audio streams, set the encoding
+-- name to pcm. For video, 2110 streams, set the encoding name to raw. For
+-- video, JPEG XS streams, set the encoding name to jxsv.
+mediaStreamSourceConfiguration_encodingName :: Lens.Lens' MediaStreamSourceConfiguration EncodingName
+mediaStreamSourceConfiguration_encodingName = Lens.lens (\MediaStreamSourceConfiguration' {encodingName} -> encodingName) (\s@MediaStreamSourceConfiguration' {} a -> s {encodingName = a} :: MediaStreamSourceConfiguration)
+
+instance Data.FromJSON MediaStreamSourceConfiguration where
+  parseJSON =
+    Data.withObject
+      "MediaStreamSourceConfiguration"
+      ( \x ->
+          MediaStreamSourceConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "inputConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "mediaStreamName")
+            Prelude.<*> (x Data..: "encodingName")
+      )
+
+instance
+  Prelude.Hashable
+    MediaStreamSourceConfiguration
+  where
+  hashWithSalt
+    _salt
+    MediaStreamSourceConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` inputConfigurations
+        `Prelude.hashWithSalt` mediaStreamName
+        `Prelude.hashWithSalt` encodingName
+
+instance
+  Prelude.NFData
+    MediaStreamSourceConfiguration
+  where
+  rnf MediaStreamSourceConfiguration' {..} =
+    Prelude.rnf inputConfigurations
+      `Prelude.seq` Prelude.rnf mediaStreamName
+      `Prelude.seq` Prelude.rnf encodingName
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStreamSourceConfigurationRequest.hs b/gen/Amazonka/MediaConnect/Types/MediaStreamSourceConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStreamSourceConfigurationRequest.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.MediaStreamSourceConfigurationRequest
+-- 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.MediaConnect.Types.MediaStreamSourceConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.EncodingName
+import Amazonka.MediaConnect.Types.InputConfigurationRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | The definition of a media stream that you want to associate with the
+-- source.
+--
+-- /See:/ 'newMediaStreamSourceConfigurationRequest' smart constructor.
+data MediaStreamSourceConfigurationRequest = MediaStreamSourceConfigurationRequest'
+  { -- | The transport parameters that you want to associate with the media
+    -- stream.
+    inputConfigurations :: Prelude.Maybe [InputConfigurationRequest],
+    -- | The name of the media stream.
+    mediaStreamName :: Prelude.Text,
+    -- | The format you want to use to encode the data. For ancillary data
+    -- streams, set the encoding name to smpte291. For audio streams, set the
+    -- encoding name to pcm. For video, 2110 streams, set the encoding name to
+    -- raw. For video, JPEG XS streams, set the encoding name to jxsv.
+    encodingName :: EncodingName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaStreamSourceConfigurationRequest' 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:
+--
+-- 'inputConfigurations', 'mediaStreamSourceConfigurationRequest_inputConfigurations' - The transport parameters that you want to associate with the media
+-- stream.
+--
+-- 'mediaStreamName', 'mediaStreamSourceConfigurationRequest_mediaStreamName' - The name of the media stream.
+--
+-- 'encodingName', 'mediaStreamSourceConfigurationRequest_encodingName' - The format you want to use to encode the data. For ancillary data
+-- streams, set the encoding name to smpte291. For audio streams, set the
+-- encoding name to pcm. For video, 2110 streams, set the encoding name to
+-- raw. For video, JPEG XS streams, set the encoding name to jxsv.
+newMediaStreamSourceConfigurationRequest ::
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  -- | 'encodingName'
+  EncodingName ->
+  MediaStreamSourceConfigurationRequest
+newMediaStreamSourceConfigurationRequest
+  pMediaStreamName_
+  pEncodingName_ =
+    MediaStreamSourceConfigurationRequest'
+      { inputConfigurations =
+          Prelude.Nothing,
+        mediaStreamName = pMediaStreamName_,
+        encodingName = pEncodingName_
+      }
+
+-- | The transport parameters that you want to associate with the media
+-- stream.
+mediaStreamSourceConfigurationRequest_inputConfigurations :: Lens.Lens' MediaStreamSourceConfigurationRequest (Prelude.Maybe [InputConfigurationRequest])
+mediaStreamSourceConfigurationRequest_inputConfigurations = Lens.lens (\MediaStreamSourceConfigurationRequest' {inputConfigurations} -> inputConfigurations) (\s@MediaStreamSourceConfigurationRequest' {} a -> s {inputConfigurations = a} :: MediaStreamSourceConfigurationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the media stream.
+mediaStreamSourceConfigurationRequest_mediaStreamName :: Lens.Lens' MediaStreamSourceConfigurationRequest Prelude.Text
+mediaStreamSourceConfigurationRequest_mediaStreamName = Lens.lens (\MediaStreamSourceConfigurationRequest' {mediaStreamName} -> mediaStreamName) (\s@MediaStreamSourceConfigurationRequest' {} a -> s {mediaStreamName = a} :: MediaStreamSourceConfigurationRequest)
+
+-- | The format you want to use to encode the data. For ancillary data
+-- streams, set the encoding name to smpte291. For audio streams, set the
+-- encoding name to pcm. For video, 2110 streams, set the encoding name to
+-- raw. For video, JPEG XS streams, set the encoding name to jxsv.
+mediaStreamSourceConfigurationRequest_encodingName :: Lens.Lens' MediaStreamSourceConfigurationRequest EncodingName
+mediaStreamSourceConfigurationRequest_encodingName = Lens.lens (\MediaStreamSourceConfigurationRequest' {encodingName} -> encodingName) (\s@MediaStreamSourceConfigurationRequest' {} a -> s {encodingName = a} :: MediaStreamSourceConfigurationRequest)
+
+instance
+  Prelude.Hashable
+    MediaStreamSourceConfigurationRequest
+  where
+  hashWithSalt
+    _salt
+    MediaStreamSourceConfigurationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` inputConfigurations
+        `Prelude.hashWithSalt` mediaStreamName
+        `Prelude.hashWithSalt` encodingName
+
+instance
+  Prelude.NFData
+    MediaStreamSourceConfigurationRequest
+  where
+  rnf MediaStreamSourceConfigurationRequest' {..} =
+    Prelude.rnf inputConfigurations
+      `Prelude.seq` Prelude.rnf mediaStreamName
+      `Prelude.seq` Prelude.rnf encodingName
+
+instance
+  Data.ToJSON
+    MediaStreamSourceConfigurationRequest
+  where
+  toJSON MediaStreamSourceConfigurationRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("inputConfigurations" Data..=)
+              Prelude.<$> inputConfigurations,
+            Prelude.Just
+              ("mediaStreamName" Data..= mediaStreamName),
+            Prelude.Just ("encodingName" Data..= encodingName)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/MediaStreamType.hs b/gen/Amazonka/MediaConnect/Types/MediaStreamType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/MediaStreamType.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.MediaConnect.Types.MediaStreamType
+-- 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.MediaConnect.Types.MediaStreamType
+  ( MediaStreamType
+      ( ..,
+        MediaStreamType_Ancillary_data,
+        MediaStreamType_Audio,
+        MediaStreamType_Video
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MediaStreamType = MediaStreamType'
+  { fromMediaStreamType ::
+      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 MediaStreamType_Ancillary_data :: MediaStreamType
+pattern MediaStreamType_Ancillary_data = MediaStreamType' "ancillary-data"
+
+pattern MediaStreamType_Audio :: MediaStreamType
+pattern MediaStreamType_Audio = MediaStreamType' "audio"
+
+pattern MediaStreamType_Video :: MediaStreamType
+pattern MediaStreamType_Video = MediaStreamType' "video"
+
+{-# COMPLETE
+  MediaStreamType_Ancillary_data,
+  MediaStreamType_Audio,
+  MediaStreamType_Video,
+  MediaStreamType'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Messages.hs b/gen/Amazonka/MediaConnect/Types/Messages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Messages.hs
@@ -0,0 +1,70 @@
+{-# 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.MediaConnect.Types.Messages
+-- 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.MediaConnect.Types.Messages 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
+
+-- | Messages that provide the state of the flow.
+--
+-- /See:/ 'newMessages' smart constructor.
+data Messages = Messages'
+  { -- | A list of errors that might have been generated from processes on this
+    -- flow.
+    errors :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Messages' 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:
+--
+-- 'errors', 'messages_errors' - A list of errors that might have been generated from processes on this
+-- flow.
+newMessages ::
+  Messages
+newMessages = Messages' {errors = Prelude.mempty}
+
+-- | A list of errors that might have been generated from processes on this
+-- flow.
+messages_errors :: Lens.Lens' Messages [Prelude.Text]
+messages_errors = Lens.lens (\Messages' {errors} -> errors) (\s@Messages' {} a -> s {errors = a} :: Messages) Prelude.. Lens.coerced
+
+instance Data.FromJSON Messages where
+  parseJSON =
+    Data.withObject
+      "Messages"
+      ( \x ->
+          Messages'
+            Prelude.<$> (x Data..:? "errors" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Messages where
+  hashWithSalt _salt Messages' {..} =
+    _salt `Prelude.hashWithSalt` errors
+
+instance Prelude.NFData Messages where
+  rnf Messages' {..} = Prelude.rnf errors
diff --git a/gen/Amazonka/MediaConnect/Types/NetworkInterfaceType.hs b/gen/Amazonka/MediaConnect/Types/NetworkInterfaceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/NetworkInterfaceType.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.MediaConnect.Types.NetworkInterfaceType
+-- 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.MediaConnect.Types.NetworkInterfaceType
+  ( NetworkInterfaceType
+      ( ..,
+        NetworkInterfaceType_Efa,
+        NetworkInterfaceType_Ena
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkInterfaceType = NetworkInterfaceType'
+  { fromNetworkInterfaceType ::
+      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 NetworkInterfaceType_Efa :: NetworkInterfaceType
+pattern NetworkInterfaceType_Efa = NetworkInterfaceType' "efa"
+
+pattern NetworkInterfaceType_Ena :: NetworkInterfaceType
+pattern NetworkInterfaceType_Ena = NetworkInterfaceType' "ena"
+
+{-# COMPLETE
+  NetworkInterfaceType_Efa,
+  NetworkInterfaceType_Ena,
+  NetworkInterfaceType'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Offering.hs b/gen/Amazonka/MediaConnect/Types/Offering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Offering.hs
@@ -0,0 +1,199 @@
+{-# 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.MediaConnect.Types.Offering
+-- 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.MediaConnect.Types.Offering where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.DurationUnits
+import Amazonka.MediaConnect.Types.PriceUnits
+import Amazonka.MediaConnect.Types.ResourceSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | A savings plan that reserves a certain amount of outbound bandwidth
+-- usage at a discounted rate each month over a period of time.
+--
+-- /See:/ 'newOffering' smart constructor.
+data Offering = Offering'
+  { -- | The type of currency that is used for billing. The currencyCode used for
+    -- all reservations is US dollars.
+    currencyCode :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) that MediaConnect assigns to the
+    -- offering.
+    offeringArn :: Prelude.Text,
+    -- | A description of the offering.
+    offeringDescription :: Prelude.Text,
+    -- | The unit of measurement for the duration of the offering.
+    durationUnits :: DurationUnits,
+    -- | The length of time that your reservation would be active.
+    duration :: Prelude.Int,
+    -- | The cost of a single unit. This value, in combination with priceUnits,
+    -- makes up the rate.
+    pricePerUnit :: Prelude.Text,
+    -- | A definition of the amount of outbound bandwidth that you would be
+    -- reserving if you purchase the offering.
+    resourceSpecification :: ResourceSpecification,
+    -- | The unit of measurement that is used for billing. This value, in
+    -- combination with pricePerUnit, makes up the rate.
+    priceUnits :: PriceUnits
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Offering' 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:
+--
+-- 'currencyCode', 'offering_currencyCode' - The type of currency that is used for billing. The currencyCode used for
+-- all reservations is US dollars.
+--
+-- 'offeringArn', 'offering_offeringArn' - The Amazon Resource Name (ARN) that MediaConnect assigns to the
+-- offering.
+--
+-- 'offeringDescription', 'offering_offeringDescription' - A description of the offering.
+--
+-- 'durationUnits', 'offering_durationUnits' - The unit of measurement for the duration of the offering.
+--
+-- 'duration', 'offering_duration' - The length of time that your reservation would be active.
+--
+-- 'pricePerUnit', 'offering_pricePerUnit' - The cost of a single unit. This value, in combination with priceUnits,
+-- makes up the rate.
+--
+-- 'resourceSpecification', 'offering_resourceSpecification' - A definition of the amount of outbound bandwidth that you would be
+-- reserving if you purchase the offering.
+--
+-- 'priceUnits', 'offering_priceUnits' - The unit of measurement that is used for billing. This value, in
+-- combination with pricePerUnit, makes up the rate.
+newOffering ::
+  -- | 'currencyCode'
+  Prelude.Text ->
+  -- | 'offeringArn'
+  Prelude.Text ->
+  -- | 'offeringDescription'
+  Prelude.Text ->
+  -- | 'durationUnits'
+  DurationUnits ->
+  -- | 'duration'
+  Prelude.Int ->
+  -- | 'pricePerUnit'
+  Prelude.Text ->
+  -- | 'resourceSpecification'
+  ResourceSpecification ->
+  -- | 'priceUnits'
+  PriceUnits ->
+  Offering
+newOffering
+  pCurrencyCode_
+  pOfferingArn_
+  pOfferingDescription_
+  pDurationUnits_
+  pDuration_
+  pPricePerUnit_
+  pResourceSpecification_
+  pPriceUnits_ =
+    Offering'
+      { currencyCode = pCurrencyCode_,
+        offeringArn = pOfferingArn_,
+        offeringDescription = pOfferingDescription_,
+        durationUnits = pDurationUnits_,
+        duration = pDuration_,
+        pricePerUnit = pPricePerUnit_,
+        resourceSpecification = pResourceSpecification_,
+        priceUnits = pPriceUnits_
+      }
+
+-- | The type of currency that is used for billing. The currencyCode used for
+-- all reservations is US dollars.
+offering_currencyCode :: Lens.Lens' Offering Prelude.Text
+offering_currencyCode = Lens.lens (\Offering' {currencyCode} -> currencyCode) (\s@Offering' {} a -> s {currencyCode = a} :: Offering)
+
+-- | The Amazon Resource Name (ARN) that MediaConnect assigns to the
+-- offering.
+offering_offeringArn :: Lens.Lens' Offering Prelude.Text
+offering_offeringArn = Lens.lens (\Offering' {offeringArn} -> offeringArn) (\s@Offering' {} a -> s {offeringArn = a} :: Offering)
+
+-- | A description of the offering.
+offering_offeringDescription :: Lens.Lens' Offering Prelude.Text
+offering_offeringDescription = Lens.lens (\Offering' {offeringDescription} -> offeringDescription) (\s@Offering' {} a -> s {offeringDescription = a} :: Offering)
+
+-- | The unit of measurement for the duration of the offering.
+offering_durationUnits :: Lens.Lens' Offering DurationUnits
+offering_durationUnits = Lens.lens (\Offering' {durationUnits} -> durationUnits) (\s@Offering' {} a -> s {durationUnits = a} :: Offering)
+
+-- | The length of time that your reservation would be active.
+offering_duration :: Lens.Lens' Offering Prelude.Int
+offering_duration = Lens.lens (\Offering' {duration} -> duration) (\s@Offering' {} a -> s {duration = a} :: Offering)
+
+-- | The cost of a single unit. This value, in combination with priceUnits,
+-- makes up the rate.
+offering_pricePerUnit :: Lens.Lens' Offering Prelude.Text
+offering_pricePerUnit = Lens.lens (\Offering' {pricePerUnit} -> pricePerUnit) (\s@Offering' {} a -> s {pricePerUnit = a} :: Offering)
+
+-- | A definition of the amount of outbound bandwidth that you would be
+-- reserving if you purchase the offering.
+offering_resourceSpecification :: Lens.Lens' Offering ResourceSpecification
+offering_resourceSpecification = Lens.lens (\Offering' {resourceSpecification} -> resourceSpecification) (\s@Offering' {} a -> s {resourceSpecification = a} :: Offering)
+
+-- | The unit of measurement that is used for billing. This value, in
+-- combination with pricePerUnit, makes up the rate.
+offering_priceUnits :: Lens.Lens' Offering PriceUnits
+offering_priceUnits = Lens.lens (\Offering' {priceUnits} -> priceUnits) (\s@Offering' {} a -> s {priceUnits = a} :: Offering)
+
+instance Data.FromJSON Offering where
+  parseJSON =
+    Data.withObject
+      "Offering"
+      ( \x ->
+          Offering'
+            Prelude.<$> (x Data..: "currencyCode")
+            Prelude.<*> (x Data..: "offeringArn")
+            Prelude.<*> (x Data..: "offeringDescription")
+            Prelude.<*> (x Data..: "durationUnits")
+            Prelude.<*> (x Data..: "duration")
+            Prelude.<*> (x Data..: "pricePerUnit")
+            Prelude.<*> (x Data..: "resourceSpecification")
+            Prelude.<*> (x Data..: "priceUnits")
+      )
+
+instance Prelude.Hashable Offering where
+  hashWithSalt _salt Offering' {..} =
+    _salt
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` offeringArn
+      `Prelude.hashWithSalt` offeringDescription
+      `Prelude.hashWithSalt` durationUnits
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` pricePerUnit
+      `Prelude.hashWithSalt` resourceSpecification
+      `Prelude.hashWithSalt` priceUnits
+
+instance Prelude.NFData Offering where
+  rnf Offering' {..} =
+    Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf offeringArn
+      `Prelude.seq` Prelude.rnf offeringDescription
+      `Prelude.seq` Prelude.rnf durationUnits
+      `Prelude.seq` Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf pricePerUnit
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf priceUnits
diff --git a/gen/Amazonka/MediaConnect/Types/Output.hs b/gen/Amazonka/MediaConnect/Types/Output.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Output.hs
@@ -0,0 +1,261 @@
+{-# 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.MediaConnect.Types.Output
+-- 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.MediaConnect.Types.Output where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.MediaStreamOutputConfiguration
+import Amazonka.MediaConnect.Types.Transport
+import Amazonka.MediaConnect.Types.VpcInterfaceAttachment
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for an output.
+--
+-- /See:/ 'newOutput' smart constructor.
+data Output = Output'
+  { -- | Percentage from 0-100 of the data transfer cost to be billed to the
+    -- subscriber.
+    dataTransferSubscriberFeePercent :: Prelude.Maybe Prelude.Int,
+    -- | A description of the output.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The address where you want to send the output.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The type of key used for the encryption. If no keyType is provided, the
+    -- service will use the default setting (static-key).
+    encryption :: Prelude.Maybe Encryption,
+    -- | The ARN of the entitlement on the originator\'\'s flow. This value is
+    -- relevant only on entitled flows.
+    entitlementArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP address that the receiver requires in order to establish a
+    -- connection with the flow. For public networking, the ListenerAddress is
+    -- represented by the elastic IP address of the flow. For private
+    -- networking, the ListenerAddress is represented by the elastic network
+    -- interface IP address of the VPC. This field applies only to outputs that
+    -- use the Zixi pull or SRT listener protocol.
+    listenerAddress :: Prelude.Maybe Prelude.Text,
+    -- | The input ARN of the AWS Elemental MediaLive channel. This parameter is
+    -- relevant only for outputs that were added by creating a MediaLive input.
+    mediaLiveInputArn :: Prelude.Maybe Prelude.Text,
+    -- | The configuration for each media stream that is associated with the
+    -- output.
+    mediaStreamOutputConfigurations :: Prelude.Maybe [MediaStreamOutputConfiguration],
+    -- | The port to use when content is distributed to this output.
+    port :: Prelude.Maybe Prelude.Int,
+    -- | Attributes related to the transport stream that are used in the output.
+    transport :: Prelude.Maybe Transport,
+    -- | The name of the VPC interface attachment to use for this output.
+    vpcInterfaceAttachment :: Prelude.Maybe VpcInterfaceAttachment,
+    -- | The ARN of the output.
+    outputArn :: Prelude.Text,
+    -- | The name of the output. This value must be unique within the current
+    -- flow.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Output' 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:
+--
+-- 'dataTransferSubscriberFeePercent', 'output_dataTransferSubscriberFeePercent' - Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+--
+-- 'description', 'output_description' - A description of the output.
+--
+-- 'destination', 'output_destination' - The address where you want to send the output.
+--
+-- 'encryption', 'output_encryption' - The type of key used for the encryption. If no keyType is provided, the
+-- service will use the default setting (static-key).
+--
+-- 'entitlementArn', 'output_entitlementArn' - The ARN of the entitlement on the originator\'\'s flow. This value is
+-- relevant only on entitled flows.
+--
+-- 'listenerAddress', 'output_listenerAddress' - The IP address that the receiver requires in order to establish a
+-- connection with the flow. For public networking, the ListenerAddress is
+-- represented by the elastic IP address of the flow. For private
+-- networking, the ListenerAddress is represented by the elastic network
+-- interface IP address of the VPC. This field applies only to outputs that
+-- use the Zixi pull or SRT listener protocol.
+--
+-- 'mediaLiveInputArn', 'output_mediaLiveInputArn' - The input ARN of the AWS Elemental MediaLive channel. This parameter is
+-- relevant only for outputs that were added by creating a MediaLive input.
+--
+-- 'mediaStreamOutputConfigurations', 'output_mediaStreamOutputConfigurations' - The configuration for each media stream that is associated with the
+-- output.
+--
+-- 'port', 'output_port' - The port to use when content is distributed to this output.
+--
+-- 'transport', 'output_transport' - Attributes related to the transport stream that are used in the output.
+--
+-- 'vpcInterfaceAttachment', 'output_vpcInterfaceAttachment' - The name of the VPC interface attachment to use for this output.
+--
+-- 'outputArn', 'output_outputArn' - The ARN of the output.
+--
+-- 'name', 'output_name' - The name of the output. This value must be unique within the current
+-- flow.
+newOutput ::
+  -- | 'outputArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  Output
+newOutput pOutputArn_ pName_ =
+  Output'
+    { dataTransferSubscriberFeePercent =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      destination = Prelude.Nothing,
+      encryption = Prelude.Nothing,
+      entitlementArn = Prelude.Nothing,
+      listenerAddress = Prelude.Nothing,
+      mediaLiveInputArn = Prelude.Nothing,
+      mediaStreamOutputConfigurations = Prelude.Nothing,
+      port = Prelude.Nothing,
+      transport = Prelude.Nothing,
+      vpcInterfaceAttachment = Prelude.Nothing,
+      outputArn = pOutputArn_,
+      name = pName_
+    }
+
+-- | Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+output_dataTransferSubscriberFeePercent :: Lens.Lens' Output (Prelude.Maybe Prelude.Int)
+output_dataTransferSubscriberFeePercent = Lens.lens (\Output' {dataTransferSubscriberFeePercent} -> dataTransferSubscriberFeePercent) (\s@Output' {} a -> s {dataTransferSubscriberFeePercent = a} :: Output)
+
+-- | A description of the output.
+output_description :: Lens.Lens' Output (Prelude.Maybe Prelude.Text)
+output_description = Lens.lens (\Output' {description} -> description) (\s@Output' {} a -> s {description = a} :: Output)
+
+-- | The address where you want to send the output.
+output_destination :: Lens.Lens' Output (Prelude.Maybe Prelude.Text)
+output_destination = Lens.lens (\Output' {destination} -> destination) (\s@Output' {} a -> s {destination = a} :: Output)
+
+-- | The type of key used for the encryption. If no keyType is provided, the
+-- service will use the default setting (static-key).
+output_encryption :: Lens.Lens' Output (Prelude.Maybe Encryption)
+output_encryption = Lens.lens (\Output' {encryption} -> encryption) (\s@Output' {} a -> s {encryption = a} :: Output)
+
+-- | The ARN of the entitlement on the originator\'\'s flow. This value is
+-- relevant only on entitled flows.
+output_entitlementArn :: Lens.Lens' Output (Prelude.Maybe Prelude.Text)
+output_entitlementArn = Lens.lens (\Output' {entitlementArn} -> entitlementArn) (\s@Output' {} a -> s {entitlementArn = a} :: Output)
+
+-- | The IP address that the receiver requires in order to establish a
+-- connection with the flow. For public networking, the ListenerAddress is
+-- represented by the elastic IP address of the flow. For private
+-- networking, the ListenerAddress is represented by the elastic network
+-- interface IP address of the VPC. This field applies only to outputs that
+-- use the Zixi pull or SRT listener protocol.
+output_listenerAddress :: Lens.Lens' Output (Prelude.Maybe Prelude.Text)
+output_listenerAddress = Lens.lens (\Output' {listenerAddress} -> listenerAddress) (\s@Output' {} a -> s {listenerAddress = a} :: Output)
+
+-- | The input ARN of the AWS Elemental MediaLive channel. This parameter is
+-- relevant only for outputs that were added by creating a MediaLive input.
+output_mediaLiveInputArn :: Lens.Lens' Output (Prelude.Maybe Prelude.Text)
+output_mediaLiveInputArn = Lens.lens (\Output' {mediaLiveInputArn} -> mediaLiveInputArn) (\s@Output' {} a -> s {mediaLiveInputArn = a} :: Output)
+
+-- | The configuration for each media stream that is associated with the
+-- output.
+output_mediaStreamOutputConfigurations :: Lens.Lens' Output (Prelude.Maybe [MediaStreamOutputConfiguration])
+output_mediaStreamOutputConfigurations = Lens.lens (\Output' {mediaStreamOutputConfigurations} -> mediaStreamOutputConfigurations) (\s@Output' {} a -> s {mediaStreamOutputConfigurations = a} :: Output) Prelude.. Lens.mapping Lens.coerced
+
+-- | The port to use when content is distributed to this output.
+output_port :: Lens.Lens' Output (Prelude.Maybe Prelude.Int)
+output_port = Lens.lens (\Output' {port} -> port) (\s@Output' {} a -> s {port = a} :: Output)
+
+-- | Attributes related to the transport stream that are used in the output.
+output_transport :: Lens.Lens' Output (Prelude.Maybe Transport)
+output_transport = Lens.lens (\Output' {transport} -> transport) (\s@Output' {} a -> s {transport = a} :: Output)
+
+-- | The name of the VPC interface attachment to use for this output.
+output_vpcInterfaceAttachment :: Lens.Lens' Output (Prelude.Maybe VpcInterfaceAttachment)
+output_vpcInterfaceAttachment = Lens.lens (\Output' {vpcInterfaceAttachment} -> vpcInterfaceAttachment) (\s@Output' {} a -> s {vpcInterfaceAttachment = a} :: Output)
+
+-- | The ARN of the output.
+output_outputArn :: Lens.Lens' Output Prelude.Text
+output_outputArn = Lens.lens (\Output' {outputArn} -> outputArn) (\s@Output' {} a -> s {outputArn = a} :: Output)
+
+-- | The name of the output. This value must be unique within the current
+-- flow.
+output_name :: Lens.Lens' Output Prelude.Text
+output_name = Lens.lens (\Output' {name} -> name) (\s@Output' {} a -> s {name = a} :: Output)
+
+instance Data.FromJSON Output where
+  parseJSON =
+    Data.withObject
+      "Output"
+      ( \x ->
+          Output'
+            Prelude.<$> (x Data..:? "dataTransferSubscriberFeePercent")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "destination")
+            Prelude.<*> (x Data..:? "encryption")
+            Prelude.<*> (x Data..:? "entitlementArn")
+            Prelude.<*> (x Data..:? "listenerAddress")
+            Prelude.<*> (x Data..:? "mediaLiveInputArn")
+            Prelude.<*> ( x
+                            Data..:? "mediaStreamOutputConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "port")
+            Prelude.<*> (x Data..:? "transport")
+            Prelude.<*> (x Data..:? "vpcInterfaceAttachment")
+            Prelude.<*> (x Data..: "outputArn")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable Output where
+  hashWithSalt _salt Output' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTransferSubscriberFeePercent
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` entitlementArn
+      `Prelude.hashWithSalt` listenerAddress
+      `Prelude.hashWithSalt` mediaLiveInputArn
+      `Prelude.hashWithSalt` mediaStreamOutputConfigurations
+      `Prelude.hashWithSalt` port
+      `Prelude.hashWithSalt` transport
+      `Prelude.hashWithSalt` vpcInterfaceAttachment
+      `Prelude.hashWithSalt` outputArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Output where
+  rnf Output' {..} =
+    Prelude.rnf dataTransferSubscriberFeePercent
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf entitlementArn
+      `Prelude.seq` Prelude.rnf listenerAddress
+      `Prelude.seq` Prelude.rnf mediaLiveInputArn
+      `Prelude.seq` Prelude.rnf mediaStreamOutputConfigurations
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf transport
+      `Prelude.seq` Prelude.rnf vpcInterfaceAttachment
+      `Prelude.seq` Prelude.rnf outputArn
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MediaConnect/Types/PriceUnits.hs b/gen/Amazonka/MediaConnect/Types/PriceUnits.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/PriceUnits.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.MediaConnect.Types.PriceUnits
+-- 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.MediaConnect.Types.PriceUnits
+  ( PriceUnits
+      ( ..,
+        PriceUnits_HOURLY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PriceUnits = PriceUnits'
+  { fromPriceUnits ::
+      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 PriceUnits_HOURLY :: PriceUnits
+pattern PriceUnits_HOURLY = PriceUnits' "HOURLY"
+
+{-# COMPLETE
+  PriceUnits_HOURLY,
+  PriceUnits'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Protocol.hs b/gen/Amazonka/MediaConnect/Types/Protocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Protocol.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.MediaConnect.Types.Protocol
+-- 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.MediaConnect.Types.Protocol
+  ( Protocol
+      ( ..,
+        Protocol_Cdi,
+        Protocol_Fujitsu_qos,
+        Protocol_Rist,
+        Protocol_Rtp,
+        Protocol_Rtp_fec,
+        Protocol_Srt_caller,
+        Protocol_Srt_listener,
+        Protocol_St2110_jpegxs,
+        Protocol_Zixi_pull,
+        Protocol_Zixi_push
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Protocol = Protocol'
+  { fromProtocol ::
+      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 Protocol_Cdi :: Protocol
+pattern Protocol_Cdi = Protocol' "cdi"
+
+pattern Protocol_Fujitsu_qos :: Protocol
+pattern Protocol_Fujitsu_qos = Protocol' "fujitsu-qos"
+
+pattern Protocol_Rist :: Protocol
+pattern Protocol_Rist = Protocol' "rist"
+
+pattern Protocol_Rtp :: Protocol
+pattern Protocol_Rtp = Protocol' "rtp"
+
+pattern Protocol_Rtp_fec :: Protocol
+pattern Protocol_Rtp_fec = Protocol' "rtp-fec"
+
+pattern Protocol_Srt_caller :: Protocol
+pattern Protocol_Srt_caller = Protocol' "srt-caller"
+
+pattern Protocol_Srt_listener :: Protocol
+pattern Protocol_Srt_listener = Protocol' "srt-listener"
+
+pattern Protocol_St2110_jpegxs :: Protocol
+pattern Protocol_St2110_jpegxs = Protocol' "st2110-jpegxs"
+
+pattern Protocol_Zixi_pull :: Protocol
+pattern Protocol_Zixi_pull = Protocol' "zixi-pull"
+
+pattern Protocol_Zixi_push :: Protocol
+pattern Protocol_Zixi_push = Protocol' "zixi-push"
+
+{-# COMPLETE
+  Protocol_Cdi,
+  Protocol_Fujitsu_qos,
+  Protocol_Rist,
+  Protocol_Rtp,
+  Protocol_Rtp_fec,
+  Protocol_Srt_caller,
+  Protocol_Srt_listener,
+  Protocol_St2110_jpegxs,
+  Protocol_Zixi_pull,
+  Protocol_Zixi_push,
+  Protocol'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Range.hs b/gen/Amazonka/MediaConnect/Types/Range.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Range.hs
@@ -0,0 +1,73 @@
+{-# 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.MediaConnect.Types.Range
+-- 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.MediaConnect.Types.Range
+  ( Range
+      ( ..,
+        Range_FULL,
+        Range_FULLPROTECT,
+        Range_NARROW
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Range = Range' {fromRange :: 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 Range_FULL :: Range
+pattern Range_FULL = Range' "FULL"
+
+pattern Range_FULLPROTECT :: Range
+pattern Range_FULLPROTECT = Range' "FULLPROTECT"
+
+pattern Range_NARROW :: Range
+pattern Range_NARROW = Range' "NARROW"
+
+{-# COMPLETE
+  Range_FULL,
+  Range_FULLPROTECT,
+  Range_NARROW,
+  Range'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Reservation.hs b/gen/Amazonka/MediaConnect/Types/Reservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Reservation.hs
@@ -0,0 +1,310 @@
+{-# 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.MediaConnect.Types.Reservation
+-- 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.MediaConnect.Types.Reservation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.DurationUnits
+import Amazonka.MediaConnect.Types.PriceUnits
+import Amazonka.MediaConnect.Types.ReservationState
+import Amazonka.MediaConnect.Types.ResourceSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | A pricing agreement for a discounted rate for a specific outbound
+-- bandwidth that your MediaConnect account will use each month over a
+-- specific time period. The discounted rate in the reservation applies to
+-- outbound bandwidth for all flows from your account until your account
+-- reaches the amount of bandwidth in your reservation. If you use more
+-- outbound bandwidth than the agreed upon amount in a single month, the
+-- overage is charged at the on-demand rate.
+--
+-- /See:/ 'newReservation' smart constructor.
+data Reservation = Reservation'
+  { -- | The type of currency that is used for billing. The currencyCode used for
+    -- your reservation is US dollars.
+    currencyCode :: Prelude.Text,
+    -- | The status of your reservation.
+    reservationState :: ReservationState,
+    -- | The Amazon Resource Name (ARN) that MediaConnect assigns to the
+    -- offering.
+    offeringArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) that MediaConnect assigns to the
+    -- reservation when you purchase an offering.
+    reservationArn :: Prelude.Text,
+    -- | The day and time that the reservation becomes active. You set this value
+    -- when you purchase the offering.
+    start :: Prelude.Text,
+    -- | A description of the offering. MediaConnect defines this value in the
+    -- offering.
+    offeringDescription :: Prelude.Text,
+    -- | The name that you assigned to the reservation when you purchased the
+    -- offering.
+    reservationName :: Prelude.Text,
+    -- | The day and time that this reservation expires. This value is calculated
+    -- based on the start date and time that you set and the offering\'s
+    -- duration.
+    end :: Prelude.Text,
+    -- | The length of time that this reservation is active. MediaConnect defines
+    -- this value in the offering.
+    duration :: Prelude.Int,
+    -- | The unit of measurement for the duration of the reservation.
+    -- MediaConnect defines this value in the offering.
+    durationUnits :: DurationUnits,
+    -- | The cost of a single unit. This value, in combination with priceUnits,
+    -- makes up the rate. MediaConnect defines this value in the offering.
+    pricePerUnit :: Prelude.Text,
+    -- | A definition of the amount of outbound bandwidth that you would be
+    -- reserving if you purchase the offering. MediaConnect defines the values
+    -- that make up the resourceSpecification in the offering.
+    resourceSpecification :: ResourceSpecification,
+    -- | The unit of measurement that is used for billing. This value, in
+    -- combination with pricePerUnit, makes up the rate. MediaConnect defines
+    -- this value in the offering.
+    priceUnits :: PriceUnits
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Reservation' 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:
+--
+-- 'currencyCode', 'reservation_currencyCode' - The type of currency that is used for billing. The currencyCode used for
+-- your reservation is US dollars.
+--
+-- 'reservationState', 'reservation_reservationState' - The status of your reservation.
+--
+-- 'offeringArn', 'reservation_offeringArn' - The Amazon Resource Name (ARN) that MediaConnect assigns to the
+-- offering.
+--
+-- 'reservationArn', 'reservation_reservationArn' - The Amazon Resource Name (ARN) that MediaConnect assigns to the
+-- reservation when you purchase an offering.
+--
+-- 'start', 'reservation_start' - The day and time that the reservation becomes active. You set this value
+-- when you purchase the offering.
+--
+-- 'offeringDescription', 'reservation_offeringDescription' - A description of the offering. MediaConnect defines this value in the
+-- offering.
+--
+-- 'reservationName', 'reservation_reservationName' - The name that you assigned to the reservation when you purchased the
+-- offering.
+--
+-- 'end', 'reservation_end' - The day and time that this reservation expires. This value is calculated
+-- based on the start date and time that you set and the offering\'s
+-- duration.
+--
+-- 'duration', 'reservation_duration' - The length of time that this reservation is active. MediaConnect defines
+-- this value in the offering.
+--
+-- 'durationUnits', 'reservation_durationUnits' - The unit of measurement for the duration of the reservation.
+-- MediaConnect defines this value in the offering.
+--
+-- 'pricePerUnit', 'reservation_pricePerUnit' - The cost of a single unit. This value, in combination with priceUnits,
+-- makes up the rate. MediaConnect defines this value in the offering.
+--
+-- 'resourceSpecification', 'reservation_resourceSpecification' - A definition of the amount of outbound bandwidth that you would be
+-- reserving if you purchase the offering. MediaConnect defines the values
+-- that make up the resourceSpecification in the offering.
+--
+-- 'priceUnits', 'reservation_priceUnits' - The unit of measurement that is used for billing. This value, in
+-- combination with pricePerUnit, makes up the rate. MediaConnect defines
+-- this value in the offering.
+newReservation ::
+  -- | 'currencyCode'
+  Prelude.Text ->
+  -- | 'reservationState'
+  ReservationState ->
+  -- | 'offeringArn'
+  Prelude.Text ->
+  -- | 'reservationArn'
+  Prelude.Text ->
+  -- | 'start'
+  Prelude.Text ->
+  -- | 'offeringDescription'
+  Prelude.Text ->
+  -- | 'reservationName'
+  Prelude.Text ->
+  -- | 'end'
+  Prelude.Text ->
+  -- | 'duration'
+  Prelude.Int ->
+  -- | 'durationUnits'
+  DurationUnits ->
+  -- | 'pricePerUnit'
+  Prelude.Text ->
+  -- | 'resourceSpecification'
+  ResourceSpecification ->
+  -- | 'priceUnits'
+  PriceUnits ->
+  Reservation
+newReservation
+  pCurrencyCode_
+  pReservationState_
+  pOfferingArn_
+  pReservationArn_
+  pStart_
+  pOfferingDescription_
+  pReservationName_
+  pEnd_
+  pDuration_
+  pDurationUnits_
+  pPricePerUnit_
+  pResourceSpecification_
+  pPriceUnits_ =
+    Reservation'
+      { currencyCode = pCurrencyCode_,
+        reservationState = pReservationState_,
+        offeringArn = pOfferingArn_,
+        reservationArn = pReservationArn_,
+        start = pStart_,
+        offeringDescription = pOfferingDescription_,
+        reservationName = pReservationName_,
+        end = pEnd_,
+        duration = pDuration_,
+        durationUnits = pDurationUnits_,
+        pricePerUnit = pPricePerUnit_,
+        resourceSpecification = pResourceSpecification_,
+        priceUnits = pPriceUnits_
+      }
+
+-- | The type of currency that is used for billing. The currencyCode used for
+-- your reservation is US dollars.
+reservation_currencyCode :: Lens.Lens' Reservation Prelude.Text
+reservation_currencyCode = Lens.lens (\Reservation' {currencyCode} -> currencyCode) (\s@Reservation' {} a -> s {currencyCode = a} :: Reservation)
+
+-- | The status of your reservation.
+reservation_reservationState :: Lens.Lens' Reservation ReservationState
+reservation_reservationState = Lens.lens (\Reservation' {reservationState} -> reservationState) (\s@Reservation' {} a -> s {reservationState = a} :: Reservation)
+
+-- | The Amazon Resource Name (ARN) that MediaConnect assigns to the
+-- offering.
+reservation_offeringArn :: Lens.Lens' Reservation Prelude.Text
+reservation_offeringArn = Lens.lens (\Reservation' {offeringArn} -> offeringArn) (\s@Reservation' {} a -> s {offeringArn = a} :: Reservation)
+
+-- | The Amazon Resource Name (ARN) that MediaConnect assigns to the
+-- reservation when you purchase an offering.
+reservation_reservationArn :: Lens.Lens' Reservation Prelude.Text
+reservation_reservationArn = Lens.lens (\Reservation' {reservationArn} -> reservationArn) (\s@Reservation' {} a -> s {reservationArn = a} :: Reservation)
+
+-- | The day and time that the reservation becomes active. You set this value
+-- when you purchase the offering.
+reservation_start :: Lens.Lens' Reservation Prelude.Text
+reservation_start = Lens.lens (\Reservation' {start} -> start) (\s@Reservation' {} a -> s {start = a} :: Reservation)
+
+-- | A description of the offering. MediaConnect defines this value in the
+-- offering.
+reservation_offeringDescription :: Lens.Lens' Reservation Prelude.Text
+reservation_offeringDescription = Lens.lens (\Reservation' {offeringDescription} -> offeringDescription) (\s@Reservation' {} a -> s {offeringDescription = a} :: Reservation)
+
+-- | The name that you assigned to the reservation when you purchased the
+-- offering.
+reservation_reservationName :: Lens.Lens' Reservation Prelude.Text
+reservation_reservationName = Lens.lens (\Reservation' {reservationName} -> reservationName) (\s@Reservation' {} a -> s {reservationName = a} :: Reservation)
+
+-- | The day and time that this reservation expires. This value is calculated
+-- based on the start date and time that you set and the offering\'s
+-- duration.
+reservation_end :: Lens.Lens' Reservation Prelude.Text
+reservation_end = Lens.lens (\Reservation' {end} -> end) (\s@Reservation' {} a -> s {end = a} :: Reservation)
+
+-- | The length of time that this reservation is active. MediaConnect defines
+-- this value in the offering.
+reservation_duration :: Lens.Lens' Reservation Prelude.Int
+reservation_duration = Lens.lens (\Reservation' {duration} -> duration) (\s@Reservation' {} a -> s {duration = a} :: Reservation)
+
+-- | The unit of measurement for the duration of the reservation.
+-- MediaConnect defines this value in the offering.
+reservation_durationUnits :: Lens.Lens' Reservation DurationUnits
+reservation_durationUnits = Lens.lens (\Reservation' {durationUnits} -> durationUnits) (\s@Reservation' {} a -> s {durationUnits = a} :: Reservation)
+
+-- | The cost of a single unit. This value, in combination with priceUnits,
+-- makes up the rate. MediaConnect defines this value in the offering.
+reservation_pricePerUnit :: Lens.Lens' Reservation Prelude.Text
+reservation_pricePerUnit = Lens.lens (\Reservation' {pricePerUnit} -> pricePerUnit) (\s@Reservation' {} a -> s {pricePerUnit = a} :: Reservation)
+
+-- | A definition of the amount of outbound bandwidth that you would be
+-- reserving if you purchase the offering. MediaConnect defines the values
+-- that make up the resourceSpecification in the offering.
+reservation_resourceSpecification :: Lens.Lens' Reservation ResourceSpecification
+reservation_resourceSpecification = Lens.lens (\Reservation' {resourceSpecification} -> resourceSpecification) (\s@Reservation' {} a -> s {resourceSpecification = a} :: Reservation)
+
+-- | The unit of measurement that is used for billing. This value, in
+-- combination with pricePerUnit, makes up the rate. MediaConnect defines
+-- this value in the offering.
+reservation_priceUnits :: Lens.Lens' Reservation PriceUnits
+reservation_priceUnits = Lens.lens (\Reservation' {priceUnits} -> priceUnits) (\s@Reservation' {} a -> s {priceUnits = a} :: Reservation)
+
+instance Data.FromJSON Reservation where
+  parseJSON =
+    Data.withObject
+      "Reservation"
+      ( \x ->
+          Reservation'
+            Prelude.<$> (x Data..: "currencyCode")
+            Prelude.<*> (x Data..: "reservationState")
+            Prelude.<*> (x Data..: "offeringArn")
+            Prelude.<*> (x Data..: "reservationArn")
+            Prelude.<*> (x Data..: "start")
+            Prelude.<*> (x Data..: "offeringDescription")
+            Prelude.<*> (x Data..: "reservationName")
+            Prelude.<*> (x Data..: "end")
+            Prelude.<*> (x Data..: "duration")
+            Prelude.<*> (x Data..: "durationUnits")
+            Prelude.<*> (x Data..: "pricePerUnit")
+            Prelude.<*> (x Data..: "resourceSpecification")
+            Prelude.<*> (x Data..: "priceUnits")
+      )
+
+instance Prelude.Hashable Reservation where
+  hashWithSalt _salt Reservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` reservationState
+      `Prelude.hashWithSalt` offeringArn
+      `Prelude.hashWithSalt` reservationArn
+      `Prelude.hashWithSalt` start
+      `Prelude.hashWithSalt` offeringDescription
+      `Prelude.hashWithSalt` reservationName
+      `Prelude.hashWithSalt` end
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` durationUnits
+      `Prelude.hashWithSalt` pricePerUnit
+      `Prelude.hashWithSalt` resourceSpecification
+      `Prelude.hashWithSalt` priceUnits
+
+instance Prelude.NFData Reservation where
+  rnf Reservation' {..} =
+    Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf reservationState
+      `Prelude.seq` Prelude.rnf offeringArn
+      `Prelude.seq` Prelude.rnf reservationArn
+      `Prelude.seq` Prelude.rnf start
+      `Prelude.seq` Prelude.rnf offeringDescription
+      `Prelude.seq` Prelude.rnf reservationName
+      `Prelude.seq` Prelude.rnf end
+      `Prelude.seq` Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf durationUnits
+      `Prelude.seq` Prelude.rnf pricePerUnit
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf priceUnits
diff --git a/gen/Amazonka/MediaConnect/Types/ReservationState.hs b/gen/Amazonka/MediaConnect/Types/ReservationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/ReservationState.hs
@@ -0,0 +1,81 @@
+{-# 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.MediaConnect.Types.ReservationState
+-- 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.MediaConnect.Types.ReservationState
+  ( ReservationState
+      ( ..,
+        ReservationState_ACTIVE,
+        ReservationState_CANCELED,
+        ReservationState_EXPIRED,
+        ReservationState_PROCESSING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReservationState = ReservationState'
+  { fromReservationState ::
+      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 ReservationState_ACTIVE :: ReservationState
+pattern ReservationState_ACTIVE = ReservationState' "ACTIVE"
+
+pattern ReservationState_CANCELED :: ReservationState
+pattern ReservationState_CANCELED = ReservationState' "CANCELED"
+
+pattern ReservationState_EXPIRED :: ReservationState
+pattern ReservationState_EXPIRED = ReservationState' "EXPIRED"
+
+pattern ReservationState_PROCESSING :: ReservationState
+pattern ReservationState_PROCESSING = ReservationState' "PROCESSING"
+
+{-# COMPLETE
+  ReservationState_ACTIVE,
+  ReservationState_CANCELED,
+  ReservationState_EXPIRED,
+  ReservationState_PROCESSING,
+  ReservationState'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/ResourceSpecification.hs b/gen/Amazonka/MediaConnect/Types/ResourceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/ResourceSpecification.hs
@@ -0,0 +1,88 @@
+{-# 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.MediaConnect.Types.ResourceSpecification
+-- 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.MediaConnect.Types.ResourceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.ResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A definition of what is being billed for, including the type and amount.
+--
+-- /See:/ 'newResourceSpecification' smart constructor.
+data ResourceSpecification = ResourceSpecification'
+  { -- | The amount of outbound bandwidth that is discounted in the offering.
+    reservedBitrate :: Prelude.Maybe Prelude.Int,
+    -- | The type of resource and the unit that is being billed for.
+    resourceType :: ResourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceSpecification' 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:
+--
+-- 'reservedBitrate', 'resourceSpecification_reservedBitrate' - The amount of outbound bandwidth that is discounted in the offering.
+--
+-- 'resourceType', 'resourceSpecification_resourceType' - The type of resource and the unit that is being billed for.
+newResourceSpecification ::
+  -- | 'resourceType'
+  ResourceType ->
+  ResourceSpecification
+newResourceSpecification pResourceType_ =
+  ResourceSpecification'
+    { reservedBitrate =
+        Prelude.Nothing,
+      resourceType = pResourceType_
+    }
+
+-- | The amount of outbound bandwidth that is discounted in the offering.
+resourceSpecification_reservedBitrate :: Lens.Lens' ResourceSpecification (Prelude.Maybe Prelude.Int)
+resourceSpecification_reservedBitrate = Lens.lens (\ResourceSpecification' {reservedBitrate} -> reservedBitrate) (\s@ResourceSpecification' {} a -> s {reservedBitrate = a} :: ResourceSpecification)
+
+-- | The type of resource and the unit that is being billed for.
+resourceSpecification_resourceType :: Lens.Lens' ResourceSpecification ResourceType
+resourceSpecification_resourceType = Lens.lens (\ResourceSpecification' {resourceType} -> resourceType) (\s@ResourceSpecification' {} a -> s {resourceType = a} :: ResourceSpecification)
+
+instance Data.FromJSON ResourceSpecification where
+  parseJSON =
+    Data.withObject
+      "ResourceSpecification"
+      ( \x ->
+          ResourceSpecification'
+            Prelude.<$> (x Data..:? "reservedBitrate")
+            Prelude.<*> (x Data..: "resourceType")
+      )
+
+instance Prelude.Hashable ResourceSpecification where
+  hashWithSalt _salt ResourceSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` reservedBitrate
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData ResourceSpecification where
+  rnf ResourceSpecification' {..} =
+    Prelude.rnf reservedBitrate
+      `Prelude.seq` Prelude.rnf resourceType
diff --git a/gen/Amazonka/MediaConnect/Types/ResourceType.hs b/gen/Amazonka/MediaConnect/Types/ResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/ResourceType.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.MediaConnect.Types.ResourceType
+-- 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.MediaConnect.Types.ResourceType
+  ( ResourceType
+      ( ..,
+        ResourceType_Mbps_Outbound_Bandwidth
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceType = ResourceType'
+  { fromResourceType ::
+      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 ResourceType_Mbps_Outbound_Bandwidth :: ResourceType
+pattern ResourceType_Mbps_Outbound_Bandwidth = ResourceType' "Mbps_Outbound_Bandwidth"
+
+{-# COMPLETE
+  ResourceType_Mbps_Outbound_Bandwidth,
+  ResourceType'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/ScanMode.hs b/gen/Amazonka/MediaConnect/Types/ScanMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/ScanMode.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.MediaConnect.Types.ScanMode
+-- 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.MediaConnect.Types.ScanMode
+  ( ScanMode
+      ( ..,
+        ScanMode_Interlace,
+        ScanMode_Progressive,
+        ScanMode_Progressive_segmented_frame
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ScanMode = ScanMode'
+  { fromScanMode ::
+      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 ScanMode_Interlace :: ScanMode
+pattern ScanMode_Interlace = ScanMode' "interlace"
+
+pattern ScanMode_Progressive :: ScanMode
+pattern ScanMode_Progressive = ScanMode' "progressive"
+
+pattern ScanMode_Progressive_segmented_frame :: ScanMode
+pattern ScanMode_Progressive_segmented_frame = ScanMode' "progressive-segmented-frame"
+
+{-# COMPLETE
+  ScanMode_Interlace,
+  ScanMode_Progressive,
+  ScanMode_Progressive_segmented_frame,
+  ScanMode'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/SetSourceRequest.hs b/gen/Amazonka/MediaConnect/Types/SetSourceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/SetSourceRequest.hs
@@ -0,0 +1,333 @@
+{-# 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.MediaConnect.Types.SetSourceRequest
+-- 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.MediaConnect.Types.SetSourceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.MediaStreamSourceConfigurationRequest
+import Amazonka.MediaConnect.Types.Protocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for the source of the flow.
+--
+-- /See:/ 'newSetSourceRequest' smart constructor.
+data SetSourceRequest = SetSourceRequest'
+  { -- | The type of encryption that is used on the content ingested from this
+    -- source.
+    decryption :: Prelude.Maybe Encryption,
+    -- | A description for the source. This value is not used or seen outside of
+    -- the current AWS Elemental MediaConnect account.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the entitlement that allows you to subscribe to this flow.
+    -- The entitlement is set by the flow originator, and the ARN is generated
+    -- as part of the originator\'s flow.
+    entitlementArn :: Prelude.Maybe Prelude.Text,
+    -- | The port that the flow will be listening on for incoming content.
+    ingestPort :: Prelude.Maybe Prelude.Int,
+    -- | The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+    maxBitrate :: Prelude.Maybe Prelude.Int,
+    -- | The maximum latency in milliseconds. This parameter applies only to
+    -- RIST-based, Zixi-based, and Fujitsu-based streams.
+    maxLatency :: Prelude.Maybe Prelude.Int,
+    -- | The size of the buffer (in milliseconds) to use to sync incoming source
+    -- data.
+    maxSyncBuffer :: Prelude.Maybe Prelude.Int,
+    -- | The media streams that are associated with the source, and the
+    -- parameters for those associations.
+    mediaStreamSourceConfigurations :: Prelude.Maybe [MediaStreamSourceConfigurationRequest],
+    -- | The minimum latency in milliseconds for SRT-based streams. In streams
+    -- that use the SRT protocol, this value that you set on your MediaConnect
+    -- source or output represents the minimal potential latency of that
+    -- connection. The latency of the stream is set to the highest number
+    -- between the sender’s minimum latency and the receiver’s minimum latency.
+    minLatency :: Prelude.Maybe Prelude.Int,
+    -- | The name of the source.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The protocol that is used by the source.
+    protocol :: Prelude.Maybe Protocol,
+    -- | The port that the flow uses to send outbound requests to initiate
+    -- connection with the sender.
+    senderControlPort :: Prelude.Maybe Prelude.Int,
+    -- | The IP address that the flow communicates with to initiate connection
+    -- with the sender.
+    senderIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | Source IP or domain name for SRT-caller protocol.
+    sourceListenerAddress :: Prelude.Maybe Prelude.Text,
+    -- | Source port for SRT-caller protocol.
+    sourceListenerPort :: Prelude.Maybe Prelude.Int,
+    -- | The stream ID that you want to use for this transport. This parameter
+    -- applies only to Zixi-based streams.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the VPC interface to use for this source.
+    vpcInterfaceName :: Prelude.Maybe Prelude.Text,
+    -- | The range of IP addresses that should be allowed to contribute content
+    -- to your source. These IP addresses should be in the form of a Classless
+    -- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+    whitelistCidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SetSourceRequest' 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:
+--
+-- 'decryption', 'setSourceRequest_decryption' - The type of encryption that is used on the content ingested from this
+-- source.
+--
+-- 'description', 'setSourceRequest_description' - A description for the source. This value is not used or seen outside of
+-- the current AWS Elemental MediaConnect account.
+--
+-- 'entitlementArn', 'setSourceRequest_entitlementArn' - The ARN of the entitlement that allows you to subscribe to this flow.
+-- The entitlement is set by the flow originator, and the ARN is generated
+-- as part of the originator\'s flow.
+--
+-- 'ingestPort', 'setSourceRequest_ingestPort' - The port that the flow will be listening on for incoming content.
+--
+-- 'maxBitrate', 'setSourceRequest_maxBitrate' - The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+--
+-- 'maxLatency', 'setSourceRequest_maxLatency' - The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+--
+-- 'maxSyncBuffer', 'setSourceRequest_maxSyncBuffer' - The size of the buffer (in milliseconds) to use to sync incoming source
+-- data.
+--
+-- 'mediaStreamSourceConfigurations', 'setSourceRequest_mediaStreamSourceConfigurations' - The media streams that are associated with the source, and the
+-- parameters for those associations.
+--
+-- 'minLatency', 'setSourceRequest_minLatency' - The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+--
+-- 'name', 'setSourceRequest_name' - The name of the source.
+--
+-- 'protocol', 'setSourceRequest_protocol' - The protocol that is used by the source.
+--
+-- 'senderControlPort', 'setSourceRequest_senderControlPort' - The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+--
+-- 'senderIpAddress', 'setSourceRequest_senderIpAddress' - The IP address that the flow communicates with to initiate connection
+-- with the sender.
+--
+-- 'sourceListenerAddress', 'setSourceRequest_sourceListenerAddress' - Source IP or domain name for SRT-caller protocol.
+--
+-- 'sourceListenerPort', 'setSourceRequest_sourceListenerPort' - Source port for SRT-caller protocol.
+--
+-- 'streamId', 'setSourceRequest_streamId' - The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+--
+-- 'vpcInterfaceName', 'setSourceRequest_vpcInterfaceName' - The name of the VPC interface to use for this source.
+--
+-- 'whitelistCidr', 'setSourceRequest_whitelistCidr' - The range of IP addresses that should be allowed to contribute content
+-- to your source. These IP addresses should be in the form of a Classless
+-- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+newSetSourceRequest ::
+  SetSourceRequest
+newSetSourceRequest =
+  SetSourceRequest'
+    { decryption = Prelude.Nothing,
+      description = Prelude.Nothing,
+      entitlementArn = Prelude.Nothing,
+      ingestPort = Prelude.Nothing,
+      maxBitrate = Prelude.Nothing,
+      maxLatency = Prelude.Nothing,
+      maxSyncBuffer = Prelude.Nothing,
+      mediaStreamSourceConfigurations = Prelude.Nothing,
+      minLatency = Prelude.Nothing,
+      name = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      senderControlPort = Prelude.Nothing,
+      senderIpAddress = Prelude.Nothing,
+      sourceListenerAddress = Prelude.Nothing,
+      sourceListenerPort = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      vpcInterfaceName = Prelude.Nothing,
+      whitelistCidr = Prelude.Nothing
+    }
+
+-- | The type of encryption that is used on the content ingested from this
+-- source.
+setSourceRequest_decryption :: Lens.Lens' SetSourceRequest (Prelude.Maybe Encryption)
+setSourceRequest_decryption = Lens.lens (\SetSourceRequest' {decryption} -> decryption) (\s@SetSourceRequest' {} a -> s {decryption = a} :: SetSourceRequest)
+
+-- | A description for the source. This value is not used or seen outside of
+-- the current AWS Elemental MediaConnect account.
+setSourceRequest_description :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_description = Lens.lens (\SetSourceRequest' {description} -> description) (\s@SetSourceRequest' {} a -> s {description = a} :: SetSourceRequest)
+
+-- | The ARN of the entitlement that allows you to subscribe to this flow.
+-- The entitlement is set by the flow originator, and the ARN is generated
+-- as part of the originator\'s flow.
+setSourceRequest_entitlementArn :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_entitlementArn = Lens.lens (\SetSourceRequest' {entitlementArn} -> entitlementArn) (\s@SetSourceRequest' {} a -> s {entitlementArn = a} :: SetSourceRequest)
+
+-- | The port that the flow will be listening on for incoming content.
+setSourceRequest_ingestPort :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Int)
+setSourceRequest_ingestPort = Lens.lens (\SetSourceRequest' {ingestPort} -> ingestPort) (\s@SetSourceRequest' {} a -> s {ingestPort = a} :: SetSourceRequest)
+
+-- | The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+setSourceRequest_maxBitrate :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Int)
+setSourceRequest_maxBitrate = Lens.lens (\SetSourceRequest' {maxBitrate} -> maxBitrate) (\s@SetSourceRequest' {} a -> s {maxBitrate = a} :: SetSourceRequest)
+
+-- | The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+setSourceRequest_maxLatency :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Int)
+setSourceRequest_maxLatency = Lens.lens (\SetSourceRequest' {maxLatency} -> maxLatency) (\s@SetSourceRequest' {} a -> s {maxLatency = a} :: SetSourceRequest)
+
+-- | The size of the buffer (in milliseconds) to use to sync incoming source
+-- data.
+setSourceRequest_maxSyncBuffer :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Int)
+setSourceRequest_maxSyncBuffer = Lens.lens (\SetSourceRequest' {maxSyncBuffer} -> maxSyncBuffer) (\s@SetSourceRequest' {} a -> s {maxSyncBuffer = a} :: SetSourceRequest)
+
+-- | The media streams that are associated with the source, and the
+-- parameters for those associations.
+setSourceRequest_mediaStreamSourceConfigurations :: Lens.Lens' SetSourceRequest (Prelude.Maybe [MediaStreamSourceConfigurationRequest])
+setSourceRequest_mediaStreamSourceConfigurations = Lens.lens (\SetSourceRequest' {mediaStreamSourceConfigurations} -> mediaStreamSourceConfigurations) (\s@SetSourceRequest' {} a -> s {mediaStreamSourceConfigurations = a} :: SetSourceRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+setSourceRequest_minLatency :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Int)
+setSourceRequest_minLatency = Lens.lens (\SetSourceRequest' {minLatency} -> minLatency) (\s@SetSourceRequest' {} a -> s {minLatency = a} :: SetSourceRequest)
+
+-- | The name of the source.
+setSourceRequest_name :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_name = Lens.lens (\SetSourceRequest' {name} -> name) (\s@SetSourceRequest' {} a -> s {name = a} :: SetSourceRequest)
+
+-- | The protocol that is used by the source.
+setSourceRequest_protocol :: Lens.Lens' SetSourceRequest (Prelude.Maybe Protocol)
+setSourceRequest_protocol = Lens.lens (\SetSourceRequest' {protocol} -> protocol) (\s@SetSourceRequest' {} a -> s {protocol = a} :: SetSourceRequest)
+
+-- | The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+setSourceRequest_senderControlPort :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Int)
+setSourceRequest_senderControlPort = Lens.lens (\SetSourceRequest' {senderControlPort} -> senderControlPort) (\s@SetSourceRequest' {} a -> s {senderControlPort = a} :: SetSourceRequest)
+
+-- | The IP address that the flow communicates with to initiate connection
+-- with the sender.
+setSourceRequest_senderIpAddress :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_senderIpAddress = Lens.lens (\SetSourceRequest' {senderIpAddress} -> senderIpAddress) (\s@SetSourceRequest' {} a -> s {senderIpAddress = a} :: SetSourceRequest)
+
+-- | Source IP or domain name for SRT-caller protocol.
+setSourceRequest_sourceListenerAddress :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_sourceListenerAddress = Lens.lens (\SetSourceRequest' {sourceListenerAddress} -> sourceListenerAddress) (\s@SetSourceRequest' {} a -> s {sourceListenerAddress = a} :: SetSourceRequest)
+
+-- | Source port for SRT-caller protocol.
+setSourceRequest_sourceListenerPort :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Int)
+setSourceRequest_sourceListenerPort = Lens.lens (\SetSourceRequest' {sourceListenerPort} -> sourceListenerPort) (\s@SetSourceRequest' {} a -> s {sourceListenerPort = a} :: SetSourceRequest)
+
+-- | The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+setSourceRequest_streamId :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_streamId = Lens.lens (\SetSourceRequest' {streamId} -> streamId) (\s@SetSourceRequest' {} a -> s {streamId = a} :: SetSourceRequest)
+
+-- | The name of the VPC interface to use for this source.
+setSourceRequest_vpcInterfaceName :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_vpcInterfaceName = Lens.lens (\SetSourceRequest' {vpcInterfaceName} -> vpcInterfaceName) (\s@SetSourceRequest' {} a -> s {vpcInterfaceName = a} :: SetSourceRequest)
+
+-- | The range of IP addresses that should be allowed to contribute content
+-- to your source. These IP addresses should be in the form of a Classless
+-- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+setSourceRequest_whitelistCidr :: Lens.Lens' SetSourceRequest (Prelude.Maybe Prelude.Text)
+setSourceRequest_whitelistCidr = Lens.lens (\SetSourceRequest' {whitelistCidr} -> whitelistCidr) (\s@SetSourceRequest' {} a -> s {whitelistCidr = a} :: SetSourceRequest)
+
+instance Prelude.Hashable SetSourceRequest where
+  hashWithSalt _salt SetSourceRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` decryption
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` entitlementArn
+      `Prelude.hashWithSalt` ingestPort
+      `Prelude.hashWithSalt` maxBitrate
+      `Prelude.hashWithSalt` maxLatency
+      `Prelude.hashWithSalt` maxSyncBuffer
+      `Prelude.hashWithSalt` mediaStreamSourceConfigurations
+      `Prelude.hashWithSalt` minLatency
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` senderControlPort
+      `Prelude.hashWithSalt` senderIpAddress
+      `Prelude.hashWithSalt` sourceListenerAddress
+      `Prelude.hashWithSalt` sourceListenerPort
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` vpcInterfaceName
+      `Prelude.hashWithSalt` whitelistCidr
+
+instance Prelude.NFData SetSourceRequest where
+  rnf SetSourceRequest' {..} =
+    Prelude.rnf decryption
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf entitlementArn
+      `Prelude.seq` Prelude.rnf ingestPort
+      `Prelude.seq` Prelude.rnf maxBitrate
+      `Prelude.seq` Prelude.rnf maxLatency
+      `Prelude.seq` Prelude.rnf maxSyncBuffer
+      `Prelude.seq` Prelude.rnf mediaStreamSourceConfigurations
+      `Prelude.seq` Prelude.rnf minLatency
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf senderControlPort
+      `Prelude.seq` Prelude.rnf senderIpAddress
+      `Prelude.seq` Prelude.rnf sourceListenerAddress
+      `Prelude.seq` Prelude.rnf sourceListenerPort
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf vpcInterfaceName
+      `Prelude.seq` Prelude.rnf whitelistCidr
+
+instance Data.ToJSON SetSourceRequest where
+  toJSON SetSourceRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("decryption" Data..=) Prelude.<$> decryption,
+            ("description" Data..=) Prelude.<$> description,
+            ("entitlementArn" Data..=)
+              Prelude.<$> entitlementArn,
+            ("ingestPort" Data..=) Prelude.<$> ingestPort,
+            ("maxBitrate" Data..=) Prelude.<$> maxBitrate,
+            ("maxLatency" Data..=) Prelude.<$> maxLatency,
+            ("maxSyncBuffer" Data..=) Prelude.<$> maxSyncBuffer,
+            ("mediaStreamSourceConfigurations" Data..=)
+              Prelude.<$> mediaStreamSourceConfigurations,
+            ("minLatency" Data..=) Prelude.<$> minLatency,
+            ("name" Data..=) Prelude.<$> name,
+            ("protocol" Data..=) Prelude.<$> protocol,
+            ("senderControlPort" Data..=)
+              Prelude.<$> senderControlPort,
+            ("senderIpAddress" Data..=)
+              Prelude.<$> senderIpAddress,
+            ("sourceListenerAddress" Data..=)
+              Prelude.<$> sourceListenerAddress,
+            ("sourceListenerPort" Data..=)
+              Prelude.<$> sourceListenerPort,
+            ("streamId" Data..=) Prelude.<$> streamId,
+            ("vpcInterfaceName" Data..=)
+              Prelude.<$> vpcInterfaceName,
+            ("whitelistCidr" Data..=) Prelude.<$> whitelistCidr
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/Source.hs b/gen/Amazonka/MediaConnect/Types/Source.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Source.hs
@@ -0,0 +1,269 @@
+{-# 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.MediaConnect.Types.Source
+-- 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.MediaConnect.Types.Source where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Encryption
+import Amazonka.MediaConnect.Types.MediaStreamSourceConfiguration
+import Amazonka.MediaConnect.Types.Transport
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for the source of the flow.
+--
+-- /See:/ 'newSource' smart constructor.
+data Source = Source'
+  { -- | Percentage from 0-100 of the data transfer cost to be billed to the
+    -- subscriber.
+    dataTransferSubscriberFeePercent :: Prelude.Maybe Prelude.Int,
+    -- | The type of encryption that is used on the content ingested from this
+    -- source.
+    decryption :: Prelude.Maybe Encryption,
+    -- | A description for the source. This value is not used or seen outside of
+    -- the current AWS Elemental MediaConnect account.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the entitlement that allows you to subscribe to content that
+    -- comes from another AWS account. The entitlement is set by the content
+    -- originator and the ARN is generated as part of the originator\'s flow.
+    entitlementArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP address that the flow will be listening on for incoming content.
+    ingestIp :: Prelude.Maybe Prelude.Text,
+    -- | The port that the flow will be listening on for incoming content.
+    ingestPort :: Prelude.Maybe Prelude.Int,
+    -- | The media streams that are associated with the source, and the
+    -- parameters for those associations.
+    mediaStreamSourceConfigurations :: Prelude.Maybe [MediaStreamSourceConfiguration],
+    -- | The port that the flow uses to send outbound requests to initiate
+    -- connection with the sender.
+    senderControlPort :: Prelude.Maybe Prelude.Int,
+    -- | The IP address that the flow communicates with to initiate connection
+    -- with the sender.
+    senderIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | Attributes related to the transport stream that are used in the source.
+    transport :: Prelude.Maybe Transport,
+    -- | The name of the VPC interface that is used for this source.
+    vpcInterfaceName :: Prelude.Maybe Prelude.Text,
+    -- | The range of IP addresses that should be allowed to contribute content
+    -- to your source. These IP addresses should be in the form of a Classless
+    -- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+    whitelistCidr :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the source.
+    sourceArn :: Prelude.Text,
+    -- | The name of the source.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Source' 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:
+--
+-- 'dataTransferSubscriberFeePercent', 'source_dataTransferSubscriberFeePercent' - Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+--
+-- 'decryption', 'source_decryption' - The type of encryption that is used on the content ingested from this
+-- source.
+--
+-- 'description', 'source_description' - A description for the source. This value is not used or seen outside of
+-- the current AWS Elemental MediaConnect account.
+--
+-- 'entitlementArn', 'source_entitlementArn' - The ARN of the entitlement that allows you to subscribe to content that
+-- comes from another AWS account. The entitlement is set by the content
+-- originator and the ARN is generated as part of the originator\'s flow.
+--
+-- 'ingestIp', 'source_ingestIp' - The IP address that the flow will be listening on for incoming content.
+--
+-- 'ingestPort', 'source_ingestPort' - The port that the flow will be listening on for incoming content.
+--
+-- 'mediaStreamSourceConfigurations', 'source_mediaStreamSourceConfigurations' - The media streams that are associated with the source, and the
+-- parameters for those associations.
+--
+-- 'senderControlPort', 'source_senderControlPort' - The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+--
+-- 'senderIpAddress', 'source_senderIpAddress' - The IP address that the flow communicates with to initiate connection
+-- with the sender.
+--
+-- 'transport', 'source_transport' - Attributes related to the transport stream that are used in the source.
+--
+-- 'vpcInterfaceName', 'source_vpcInterfaceName' - The name of the VPC interface that is used for this source.
+--
+-- 'whitelistCidr', 'source_whitelistCidr' - The range of IP addresses that should be allowed to contribute content
+-- to your source. These IP addresses should be in the form of a Classless
+-- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+--
+-- 'sourceArn', 'source_sourceArn' - The ARN of the source.
+--
+-- 'name', 'source_name' - The name of the source.
+newSource ::
+  -- | 'sourceArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  Source
+newSource pSourceArn_ pName_ =
+  Source'
+    { dataTransferSubscriberFeePercent =
+        Prelude.Nothing,
+      decryption = Prelude.Nothing,
+      description = Prelude.Nothing,
+      entitlementArn = Prelude.Nothing,
+      ingestIp = Prelude.Nothing,
+      ingestPort = Prelude.Nothing,
+      mediaStreamSourceConfigurations = Prelude.Nothing,
+      senderControlPort = Prelude.Nothing,
+      senderIpAddress = Prelude.Nothing,
+      transport = Prelude.Nothing,
+      vpcInterfaceName = Prelude.Nothing,
+      whitelistCidr = Prelude.Nothing,
+      sourceArn = pSourceArn_,
+      name = pName_
+    }
+
+-- | Percentage from 0-100 of the data transfer cost to be billed to the
+-- subscriber.
+source_dataTransferSubscriberFeePercent :: Lens.Lens' Source (Prelude.Maybe Prelude.Int)
+source_dataTransferSubscriberFeePercent = Lens.lens (\Source' {dataTransferSubscriberFeePercent} -> dataTransferSubscriberFeePercent) (\s@Source' {} a -> s {dataTransferSubscriberFeePercent = a} :: Source)
+
+-- | The type of encryption that is used on the content ingested from this
+-- source.
+source_decryption :: Lens.Lens' Source (Prelude.Maybe Encryption)
+source_decryption = Lens.lens (\Source' {decryption} -> decryption) (\s@Source' {} a -> s {decryption = a} :: Source)
+
+-- | A description for the source. This value is not used or seen outside of
+-- the current AWS Elemental MediaConnect account.
+source_description :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_description = Lens.lens (\Source' {description} -> description) (\s@Source' {} a -> s {description = a} :: Source)
+
+-- | The ARN of the entitlement that allows you to subscribe to content that
+-- comes from another AWS account. The entitlement is set by the content
+-- originator and the ARN is generated as part of the originator\'s flow.
+source_entitlementArn :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_entitlementArn = Lens.lens (\Source' {entitlementArn} -> entitlementArn) (\s@Source' {} a -> s {entitlementArn = a} :: Source)
+
+-- | The IP address that the flow will be listening on for incoming content.
+source_ingestIp :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_ingestIp = Lens.lens (\Source' {ingestIp} -> ingestIp) (\s@Source' {} a -> s {ingestIp = a} :: Source)
+
+-- | The port that the flow will be listening on for incoming content.
+source_ingestPort :: Lens.Lens' Source (Prelude.Maybe Prelude.Int)
+source_ingestPort = Lens.lens (\Source' {ingestPort} -> ingestPort) (\s@Source' {} a -> s {ingestPort = a} :: Source)
+
+-- | The media streams that are associated with the source, and the
+-- parameters for those associations.
+source_mediaStreamSourceConfigurations :: Lens.Lens' Source (Prelude.Maybe [MediaStreamSourceConfiguration])
+source_mediaStreamSourceConfigurations = Lens.lens (\Source' {mediaStreamSourceConfigurations} -> mediaStreamSourceConfigurations) (\s@Source' {} a -> s {mediaStreamSourceConfigurations = a} :: Source) Prelude.. Lens.mapping Lens.coerced
+
+-- | The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+source_senderControlPort :: Lens.Lens' Source (Prelude.Maybe Prelude.Int)
+source_senderControlPort = Lens.lens (\Source' {senderControlPort} -> senderControlPort) (\s@Source' {} a -> s {senderControlPort = a} :: Source)
+
+-- | The IP address that the flow communicates with to initiate connection
+-- with the sender.
+source_senderIpAddress :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_senderIpAddress = Lens.lens (\Source' {senderIpAddress} -> senderIpAddress) (\s@Source' {} a -> s {senderIpAddress = a} :: Source)
+
+-- | Attributes related to the transport stream that are used in the source.
+source_transport :: Lens.Lens' Source (Prelude.Maybe Transport)
+source_transport = Lens.lens (\Source' {transport} -> transport) (\s@Source' {} a -> s {transport = a} :: Source)
+
+-- | The name of the VPC interface that is used for this source.
+source_vpcInterfaceName :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_vpcInterfaceName = Lens.lens (\Source' {vpcInterfaceName} -> vpcInterfaceName) (\s@Source' {} a -> s {vpcInterfaceName = a} :: Source)
+
+-- | The range of IP addresses that should be allowed to contribute content
+-- to your source. These IP addresses should be in the form of a Classless
+-- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+source_whitelistCidr :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_whitelistCidr = Lens.lens (\Source' {whitelistCidr} -> whitelistCidr) (\s@Source' {} a -> s {whitelistCidr = a} :: Source)
+
+-- | The ARN of the source.
+source_sourceArn :: Lens.Lens' Source Prelude.Text
+source_sourceArn = Lens.lens (\Source' {sourceArn} -> sourceArn) (\s@Source' {} a -> s {sourceArn = a} :: Source)
+
+-- | The name of the source.
+source_name :: Lens.Lens' Source Prelude.Text
+source_name = Lens.lens (\Source' {name} -> name) (\s@Source' {} a -> s {name = a} :: Source)
+
+instance Data.FromJSON Source where
+  parseJSON =
+    Data.withObject
+      "Source"
+      ( \x ->
+          Source'
+            Prelude.<$> (x Data..:? "dataTransferSubscriberFeePercent")
+            Prelude.<*> (x Data..:? "decryption")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "entitlementArn")
+            Prelude.<*> (x Data..:? "ingestIp")
+            Prelude.<*> (x Data..:? "ingestPort")
+            Prelude.<*> ( x
+                            Data..:? "mediaStreamSourceConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "senderControlPort")
+            Prelude.<*> (x Data..:? "senderIpAddress")
+            Prelude.<*> (x Data..:? "transport")
+            Prelude.<*> (x Data..:? "vpcInterfaceName")
+            Prelude.<*> (x Data..:? "whitelistCidr")
+            Prelude.<*> (x Data..: "sourceArn")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable Source where
+  hashWithSalt _salt Source' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTransferSubscriberFeePercent
+      `Prelude.hashWithSalt` decryption
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` entitlementArn
+      `Prelude.hashWithSalt` ingestIp
+      `Prelude.hashWithSalt` ingestPort
+      `Prelude.hashWithSalt` mediaStreamSourceConfigurations
+      `Prelude.hashWithSalt` senderControlPort
+      `Prelude.hashWithSalt` senderIpAddress
+      `Prelude.hashWithSalt` transport
+      `Prelude.hashWithSalt` vpcInterfaceName
+      `Prelude.hashWithSalt` whitelistCidr
+      `Prelude.hashWithSalt` sourceArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Source where
+  rnf Source' {..} =
+    Prelude.rnf dataTransferSubscriberFeePercent
+      `Prelude.seq` Prelude.rnf decryption
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf entitlementArn
+      `Prelude.seq` Prelude.rnf ingestIp
+      `Prelude.seq` Prelude.rnf ingestPort
+      `Prelude.seq` Prelude.rnf mediaStreamSourceConfigurations
+      `Prelude.seq` Prelude.rnf senderControlPort
+      `Prelude.seq` Prelude.rnf senderIpAddress
+      `Prelude.seq` Prelude.rnf transport
+      `Prelude.seq` Prelude.rnf vpcInterfaceName
+      `Prelude.seq` Prelude.rnf whitelistCidr
+      `Prelude.seq` Prelude.rnf sourceArn
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MediaConnect/Types/SourcePriority.hs b/gen/Amazonka/MediaConnect/Types/SourcePriority.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/SourcePriority.hs
@@ -0,0 +1,78 @@
+{-# 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.MediaConnect.Types.SourcePriority
+-- 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.MediaConnect.Types.SourcePriority 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 priority you want to assign to a source. You can have a primary
+-- stream and a backup stream or two equally prioritized streams.
+--
+-- /See:/ 'newSourcePriority' smart constructor.
+data SourcePriority = SourcePriority'
+  { -- | The name of the source you choose as the primary source for this flow.
+    primarySource :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourcePriority' 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:
+--
+-- 'primarySource', 'sourcePriority_primarySource' - The name of the source you choose as the primary source for this flow.
+newSourcePriority ::
+  SourcePriority
+newSourcePriority =
+  SourcePriority' {primarySource = Prelude.Nothing}
+
+-- | The name of the source you choose as the primary source for this flow.
+sourcePriority_primarySource :: Lens.Lens' SourcePriority (Prelude.Maybe Prelude.Text)
+sourcePriority_primarySource = Lens.lens (\SourcePriority' {primarySource} -> primarySource) (\s@SourcePriority' {} a -> s {primarySource = a} :: SourcePriority)
+
+instance Data.FromJSON SourcePriority where
+  parseJSON =
+    Data.withObject
+      "SourcePriority"
+      ( \x ->
+          SourcePriority'
+            Prelude.<$> (x Data..:? "primarySource")
+      )
+
+instance Prelude.Hashable SourcePriority where
+  hashWithSalt _salt SourcePriority' {..} =
+    _salt `Prelude.hashWithSalt` primarySource
+
+instance Prelude.NFData SourcePriority where
+  rnf SourcePriority' {..} = Prelude.rnf primarySource
+
+instance Data.ToJSON SourcePriority where
+  toJSON SourcePriority' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("primarySource" Data..=)
+              Prelude.<$> primarySource
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/SourceType.hs b/gen/Amazonka/MediaConnect/Types/SourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/SourceType.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.MediaConnect.Types.SourceType
+-- 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.MediaConnect.Types.SourceType
+  ( SourceType
+      ( ..,
+        SourceType_ENTITLED,
+        SourceType_OWNED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SourceType = SourceType'
+  { fromSourceType ::
+      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 SourceType_ENTITLED :: SourceType
+pattern SourceType_ENTITLED = SourceType' "ENTITLED"
+
+pattern SourceType_OWNED :: SourceType
+pattern SourceType_OWNED = SourceType' "OWNED"
+
+{-# COMPLETE
+  SourceType_ENTITLED,
+  SourceType_OWNED,
+  SourceType'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/State.hs b/gen/Amazonka/MediaConnect/Types/State.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/State.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.MediaConnect.Types.State
+-- 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.MediaConnect.Types.State
+  ( State
+      ( ..,
+        State_DISABLED,
+        State_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype State = State' {fromState :: 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 State_DISABLED :: State
+pattern State_DISABLED = State' "DISABLED"
+
+pattern State_ENABLED :: State
+pattern State_ENABLED = State' "ENABLED"
+
+{-# COMPLETE
+  State_DISABLED,
+  State_ENABLED,
+  State'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Status.hs b/gen/Amazonka/MediaConnect/Types/Status.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Status.hs
@@ -0,0 +1,93 @@
+{-# 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.MediaConnect.Types.Status
+-- 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.MediaConnect.Types.Status
+  ( Status
+      ( ..,
+        Status_ACTIVE,
+        Status_DELETING,
+        Status_ERROR,
+        Status_STANDBY,
+        Status_STARTING,
+        Status_STOPPING,
+        Status_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Status = Status' {fromStatus :: 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 Status_ACTIVE :: Status
+pattern Status_ACTIVE = Status' "ACTIVE"
+
+pattern Status_DELETING :: Status
+pattern Status_DELETING = Status' "DELETING"
+
+pattern Status_ERROR :: Status
+pattern Status_ERROR = Status' "ERROR"
+
+pattern Status_STANDBY :: Status
+pattern Status_STANDBY = Status' "STANDBY"
+
+pattern Status_STARTING :: Status
+pattern Status_STARTING = Status' "STARTING"
+
+pattern Status_STOPPING :: Status
+pattern Status_STOPPING = Status' "STOPPING"
+
+pattern Status_UPDATING :: Status
+pattern Status_UPDATING = Status' "UPDATING"
+
+{-# COMPLETE
+  Status_ACTIVE,
+  Status_DELETING,
+  Status_ERROR,
+  Status_STANDBY,
+  Status_STARTING,
+  Status_STOPPING,
+  Status_UPDATING,
+  Status'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Tcs.hs b/gen/Amazonka/MediaConnect/Types/Tcs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Tcs.hs
@@ -0,0 +1,103 @@
+{-# 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.MediaConnect.Types.Tcs
+-- 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.MediaConnect.Types.Tcs
+  ( Tcs
+      ( ..,
+        Tcs_BT2100LINHLG,
+        Tcs_BT2100LINPQ,
+        Tcs_DENSITY,
+        Tcs_HLG,
+        Tcs_LINEAR,
+        Tcs_PQ,
+        Tcs_SDR,
+        Tcs_ST2065_1,
+        Tcs_ST428_1
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Tcs = Tcs' {fromTcs :: 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 Tcs_BT2100LINHLG :: Tcs
+pattern Tcs_BT2100LINHLG = Tcs' "BT2100LINHLG"
+
+pattern Tcs_BT2100LINPQ :: Tcs
+pattern Tcs_BT2100LINPQ = Tcs' "BT2100LINPQ"
+
+pattern Tcs_DENSITY :: Tcs
+pattern Tcs_DENSITY = Tcs' "DENSITY"
+
+pattern Tcs_HLG :: Tcs
+pattern Tcs_HLG = Tcs' "HLG"
+
+pattern Tcs_LINEAR :: Tcs
+pattern Tcs_LINEAR = Tcs' "LINEAR"
+
+pattern Tcs_PQ :: Tcs
+pattern Tcs_PQ = Tcs' "PQ"
+
+pattern Tcs_SDR :: Tcs
+pattern Tcs_SDR = Tcs' "SDR"
+
+pattern Tcs_ST2065_1 :: Tcs
+pattern Tcs_ST2065_1 = Tcs' "ST2065-1"
+
+pattern Tcs_ST428_1 :: Tcs
+pattern Tcs_ST428_1 = Tcs' "ST428-1"
+
+{-# COMPLETE
+  Tcs_BT2100LINHLG,
+  Tcs_BT2100LINPQ,
+  Tcs_DENSITY,
+  Tcs_HLG,
+  Tcs_LINEAR,
+  Tcs_PQ,
+  Tcs_SDR,
+  Tcs_ST2065_1,
+  Tcs_ST428_1,
+  Tcs'
+  #-}
diff --git a/gen/Amazonka/MediaConnect/Types/Transport.hs b/gen/Amazonka/MediaConnect/Types/Transport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/Transport.hs
@@ -0,0 +1,256 @@
+{-# 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.MediaConnect.Types.Transport
+-- 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.MediaConnect.Types.Transport where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Protocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes related to the transport stream that are used in a source or
+-- output.
+--
+-- /See:/ 'newTransport' smart constructor.
+data Transport = Transport'
+  { -- | The range of IP addresses that should be allowed to initiate output
+    -- requests to this flow. These IP addresses should be in the form of a
+    -- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+    cidrAllowList :: Prelude.Maybe [Prelude.Text],
+    -- | The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+    maxBitrate :: Prelude.Maybe Prelude.Int,
+    -- | The maximum latency in milliseconds. This parameter applies only to
+    -- RIST-based, Zixi-based, and Fujitsu-based streams.
+    maxLatency :: Prelude.Maybe Prelude.Int,
+    -- | The size of the buffer (in milliseconds) to use to sync incoming source
+    -- data.
+    maxSyncBuffer :: Prelude.Maybe Prelude.Int,
+    -- | The minimum latency in milliseconds for SRT-based streams. In streams
+    -- that use the SRT protocol, this value that you set on your MediaConnect
+    -- source or output represents the minimal potential latency of that
+    -- connection. The latency of the stream is set to the highest number
+    -- between the sender’s minimum latency and the receiver’s minimum latency.
+    minLatency :: Prelude.Maybe Prelude.Int,
+    -- | The remote ID for the Zixi-pull stream.
+    remoteId :: Prelude.Maybe Prelude.Text,
+    -- | The port that the flow uses to send outbound requests to initiate
+    -- connection with the sender.
+    senderControlPort :: Prelude.Maybe Prelude.Int,
+    -- | The IP address that the flow communicates with to initiate connection
+    -- with the sender.
+    senderIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+    -- streams.
+    smoothingLatency :: Prelude.Maybe Prelude.Int,
+    -- | Source IP or domain name for SRT-caller protocol.
+    sourceListenerAddress :: Prelude.Maybe Prelude.Text,
+    -- | Source port for SRT-caller protocol.
+    sourceListenerPort :: Prelude.Maybe Prelude.Int,
+    -- | The stream ID that you want to use for this transport. This parameter
+    -- applies only to Zixi-based streams.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The protocol that is used by the source or output.
+    protocol :: Protocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Transport' 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:
+--
+-- 'cidrAllowList', 'transport_cidrAllowList' - The range of IP addresses that should be allowed to initiate output
+-- requests to this flow. These IP addresses should be in the form of a
+-- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+--
+-- 'maxBitrate', 'transport_maxBitrate' - The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+--
+-- 'maxLatency', 'transport_maxLatency' - The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+--
+-- 'maxSyncBuffer', 'transport_maxSyncBuffer' - The size of the buffer (in milliseconds) to use to sync incoming source
+-- data.
+--
+-- 'minLatency', 'transport_minLatency' - The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+--
+-- 'remoteId', 'transport_remoteId' - The remote ID for the Zixi-pull stream.
+--
+-- 'senderControlPort', 'transport_senderControlPort' - The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+--
+-- 'senderIpAddress', 'transport_senderIpAddress' - The IP address that the flow communicates with to initiate connection
+-- with the sender.
+--
+-- 'smoothingLatency', 'transport_smoothingLatency' - The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+-- streams.
+--
+-- 'sourceListenerAddress', 'transport_sourceListenerAddress' - Source IP or domain name for SRT-caller protocol.
+--
+-- 'sourceListenerPort', 'transport_sourceListenerPort' - Source port for SRT-caller protocol.
+--
+-- 'streamId', 'transport_streamId' - The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+--
+-- 'protocol', 'transport_protocol' - The protocol that is used by the source or output.
+newTransport ::
+  -- | 'protocol'
+  Protocol ->
+  Transport
+newTransport pProtocol_ =
+  Transport'
+    { cidrAllowList = Prelude.Nothing,
+      maxBitrate = Prelude.Nothing,
+      maxLatency = Prelude.Nothing,
+      maxSyncBuffer = Prelude.Nothing,
+      minLatency = Prelude.Nothing,
+      remoteId = Prelude.Nothing,
+      senderControlPort = Prelude.Nothing,
+      senderIpAddress = Prelude.Nothing,
+      smoothingLatency = Prelude.Nothing,
+      sourceListenerAddress = Prelude.Nothing,
+      sourceListenerPort = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      protocol = pProtocol_
+    }
+
+-- | The range of IP addresses that should be allowed to initiate output
+-- requests to this flow. These IP addresses should be in the form of a
+-- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+transport_cidrAllowList :: Lens.Lens' Transport (Prelude.Maybe [Prelude.Text])
+transport_cidrAllowList = Lens.lens (\Transport' {cidrAllowList} -> cidrAllowList) (\s@Transport' {} a -> s {cidrAllowList = a} :: Transport) Prelude.. Lens.mapping Lens.coerced
+
+-- | The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+transport_maxBitrate :: Lens.Lens' Transport (Prelude.Maybe Prelude.Int)
+transport_maxBitrate = Lens.lens (\Transport' {maxBitrate} -> maxBitrate) (\s@Transport' {} a -> s {maxBitrate = a} :: Transport)
+
+-- | The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+transport_maxLatency :: Lens.Lens' Transport (Prelude.Maybe Prelude.Int)
+transport_maxLatency = Lens.lens (\Transport' {maxLatency} -> maxLatency) (\s@Transport' {} a -> s {maxLatency = a} :: Transport)
+
+-- | The size of the buffer (in milliseconds) to use to sync incoming source
+-- data.
+transport_maxSyncBuffer :: Lens.Lens' Transport (Prelude.Maybe Prelude.Int)
+transport_maxSyncBuffer = Lens.lens (\Transport' {maxSyncBuffer} -> maxSyncBuffer) (\s@Transport' {} a -> s {maxSyncBuffer = a} :: Transport)
+
+-- | The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+transport_minLatency :: Lens.Lens' Transport (Prelude.Maybe Prelude.Int)
+transport_minLatency = Lens.lens (\Transport' {minLatency} -> minLatency) (\s@Transport' {} a -> s {minLatency = a} :: Transport)
+
+-- | The remote ID for the Zixi-pull stream.
+transport_remoteId :: Lens.Lens' Transport (Prelude.Maybe Prelude.Text)
+transport_remoteId = Lens.lens (\Transport' {remoteId} -> remoteId) (\s@Transport' {} a -> s {remoteId = a} :: Transport)
+
+-- | The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+transport_senderControlPort :: Lens.Lens' Transport (Prelude.Maybe Prelude.Int)
+transport_senderControlPort = Lens.lens (\Transport' {senderControlPort} -> senderControlPort) (\s@Transport' {} a -> s {senderControlPort = a} :: Transport)
+
+-- | The IP address that the flow communicates with to initiate connection
+-- with the sender.
+transport_senderIpAddress :: Lens.Lens' Transport (Prelude.Maybe Prelude.Text)
+transport_senderIpAddress = Lens.lens (\Transport' {senderIpAddress} -> senderIpAddress) (\s@Transport' {} a -> s {senderIpAddress = a} :: Transport)
+
+-- | The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+-- streams.
+transport_smoothingLatency :: Lens.Lens' Transport (Prelude.Maybe Prelude.Int)
+transport_smoothingLatency = Lens.lens (\Transport' {smoothingLatency} -> smoothingLatency) (\s@Transport' {} a -> s {smoothingLatency = a} :: Transport)
+
+-- | Source IP or domain name for SRT-caller protocol.
+transport_sourceListenerAddress :: Lens.Lens' Transport (Prelude.Maybe Prelude.Text)
+transport_sourceListenerAddress = Lens.lens (\Transport' {sourceListenerAddress} -> sourceListenerAddress) (\s@Transport' {} a -> s {sourceListenerAddress = a} :: Transport)
+
+-- | Source port for SRT-caller protocol.
+transport_sourceListenerPort :: Lens.Lens' Transport (Prelude.Maybe Prelude.Int)
+transport_sourceListenerPort = Lens.lens (\Transport' {sourceListenerPort} -> sourceListenerPort) (\s@Transport' {} a -> s {sourceListenerPort = a} :: Transport)
+
+-- | The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+transport_streamId :: Lens.Lens' Transport (Prelude.Maybe Prelude.Text)
+transport_streamId = Lens.lens (\Transport' {streamId} -> streamId) (\s@Transport' {} a -> s {streamId = a} :: Transport)
+
+-- | The protocol that is used by the source or output.
+transport_protocol :: Lens.Lens' Transport Protocol
+transport_protocol = Lens.lens (\Transport' {protocol} -> protocol) (\s@Transport' {} a -> s {protocol = a} :: Transport)
+
+instance Data.FromJSON Transport where
+  parseJSON =
+    Data.withObject
+      "Transport"
+      ( \x ->
+          Transport'
+            Prelude.<$> (x Data..:? "cidrAllowList" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "maxBitrate")
+            Prelude.<*> (x Data..:? "maxLatency")
+            Prelude.<*> (x Data..:? "maxSyncBuffer")
+            Prelude.<*> (x Data..:? "minLatency")
+            Prelude.<*> (x Data..:? "remoteId")
+            Prelude.<*> (x Data..:? "senderControlPort")
+            Prelude.<*> (x Data..:? "senderIpAddress")
+            Prelude.<*> (x Data..:? "smoothingLatency")
+            Prelude.<*> (x Data..:? "sourceListenerAddress")
+            Prelude.<*> (x Data..:? "sourceListenerPort")
+            Prelude.<*> (x Data..:? "streamId")
+            Prelude.<*> (x Data..: "protocol")
+      )
+
+instance Prelude.Hashable Transport where
+  hashWithSalt _salt Transport' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrAllowList
+      `Prelude.hashWithSalt` maxBitrate
+      `Prelude.hashWithSalt` maxLatency
+      `Prelude.hashWithSalt` maxSyncBuffer
+      `Prelude.hashWithSalt` minLatency
+      `Prelude.hashWithSalt` remoteId
+      `Prelude.hashWithSalt` senderControlPort
+      `Prelude.hashWithSalt` senderIpAddress
+      `Prelude.hashWithSalt` smoothingLatency
+      `Prelude.hashWithSalt` sourceListenerAddress
+      `Prelude.hashWithSalt` sourceListenerPort
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` protocol
+
+instance Prelude.NFData Transport where
+  rnf Transport' {..} =
+    Prelude.rnf cidrAllowList
+      `Prelude.seq` Prelude.rnf maxBitrate
+      `Prelude.seq` Prelude.rnf maxLatency
+      `Prelude.seq` Prelude.rnf maxSyncBuffer
+      `Prelude.seq` Prelude.rnf minLatency
+      `Prelude.seq` Prelude.rnf remoteId
+      `Prelude.seq` Prelude.rnf senderControlPort
+      `Prelude.seq` Prelude.rnf senderIpAddress
+      `Prelude.seq` Prelude.rnf smoothingLatency
+      `Prelude.seq` Prelude.rnf sourceListenerAddress
+      `Prelude.seq` Prelude.rnf sourceListenerPort
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf protocol
diff --git a/gen/Amazonka/MediaConnect/Types/UpdateEncryption.hs b/gen/Amazonka/MediaConnect/Types/UpdateEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/UpdateEncryption.hs
@@ -0,0 +1,221 @@
+{-# 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.MediaConnect.Types.UpdateEncryption
+-- 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.MediaConnect.Types.UpdateEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.Algorithm
+import Amazonka.MediaConnect.Types.KeyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the encryption of the flow.
+--
+-- /See:/ 'newUpdateEncryption' smart constructor.
+data UpdateEncryption = UpdateEncryption'
+  { -- | The type of algorithm that is used for the encryption (such as aes128,
+    -- aes192, or aes256).
+    algorithm :: Prelude.Maybe Algorithm,
+    -- | A 128-bit, 16-byte hex value represented by a 32-character string, to be
+    -- used with the key for encrypting content. This parameter is not valid
+    -- for static key encryption.
+    constantInitializationVector :: Prelude.Maybe Prelude.Text,
+    -- | The value of one of the devices that you configured with your digital
+    -- rights management (DRM) platform key provider. This parameter is
+    -- required for SPEKE encryption and is not valid for static key
+    -- encryption.
+    deviceId :: Prelude.Maybe Prelude.Text,
+    -- | The type of key that is used for the encryption. If no keyType is
+    -- provided, the service will use the default setting (static-key).
+    keyType :: Prelude.Maybe KeyType,
+    -- | The AWS Region that the API Gateway proxy endpoint was created in. This
+    -- parameter is required for SPEKE encryption and is not valid for static
+    -- key encryption.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | An identifier for the content. The service sends this value to the key
+    -- server to identify the current endpoint. The resource ID is also known
+    -- as the content ID. This parameter is required for SPEKE encryption and
+    -- is not valid for static key encryption.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the role that you created during setup (when you set up AWS
+    -- Elemental MediaConnect as a trusted entity).
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the secret that you created in AWS Secrets Manager to store
+    -- the encryption key. This parameter is required for static key encryption
+    -- and is not valid for SPEKE encryption.
+    secretArn :: Prelude.Maybe Prelude.Text,
+    -- | The URL from the API Gateway proxy that you set up to talk to your key
+    -- server. This parameter is required for SPEKE encryption and is not valid
+    -- for static key encryption.
+    url :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEncryption' 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:
+--
+-- 'algorithm', 'updateEncryption_algorithm' - The type of algorithm that is used for the encryption (such as aes128,
+-- aes192, or aes256).
+--
+-- 'constantInitializationVector', 'updateEncryption_constantInitializationVector' - A 128-bit, 16-byte hex value represented by a 32-character string, to be
+-- used with the key for encrypting content. This parameter is not valid
+-- for static key encryption.
+--
+-- 'deviceId', 'updateEncryption_deviceId' - The value of one of the devices that you configured with your digital
+-- rights management (DRM) platform key provider. This parameter is
+-- required for SPEKE encryption and is not valid for static key
+-- encryption.
+--
+-- 'keyType', 'updateEncryption_keyType' - The type of key that is used for the encryption. If no keyType is
+-- provided, the service will use the default setting (static-key).
+--
+-- 'region', 'updateEncryption_region' - The AWS Region that the API Gateway proxy endpoint was created in. This
+-- parameter is required for SPEKE encryption and is not valid for static
+-- key encryption.
+--
+-- 'resourceId', 'updateEncryption_resourceId' - An identifier for the content. The service sends this value to the key
+-- server to identify the current endpoint. The resource ID is also known
+-- as the content ID. This parameter is required for SPEKE encryption and
+-- is not valid for static key encryption.
+--
+-- 'roleArn', 'updateEncryption_roleArn' - The ARN of the role that you created during setup (when you set up AWS
+-- Elemental MediaConnect as a trusted entity).
+--
+-- 'secretArn', 'updateEncryption_secretArn' - The ARN of the secret that you created in AWS Secrets Manager to store
+-- the encryption key. This parameter is required for static key encryption
+-- and is not valid for SPEKE encryption.
+--
+-- 'url', 'updateEncryption_url' - The URL from the API Gateway proxy that you set up to talk to your key
+-- server. This parameter is required for SPEKE encryption and is not valid
+-- for static key encryption.
+newUpdateEncryption ::
+  UpdateEncryption
+newUpdateEncryption =
+  UpdateEncryption'
+    { algorithm = Prelude.Nothing,
+      constantInitializationVector = Prelude.Nothing,
+      deviceId = Prelude.Nothing,
+      keyType = Prelude.Nothing,
+      region = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      secretArn = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | The type of algorithm that is used for the encryption (such as aes128,
+-- aes192, or aes256).
+updateEncryption_algorithm :: Lens.Lens' UpdateEncryption (Prelude.Maybe Algorithm)
+updateEncryption_algorithm = Lens.lens (\UpdateEncryption' {algorithm} -> algorithm) (\s@UpdateEncryption' {} a -> s {algorithm = a} :: UpdateEncryption)
+
+-- | A 128-bit, 16-byte hex value represented by a 32-character string, to be
+-- used with the key for encrypting content. This parameter is not valid
+-- for static key encryption.
+updateEncryption_constantInitializationVector :: Lens.Lens' UpdateEncryption (Prelude.Maybe Prelude.Text)
+updateEncryption_constantInitializationVector = Lens.lens (\UpdateEncryption' {constantInitializationVector} -> constantInitializationVector) (\s@UpdateEncryption' {} a -> s {constantInitializationVector = a} :: UpdateEncryption)
+
+-- | The value of one of the devices that you configured with your digital
+-- rights management (DRM) platform key provider. This parameter is
+-- required for SPEKE encryption and is not valid for static key
+-- encryption.
+updateEncryption_deviceId :: Lens.Lens' UpdateEncryption (Prelude.Maybe Prelude.Text)
+updateEncryption_deviceId = Lens.lens (\UpdateEncryption' {deviceId} -> deviceId) (\s@UpdateEncryption' {} a -> s {deviceId = a} :: UpdateEncryption)
+
+-- | The type of key that is used for the encryption. If no keyType is
+-- provided, the service will use the default setting (static-key).
+updateEncryption_keyType :: Lens.Lens' UpdateEncryption (Prelude.Maybe KeyType)
+updateEncryption_keyType = Lens.lens (\UpdateEncryption' {keyType} -> keyType) (\s@UpdateEncryption' {} a -> s {keyType = a} :: UpdateEncryption)
+
+-- | The AWS Region that the API Gateway proxy endpoint was created in. This
+-- parameter is required for SPEKE encryption and is not valid for static
+-- key encryption.
+updateEncryption_region :: Lens.Lens' UpdateEncryption (Prelude.Maybe Prelude.Text)
+updateEncryption_region = Lens.lens (\UpdateEncryption' {region} -> region) (\s@UpdateEncryption' {} a -> s {region = a} :: UpdateEncryption)
+
+-- | An identifier for the content. The service sends this value to the key
+-- server to identify the current endpoint. The resource ID is also known
+-- as the content ID. This parameter is required for SPEKE encryption and
+-- is not valid for static key encryption.
+updateEncryption_resourceId :: Lens.Lens' UpdateEncryption (Prelude.Maybe Prelude.Text)
+updateEncryption_resourceId = Lens.lens (\UpdateEncryption' {resourceId} -> resourceId) (\s@UpdateEncryption' {} a -> s {resourceId = a} :: UpdateEncryption)
+
+-- | The ARN of the role that you created during setup (when you set up AWS
+-- Elemental MediaConnect as a trusted entity).
+updateEncryption_roleArn :: Lens.Lens' UpdateEncryption (Prelude.Maybe Prelude.Text)
+updateEncryption_roleArn = Lens.lens (\UpdateEncryption' {roleArn} -> roleArn) (\s@UpdateEncryption' {} a -> s {roleArn = a} :: UpdateEncryption)
+
+-- | The ARN of the secret that you created in AWS Secrets Manager to store
+-- the encryption key. This parameter is required for static key encryption
+-- and is not valid for SPEKE encryption.
+updateEncryption_secretArn :: Lens.Lens' UpdateEncryption (Prelude.Maybe Prelude.Text)
+updateEncryption_secretArn = Lens.lens (\UpdateEncryption' {secretArn} -> secretArn) (\s@UpdateEncryption' {} a -> s {secretArn = a} :: UpdateEncryption)
+
+-- | The URL from the API Gateway proxy that you set up to talk to your key
+-- server. This parameter is required for SPEKE encryption and is not valid
+-- for static key encryption.
+updateEncryption_url :: Lens.Lens' UpdateEncryption (Prelude.Maybe Prelude.Text)
+updateEncryption_url = Lens.lens (\UpdateEncryption' {url} -> url) (\s@UpdateEncryption' {} a -> s {url = a} :: UpdateEncryption)
+
+instance Prelude.Hashable UpdateEncryption where
+  hashWithSalt _salt UpdateEncryption' {..} =
+    _salt
+      `Prelude.hashWithSalt` algorithm
+      `Prelude.hashWithSalt` constantInitializationVector
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` keyType
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData UpdateEncryption where
+  rnf UpdateEncryption' {..} =
+    Prelude.rnf algorithm
+      `Prelude.seq` Prelude.rnf constantInitializationVector
+      `Prelude.seq` Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf keyType
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf url
+
+instance Data.ToJSON UpdateEncryption where
+  toJSON UpdateEncryption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("algorithm" Data..=) Prelude.<$> algorithm,
+            ("constantInitializationVector" Data..=)
+              Prelude.<$> constantInitializationVector,
+            ("deviceId" Data..=) Prelude.<$> deviceId,
+            ("keyType" Data..=) Prelude.<$> keyType,
+            ("region" Data..=) Prelude.<$> region,
+            ("resourceId" Data..=) Prelude.<$> resourceId,
+            ("roleArn" Data..=) Prelude.<$> roleArn,
+            ("secretArn" Data..=) Prelude.<$> secretArn,
+            ("url" Data..=) Prelude.<$> url
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/UpdateFailoverConfig.hs b/gen/Amazonka/MediaConnect/Types/UpdateFailoverConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/UpdateFailoverConfig.hs
@@ -0,0 +1,121 @@
+{-# 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.MediaConnect.Types.UpdateFailoverConfig
+-- 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.MediaConnect.Types.UpdateFailoverConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.FailoverMode
+import Amazonka.MediaConnect.Types.SourcePriority
+import Amazonka.MediaConnect.Types.State
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for source failover.
+--
+-- /See:/ 'newUpdateFailoverConfig' smart constructor.
+data UpdateFailoverConfig = UpdateFailoverConfig'
+  { -- | The type of failover you choose for this flow. MERGE combines the source
+    -- streams into a single stream, allowing graceful recovery from any
+    -- single-source loss. FAILOVER allows switching between different streams.
+    failoverMode :: Prelude.Maybe FailoverMode,
+    -- | Recovery window time to look for dash-7 packets
+    recoveryWindow :: Prelude.Maybe Prelude.Int,
+    -- | The priority you want to assign to a source. You can have a primary
+    -- stream and a backup stream or two equally prioritized streams.
+    sourcePriority :: Prelude.Maybe SourcePriority,
+    state :: Prelude.Maybe State
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFailoverConfig' 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:
+--
+-- 'failoverMode', 'updateFailoverConfig_failoverMode' - The type of failover you choose for this flow. MERGE combines the source
+-- streams into a single stream, allowing graceful recovery from any
+-- single-source loss. FAILOVER allows switching between different streams.
+--
+-- 'recoveryWindow', 'updateFailoverConfig_recoveryWindow' - Recovery window time to look for dash-7 packets
+--
+-- 'sourcePriority', 'updateFailoverConfig_sourcePriority' - The priority you want to assign to a source. You can have a primary
+-- stream and a backup stream or two equally prioritized streams.
+--
+-- 'state', 'updateFailoverConfig_state' - Undocumented member.
+newUpdateFailoverConfig ::
+  UpdateFailoverConfig
+newUpdateFailoverConfig =
+  UpdateFailoverConfig'
+    { failoverMode =
+        Prelude.Nothing,
+      recoveryWindow = Prelude.Nothing,
+      sourcePriority = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The type of failover you choose for this flow. MERGE combines the source
+-- streams into a single stream, allowing graceful recovery from any
+-- single-source loss. FAILOVER allows switching between different streams.
+updateFailoverConfig_failoverMode :: Lens.Lens' UpdateFailoverConfig (Prelude.Maybe FailoverMode)
+updateFailoverConfig_failoverMode = Lens.lens (\UpdateFailoverConfig' {failoverMode} -> failoverMode) (\s@UpdateFailoverConfig' {} a -> s {failoverMode = a} :: UpdateFailoverConfig)
+
+-- | Recovery window time to look for dash-7 packets
+updateFailoverConfig_recoveryWindow :: Lens.Lens' UpdateFailoverConfig (Prelude.Maybe Prelude.Int)
+updateFailoverConfig_recoveryWindow = Lens.lens (\UpdateFailoverConfig' {recoveryWindow} -> recoveryWindow) (\s@UpdateFailoverConfig' {} a -> s {recoveryWindow = a} :: UpdateFailoverConfig)
+
+-- | The priority you want to assign to a source. You can have a primary
+-- stream and a backup stream or two equally prioritized streams.
+updateFailoverConfig_sourcePriority :: Lens.Lens' UpdateFailoverConfig (Prelude.Maybe SourcePriority)
+updateFailoverConfig_sourcePriority = Lens.lens (\UpdateFailoverConfig' {sourcePriority} -> sourcePriority) (\s@UpdateFailoverConfig' {} a -> s {sourcePriority = a} :: UpdateFailoverConfig)
+
+-- | Undocumented member.
+updateFailoverConfig_state :: Lens.Lens' UpdateFailoverConfig (Prelude.Maybe State)
+updateFailoverConfig_state = Lens.lens (\UpdateFailoverConfig' {state} -> state) (\s@UpdateFailoverConfig' {} a -> s {state = a} :: UpdateFailoverConfig)
+
+instance Prelude.Hashable UpdateFailoverConfig where
+  hashWithSalt _salt UpdateFailoverConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` failoverMode
+      `Prelude.hashWithSalt` recoveryWindow
+      `Prelude.hashWithSalt` sourcePriority
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData UpdateFailoverConfig where
+  rnf UpdateFailoverConfig' {..} =
+    Prelude.rnf failoverMode
+      `Prelude.seq` Prelude.rnf recoveryWindow
+      `Prelude.seq` Prelude.rnf sourcePriority
+      `Prelude.seq` Prelude.rnf state
+
+instance Data.ToJSON UpdateFailoverConfig where
+  toJSON UpdateFailoverConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("failoverMode" Data..=) Prelude.<$> failoverMode,
+            ("recoveryWindow" Data..=)
+              Prelude.<$> recoveryWindow,
+            ("sourcePriority" Data..=)
+              Prelude.<$> sourcePriority,
+            ("state" Data..=) Prelude.<$> state
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/UpdateMaintenance.hs b/gen/Amazonka/MediaConnect/Types/UpdateMaintenance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/UpdateMaintenance.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.UpdateMaintenance
+-- 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.MediaConnect.Types.UpdateMaintenance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.MaintenanceDay
+import qualified Amazonka.Prelude as Prelude
+
+-- | Update maintenance setting for a flow
+--
+-- /See:/ 'newUpdateMaintenance' smart constructor.
+data UpdateMaintenance = UpdateMaintenance'
+  { -- | A day of a week when the maintenance will happen. use
+    -- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+    maintenanceDay :: Prelude.Maybe MaintenanceDay,
+    -- | A scheduled date in ISO UTC format when the maintenance will happen. Use
+    -- YYYY-MM-DD format. Example: 2021-01-30.
+    maintenanceScheduledDate :: Prelude.Maybe Prelude.Text,
+    -- | UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+    -- Minutes must be 00. Example: 13:00. The default value is 02:00.
+    maintenanceStartHour :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMaintenance' 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:
+--
+-- 'maintenanceDay', 'updateMaintenance_maintenanceDay' - A day of a week when the maintenance will happen. use
+-- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+--
+-- 'maintenanceScheduledDate', 'updateMaintenance_maintenanceScheduledDate' - A scheduled date in ISO UTC format when the maintenance will happen. Use
+-- YYYY-MM-DD format. Example: 2021-01-30.
+--
+-- 'maintenanceStartHour', 'updateMaintenance_maintenanceStartHour' - UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+-- Minutes must be 00. Example: 13:00. The default value is 02:00.
+newUpdateMaintenance ::
+  UpdateMaintenance
+newUpdateMaintenance =
+  UpdateMaintenance'
+    { maintenanceDay =
+        Prelude.Nothing,
+      maintenanceScheduledDate = Prelude.Nothing,
+      maintenanceStartHour = Prelude.Nothing
+    }
+
+-- | A day of a week when the maintenance will happen. use
+-- Monday\/Tuesday\/Wednesday\/Thursday\/Friday\/Saturday\/Sunday.
+updateMaintenance_maintenanceDay :: Lens.Lens' UpdateMaintenance (Prelude.Maybe MaintenanceDay)
+updateMaintenance_maintenanceDay = Lens.lens (\UpdateMaintenance' {maintenanceDay} -> maintenanceDay) (\s@UpdateMaintenance' {} a -> s {maintenanceDay = a} :: UpdateMaintenance)
+
+-- | A scheduled date in ISO UTC format when the maintenance will happen. Use
+-- YYYY-MM-DD format. Example: 2021-01-30.
+updateMaintenance_maintenanceScheduledDate :: Lens.Lens' UpdateMaintenance (Prelude.Maybe Prelude.Text)
+updateMaintenance_maintenanceScheduledDate = Lens.lens (\UpdateMaintenance' {maintenanceScheduledDate} -> maintenanceScheduledDate) (\s@UpdateMaintenance' {} a -> s {maintenanceScheduledDate = a} :: UpdateMaintenance)
+
+-- | UTC time when the maintenance will happen. Use 24-hour HH:MM format.
+-- Minutes must be 00. Example: 13:00. The default value is 02:00.
+updateMaintenance_maintenanceStartHour :: Lens.Lens' UpdateMaintenance (Prelude.Maybe Prelude.Text)
+updateMaintenance_maintenanceStartHour = Lens.lens (\UpdateMaintenance' {maintenanceStartHour} -> maintenanceStartHour) (\s@UpdateMaintenance' {} a -> s {maintenanceStartHour = a} :: UpdateMaintenance)
+
+instance Prelude.Hashable UpdateMaintenance where
+  hashWithSalt _salt UpdateMaintenance' {..} =
+    _salt
+      `Prelude.hashWithSalt` maintenanceDay
+      `Prelude.hashWithSalt` maintenanceScheduledDate
+      `Prelude.hashWithSalt` maintenanceStartHour
+
+instance Prelude.NFData UpdateMaintenance where
+  rnf UpdateMaintenance' {..} =
+    Prelude.rnf maintenanceDay
+      `Prelude.seq` Prelude.rnf maintenanceScheduledDate
+      `Prelude.seq` Prelude.rnf maintenanceStartHour
+
+instance Data.ToJSON UpdateMaintenance where
+  toJSON UpdateMaintenance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maintenanceDay" Data..=)
+              Prelude.<$> maintenanceDay,
+            ("maintenanceScheduledDate" Data..=)
+              Prelude.<$> maintenanceScheduledDate,
+            ("maintenanceStartHour" Data..=)
+              Prelude.<$> maintenanceStartHour
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/VpcInterface.hs b/gen/Amazonka/MediaConnect/Types/VpcInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/VpcInterface.hs
@@ -0,0 +1,158 @@
+{-# 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.MediaConnect.Types.VpcInterface
+-- 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.MediaConnect.Types.VpcInterface where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.NetworkInterfaceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The settings for a VPC Source.
+--
+-- /See:/ 'newVpcInterface' smart constructor.
+data VpcInterface = VpcInterface'
+  { -- | The type of network interface.
+    networkInterfaceType :: NetworkInterfaceType,
+    -- | IDs of the network interfaces created in customer\'s account by
+    -- MediaConnect.
+    networkInterfaceIds :: [Prelude.Text],
+    -- | Subnet must be in the AZ of the Flow
+    subnetId :: Prelude.Text,
+    -- | Security Group IDs to be used on ENI.
+    securityGroupIds :: [Prelude.Text],
+    -- | Role Arn MediaConnect can assumes to create ENIs in customer\'s account
+    roleArn :: Prelude.Text,
+    -- | Immutable and has to be a unique against other VpcInterfaces in this
+    -- Flow.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcInterface' 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:
+--
+-- 'networkInterfaceType', 'vpcInterface_networkInterfaceType' - The type of network interface.
+--
+-- 'networkInterfaceIds', 'vpcInterface_networkInterfaceIds' - IDs of the network interfaces created in customer\'s account by
+-- MediaConnect.
+--
+-- 'subnetId', 'vpcInterface_subnetId' - Subnet must be in the AZ of the Flow
+--
+-- 'securityGroupIds', 'vpcInterface_securityGroupIds' - Security Group IDs to be used on ENI.
+--
+-- 'roleArn', 'vpcInterface_roleArn' - Role Arn MediaConnect can assumes to create ENIs in customer\'s account
+--
+-- 'name', 'vpcInterface_name' - Immutable and has to be a unique against other VpcInterfaces in this
+-- Flow.
+newVpcInterface ::
+  -- | 'networkInterfaceType'
+  NetworkInterfaceType ->
+  -- | 'subnetId'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  VpcInterface
+newVpcInterface
+  pNetworkInterfaceType_
+  pSubnetId_
+  pRoleArn_
+  pName_ =
+    VpcInterface'
+      { networkInterfaceType =
+          pNetworkInterfaceType_,
+        networkInterfaceIds = Prelude.mempty,
+        subnetId = pSubnetId_,
+        securityGroupIds = Prelude.mempty,
+        roleArn = pRoleArn_,
+        name = pName_
+      }
+
+-- | The type of network interface.
+vpcInterface_networkInterfaceType :: Lens.Lens' VpcInterface NetworkInterfaceType
+vpcInterface_networkInterfaceType = Lens.lens (\VpcInterface' {networkInterfaceType} -> networkInterfaceType) (\s@VpcInterface' {} a -> s {networkInterfaceType = a} :: VpcInterface)
+
+-- | IDs of the network interfaces created in customer\'s account by
+-- MediaConnect.
+vpcInterface_networkInterfaceIds :: Lens.Lens' VpcInterface [Prelude.Text]
+vpcInterface_networkInterfaceIds = Lens.lens (\VpcInterface' {networkInterfaceIds} -> networkInterfaceIds) (\s@VpcInterface' {} a -> s {networkInterfaceIds = a} :: VpcInterface) Prelude.. Lens.coerced
+
+-- | Subnet must be in the AZ of the Flow
+vpcInterface_subnetId :: Lens.Lens' VpcInterface Prelude.Text
+vpcInterface_subnetId = Lens.lens (\VpcInterface' {subnetId} -> subnetId) (\s@VpcInterface' {} a -> s {subnetId = a} :: VpcInterface)
+
+-- | Security Group IDs to be used on ENI.
+vpcInterface_securityGroupIds :: Lens.Lens' VpcInterface [Prelude.Text]
+vpcInterface_securityGroupIds = Lens.lens (\VpcInterface' {securityGroupIds} -> securityGroupIds) (\s@VpcInterface' {} a -> s {securityGroupIds = a} :: VpcInterface) Prelude.. Lens.coerced
+
+-- | Role Arn MediaConnect can assumes to create ENIs in customer\'s account
+vpcInterface_roleArn :: Lens.Lens' VpcInterface Prelude.Text
+vpcInterface_roleArn = Lens.lens (\VpcInterface' {roleArn} -> roleArn) (\s@VpcInterface' {} a -> s {roleArn = a} :: VpcInterface)
+
+-- | Immutable and has to be a unique against other VpcInterfaces in this
+-- Flow.
+vpcInterface_name :: Lens.Lens' VpcInterface Prelude.Text
+vpcInterface_name = Lens.lens (\VpcInterface' {name} -> name) (\s@VpcInterface' {} a -> s {name = a} :: VpcInterface)
+
+instance Data.FromJSON VpcInterface where
+  parseJSON =
+    Data.withObject
+      "VpcInterface"
+      ( \x ->
+          VpcInterface'
+            Prelude.<$> (x Data..: "networkInterfaceType")
+            Prelude.<*> ( x
+                            Data..:? "networkInterfaceIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "subnetId")
+            Prelude.<*> ( x
+                            Data..:? "securityGroupIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "roleArn")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable VpcInterface where
+  hashWithSalt _salt VpcInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkInterfaceType
+      `Prelude.hashWithSalt` networkInterfaceIds
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData VpcInterface where
+  rnf VpcInterface' {..} =
+    Prelude.rnf networkInterfaceType
+      `Prelude.seq` Prelude.rnf networkInterfaceIds
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/MediaConnect/Types/VpcInterfaceAttachment.hs b/gen/Amazonka/MediaConnect/Types/VpcInterfaceAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/VpcInterfaceAttachment.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MediaConnect.Types.VpcInterfaceAttachment
+-- 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.MediaConnect.Types.VpcInterfaceAttachment 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 settings for attaching a VPC interface to an output.
+--
+-- /See:/ 'newVpcInterfaceAttachment' smart constructor.
+data VpcInterfaceAttachment = VpcInterfaceAttachment'
+  { -- | The name of the VPC interface to use for this output.
+    vpcInterfaceName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcInterfaceAttachment' 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:
+--
+-- 'vpcInterfaceName', 'vpcInterfaceAttachment_vpcInterfaceName' - The name of the VPC interface to use for this output.
+newVpcInterfaceAttachment ::
+  VpcInterfaceAttachment
+newVpcInterfaceAttachment =
+  VpcInterfaceAttachment'
+    { vpcInterfaceName =
+        Prelude.Nothing
+    }
+
+-- | The name of the VPC interface to use for this output.
+vpcInterfaceAttachment_vpcInterfaceName :: Lens.Lens' VpcInterfaceAttachment (Prelude.Maybe Prelude.Text)
+vpcInterfaceAttachment_vpcInterfaceName = Lens.lens (\VpcInterfaceAttachment' {vpcInterfaceName} -> vpcInterfaceName) (\s@VpcInterfaceAttachment' {} a -> s {vpcInterfaceName = a} :: VpcInterfaceAttachment)
+
+instance Data.FromJSON VpcInterfaceAttachment where
+  parseJSON =
+    Data.withObject
+      "VpcInterfaceAttachment"
+      ( \x ->
+          VpcInterfaceAttachment'
+            Prelude.<$> (x Data..:? "vpcInterfaceName")
+      )
+
+instance Prelude.Hashable VpcInterfaceAttachment where
+  hashWithSalt _salt VpcInterfaceAttachment' {..} =
+    _salt `Prelude.hashWithSalt` vpcInterfaceName
+
+instance Prelude.NFData VpcInterfaceAttachment where
+  rnf VpcInterfaceAttachment' {..} =
+    Prelude.rnf vpcInterfaceName
+
+instance Data.ToJSON VpcInterfaceAttachment where
+  toJSON VpcInterfaceAttachment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("vpcInterfaceName" Data..=)
+              Prelude.<$> vpcInterfaceName
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/Types/VpcInterfaceRequest.hs b/gen/Amazonka/MediaConnect/Types/VpcInterfaceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Types/VpcInterfaceRequest.hs
@@ -0,0 +1,135 @@
+{-# 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.MediaConnect.Types.VpcInterfaceRequest
+-- 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.MediaConnect.Types.VpcInterfaceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types.NetworkInterfaceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Desired VPC Interface for a Flow
+--
+-- /See:/ 'newVpcInterfaceRequest' smart constructor.
+data VpcInterfaceRequest = VpcInterfaceRequest'
+  { -- | The type of network interface. If this value is not included in the
+    -- request, MediaConnect uses ENA as the networkInterfaceType.
+    networkInterfaceType :: Prelude.Maybe NetworkInterfaceType,
+    -- | Subnet must be in the AZ of the Flow
+    subnetId :: Prelude.Text,
+    -- | Security Group IDs to be used on ENI.
+    securityGroupIds :: [Prelude.Text],
+    -- | Role Arn MediaConnect can assumes to create ENIs in customer\'s account
+    roleArn :: Prelude.Text,
+    -- | The name of the VPC Interface. This value must be unique within the
+    -- current flow.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcInterfaceRequest' 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:
+--
+-- 'networkInterfaceType', 'vpcInterfaceRequest_networkInterfaceType' - The type of network interface. If this value is not included in the
+-- request, MediaConnect uses ENA as the networkInterfaceType.
+--
+-- 'subnetId', 'vpcInterfaceRequest_subnetId' - Subnet must be in the AZ of the Flow
+--
+-- 'securityGroupIds', 'vpcInterfaceRequest_securityGroupIds' - Security Group IDs to be used on ENI.
+--
+-- 'roleArn', 'vpcInterfaceRequest_roleArn' - Role Arn MediaConnect can assumes to create ENIs in customer\'s account
+--
+-- 'name', 'vpcInterfaceRequest_name' - The name of the VPC Interface. This value must be unique within the
+-- current flow.
+newVpcInterfaceRequest ::
+  -- | 'subnetId'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  VpcInterfaceRequest
+newVpcInterfaceRequest pSubnetId_ pRoleArn_ pName_ =
+  VpcInterfaceRequest'
+    { networkInterfaceType =
+        Prelude.Nothing,
+      subnetId = pSubnetId_,
+      securityGroupIds = Prelude.mempty,
+      roleArn = pRoleArn_,
+      name = pName_
+    }
+
+-- | The type of network interface. If this value is not included in the
+-- request, MediaConnect uses ENA as the networkInterfaceType.
+vpcInterfaceRequest_networkInterfaceType :: Lens.Lens' VpcInterfaceRequest (Prelude.Maybe NetworkInterfaceType)
+vpcInterfaceRequest_networkInterfaceType = Lens.lens (\VpcInterfaceRequest' {networkInterfaceType} -> networkInterfaceType) (\s@VpcInterfaceRequest' {} a -> s {networkInterfaceType = a} :: VpcInterfaceRequest)
+
+-- | Subnet must be in the AZ of the Flow
+vpcInterfaceRequest_subnetId :: Lens.Lens' VpcInterfaceRequest Prelude.Text
+vpcInterfaceRequest_subnetId = Lens.lens (\VpcInterfaceRequest' {subnetId} -> subnetId) (\s@VpcInterfaceRequest' {} a -> s {subnetId = a} :: VpcInterfaceRequest)
+
+-- | Security Group IDs to be used on ENI.
+vpcInterfaceRequest_securityGroupIds :: Lens.Lens' VpcInterfaceRequest [Prelude.Text]
+vpcInterfaceRequest_securityGroupIds = Lens.lens (\VpcInterfaceRequest' {securityGroupIds} -> securityGroupIds) (\s@VpcInterfaceRequest' {} a -> s {securityGroupIds = a} :: VpcInterfaceRequest) Prelude.. Lens.coerced
+
+-- | Role Arn MediaConnect can assumes to create ENIs in customer\'s account
+vpcInterfaceRequest_roleArn :: Lens.Lens' VpcInterfaceRequest Prelude.Text
+vpcInterfaceRequest_roleArn = Lens.lens (\VpcInterfaceRequest' {roleArn} -> roleArn) (\s@VpcInterfaceRequest' {} a -> s {roleArn = a} :: VpcInterfaceRequest)
+
+-- | The name of the VPC Interface. This value must be unique within the
+-- current flow.
+vpcInterfaceRequest_name :: Lens.Lens' VpcInterfaceRequest Prelude.Text
+vpcInterfaceRequest_name = Lens.lens (\VpcInterfaceRequest' {name} -> name) (\s@VpcInterfaceRequest' {} a -> s {name = a} :: VpcInterfaceRequest)
+
+instance Prelude.Hashable VpcInterfaceRequest where
+  hashWithSalt _salt VpcInterfaceRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkInterfaceType
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData VpcInterfaceRequest where
+  rnf VpcInterfaceRequest' {..} =
+    Prelude.rnf networkInterfaceType
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON VpcInterfaceRequest where
+  toJSON VpcInterfaceRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("networkInterfaceType" Data..=)
+              Prelude.<$> networkInterfaceType,
+            Prelude.Just ("subnetId" Data..= subnetId),
+            Prelude.Just
+              ("securityGroupIds" Data..= securityGroupIds),
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
diff --git a/gen/Amazonka/MediaConnect/UntagResource.hs b/gen/Amazonka/MediaConnect/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/UntagResource.hs
@@ -0,0 +1,143 @@
+{-# 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.MediaConnect.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)
+--
+-- Deletes specified tags from a resource.
+module Amazonka.MediaConnect.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.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The keys of the tags to be removed.
+    tagKeys :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) that identifies the AWS Elemental
+    -- MediaConnect resource from which to delete tags.
+    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' - The keys of the tags to be removed.
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) that identifies the AWS Elemental
+-- MediaConnect resource from which to delete tags.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { tagKeys = Prelude.mempty,
+      resourceArn = pResourceArn_
+    }
+
+-- | The keys of the tags to be removed.
+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) that identifies the AWS Elemental
+-- MediaConnect resource from which to delete tags.
+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/MediaConnect/UpdateFlow.hs b/gen/Amazonka/MediaConnect/UpdateFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/UpdateFlow.hs
@@ -0,0 +1,192 @@
+{-# 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.MediaConnect.UpdateFlow
+-- 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 flow
+module Amazonka.MediaConnect.UpdateFlow
+  ( -- * Creating a Request
+    UpdateFlow (..),
+    newUpdateFlow,
+
+    -- * Request Lenses
+    updateFlow_maintenance,
+    updateFlow_sourceFailoverConfig,
+    updateFlow_flowArn,
+
+    -- * Destructuring the Response
+    UpdateFlowResponse (..),
+    newUpdateFlowResponse,
+
+    -- * Response Lenses
+    updateFlowResponse_flow,
+    updateFlowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to update flow.
+--
+-- /See:/ 'newUpdateFlow' smart constructor.
+data UpdateFlow = UpdateFlow'
+  { maintenance :: Prelude.Maybe UpdateMaintenance,
+    sourceFailoverConfig :: Prelude.Maybe UpdateFailoverConfig,
+    -- | The flow that you want to update.
+    flowArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlow' 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:
+--
+-- 'maintenance', 'updateFlow_maintenance' - Undocumented member.
+--
+-- 'sourceFailoverConfig', 'updateFlow_sourceFailoverConfig' - Undocumented member.
+--
+-- 'flowArn', 'updateFlow_flowArn' - The flow that you want to update.
+newUpdateFlow ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  UpdateFlow
+newUpdateFlow pFlowArn_ =
+  UpdateFlow'
+    { maintenance = Prelude.Nothing,
+      sourceFailoverConfig = Prelude.Nothing,
+      flowArn = pFlowArn_
+    }
+
+-- | Undocumented member.
+updateFlow_maintenance :: Lens.Lens' UpdateFlow (Prelude.Maybe UpdateMaintenance)
+updateFlow_maintenance = Lens.lens (\UpdateFlow' {maintenance} -> maintenance) (\s@UpdateFlow' {} a -> s {maintenance = a} :: UpdateFlow)
+
+-- | Undocumented member.
+updateFlow_sourceFailoverConfig :: Lens.Lens' UpdateFlow (Prelude.Maybe UpdateFailoverConfig)
+updateFlow_sourceFailoverConfig = Lens.lens (\UpdateFlow' {sourceFailoverConfig} -> sourceFailoverConfig) (\s@UpdateFlow' {} a -> s {sourceFailoverConfig = a} :: UpdateFlow)
+
+-- | The flow that you want to update.
+updateFlow_flowArn :: Lens.Lens' UpdateFlow Prelude.Text
+updateFlow_flowArn = Lens.lens (\UpdateFlow' {flowArn} -> flowArn) (\s@UpdateFlow' {} a -> s {flowArn = a} :: UpdateFlow)
+
+instance Core.AWSRequest UpdateFlow where
+  type AWSResponse UpdateFlow = UpdateFlowResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFlowResponse'
+            Prelude.<$> (x Data..?> "flow")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFlow where
+  hashWithSalt _salt UpdateFlow' {..} =
+    _salt
+      `Prelude.hashWithSalt` maintenance
+      `Prelude.hashWithSalt` sourceFailoverConfig
+      `Prelude.hashWithSalt` flowArn
+
+instance Prelude.NFData UpdateFlow where
+  rnf UpdateFlow' {..} =
+    Prelude.rnf maintenance
+      `Prelude.seq` Prelude.rnf sourceFailoverConfig
+      `Prelude.seq` Prelude.rnf flowArn
+
+instance Data.ToHeaders UpdateFlow where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFlow where
+  toJSON UpdateFlow' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maintenance" Data..=) Prelude.<$> maintenance,
+            ("sourceFailoverConfig" Data..=)
+              Prelude.<$> sourceFailoverConfig
+          ]
+      )
+
+instance Data.ToPath UpdateFlow where
+  toPath UpdateFlow' {..} =
+    Prelude.mconcat ["/v1/flows/", Data.toBS flowArn]
+
+instance Data.ToQuery UpdateFlow where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFlowResponse' smart constructor.
+data UpdateFlowResponse = UpdateFlowResponse'
+  { flow :: Prelude.Maybe Flow,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowResponse' 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:
+--
+-- 'flow', 'updateFlowResponse_flow' - Undocumented member.
+--
+-- 'httpStatus', 'updateFlowResponse_httpStatus' - The response's http status code.
+newUpdateFlowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFlowResponse
+newUpdateFlowResponse pHttpStatus_ =
+  UpdateFlowResponse'
+    { flow = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+updateFlowResponse_flow :: Lens.Lens' UpdateFlowResponse (Prelude.Maybe Flow)
+updateFlowResponse_flow = Lens.lens (\UpdateFlowResponse' {flow} -> flow) (\s@UpdateFlowResponse' {} a -> s {flow = a} :: UpdateFlowResponse)
+
+-- | The response's http status code.
+updateFlowResponse_httpStatus :: Lens.Lens' UpdateFlowResponse Prelude.Int
+updateFlowResponse_httpStatus = Lens.lens (\UpdateFlowResponse' {httpStatus} -> httpStatus) (\s@UpdateFlowResponse' {} a -> s {httpStatus = a} :: UpdateFlowResponse)
+
+instance Prelude.NFData UpdateFlowResponse where
+  rnf UpdateFlowResponse' {..} =
+    Prelude.rnf flow
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/UpdateFlowEntitlement.hs b/gen/Amazonka/MediaConnect/UpdateFlowEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/UpdateFlowEntitlement.hs
@@ -0,0 +1,285 @@
+{-# 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.MediaConnect.UpdateFlowEntitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- You can change an entitlement\'s description, subscribers, and
+-- encryption. If you change the subscribers, the service will remove the
+-- outputs that are are used by the subscribers that are removed.
+module Amazonka.MediaConnect.UpdateFlowEntitlement
+  ( -- * Creating a Request
+    UpdateFlowEntitlement (..),
+    newUpdateFlowEntitlement,
+
+    -- * Request Lenses
+    updateFlowEntitlement_description,
+    updateFlowEntitlement_encryption,
+    updateFlowEntitlement_entitlementStatus,
+    updateFlowEntitlement_subscribers,
+    updateFlowEntitlement_flowArn,
+    updateFlowEntitlement_entitlementArn,
+
+    -- * Destructuring the Response
+    UpdateFlowEntitlementResponse (..),
+    newUpdateFlowEntitlementResponse,
+
+    -- * Response Lenses
+    updateFlowEntitlementResponse_entitlement,
+    updateFlowEntitlementResponse_flowArn,
+    updateFlowEntitlementResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The entitlement fields that you want to update.
+--
+-- /See:/ 'newUpdateFlowEntitlement' smart constructor.
+data UpdateFlowEntitlement = UpdateFlowEntitlement'
+  { -- | A description of the entitlement. This description appears only on the
+    -- AWS Elemental MediaConnect console and will not be seen by the
+    -- subscriber or end user.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of encryption that will be used on the output associated with
+    -- this entitlement.
+    encryption :: Prelude.Maybe UpdateEncryption,
+    -- | An indication of whether you want to enable the entitlement to allow
+    -- access, or disable it to stop streaming content to the subscriber’s flow
+    -- temporarily. If you don’t specify the entitlementStatus field in your
+    -- request, MediaConnect leaves the value unchanged.
+    entitlementStatus :: Prelude.Maybe EntitlementStatus,
+    -- | The AWS account IDs that you want to share your content with. The
+    -- receiving accounts (subscribers) will be allowed to create their own
+    -- flow using your content as the source.
+    subscribers :: Prelude.Maybe [Prelude.Text],
+    -- | The flow that is associated with the entitlement that you want to
+    -- update.
+    flowArn :: Prelude.Text,
+    -- | The ARN of the entitlement that you want to update.
+    entitlementArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowEntitlement' 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:
+--
+-- 'description', 'updateFlowEntitlement_description' - A description of the entitlement. This description appears only on the
+-- AWS Elemental MediaConnect console and will not be seen by the
+-- subscriber or end user.
+--
+-- 'encryption', 'updateFlowEntitlement_encryption' - The type of encryption that will be used on the output associated with
+-- this entitlement.
+--
+-- 'entitlementStatus', 'updateFlowEntitlement_entitlementStatus' - An indication of whether you want to enable the entitlement to allow
+-- access, or disable it to stop streaming content to the subscriber’s flow
+-- temporarily. If you don’t specify the entitlementStatus field in your
+-- request, MediaConnect leaves the value unchanged.
+--
+-- 'subscribers', 'updateFlowEntitlement_subscribers' - The AWS account IDs that you want to share your content with. The
+-- receiving accounts (subscribers) will be allowed to create their own
+-- flow using your content as the source.
+--
+-- 'flowArn', 'updateFlowEntitlement_flowArn' - The flow that is associated with the entitlement that you want to
+-- update.
+--
+-- 'entitlementArn', 'updateFlowEntitlement_entitlementArn' - The ARN of the entitlement that you want to update.
+newUpdateFlowEntitlement ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'entitlementArn'
+  Prelude.Text ->
+  UpdateFlowEntitlement
+newUpdateFlowEntitlement pFlowArn_ pEntitlementArn_ =
+  UpdateFlowEntitlement'
+    { description =
+        Prelude.Nothing,
+      encryption = Prelude.Nothing,
+      entitlementStatus = Prelude.Nothing,
+      subscribers = Prelude.Nothing,
+      flowArn = pFlowArn_,
+      entitlementArn = pEntitlementArn_
+    }
+
+-- | A description of the entitlement. This description appears only on the
+-- AWS Elemental MediaConnect console and will not be seen by the
+-- subscriber or end user.
+updateFlowEntitlement_description :: Lens.Lens' UpdateFlowEntitlement (Prelude.Maybe Prelude.Text)
+updateFlowEntitlement_description = Lens.lens (\UpdateFlowEntitlement' {description} -> description) (\s@UpdateFlowEntitlement' {} a -> s {description = a} :: UpdateFlowEntitlement)
+
+-- | The type of encryption that will be used on the output associated with
+-- this entitlement.
+updateFlowEntitlement_encryption :: Lens.Lens' UpdateFlowEntitlement (Prelude.Maybe UpdateEncryption)
+updateFlowEntitlement_encryption = Lens.lens (\UpdateFlowEntitlement' {encryption} -> encryption) (\s@UpdateFlowEntitlement' {} a -> s {encryption = a} :: UpdateFlowEntitlement)
+
+-- | An indication of whether you want to enable the entitlement to allow
+-- access, or disable it to stop streaming content to the subscriber’s flow
+-- temporarily. If you don’t specify the entitlementStatus field in your
+-- request, MediaConnect leaves the value unchanged.
+updateFlowEntitlement_entitlementStatus :: Lens.Lens' UpdateFlowEntitlement (Prelude.Maybe EntitlementStatus)
+updateFlowEntitlement_entitlementStatus = Lens.lens (\UpdateFlowEntitlement' {entitlementStatus} -> entitlementStatus) (\s@UpdateFlowEntitlement' {} a -> s {entitlementStatus = a} :: UpdateFlowEntitlement)
+
+-- | The AWS account IDs that you want to share your content with. The
+-- receiving accounts (subscribers) will be allowed to create their own
+-- flow using your content as the source.
+updateFlowEntitlement_subscribers :: Lens.Lens' UpdateFlowEntitlement (Prelude.Maybe [Prelude.Text])
+updateFlowEntitlement_subscribers = Lens.lens (\UpdateFlowEntitlement' {subscribers} -> subscribers) (\s@UpdateFlowEntitlement' {} a -> s {subscribers = a} :: UpdateFlowEntitlement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The flow that is associated with the entitlement that you want to
+-- update.
+updateFlowEntitlement_flowArn :: Lens.Lens' UpdateFlowEntitlement Prelude.Text
+updateFlowEntitlement_flowArn = Lens.lens (\UpdateFlowEntitlement' {flowArn} -> flowArn) (\s@UpdateFlowEntitlement' {} a -> s {flowArn = a} :: UpdateFlowEntitlement)
+
+-- | The ARN of the entitlement that you want to update.
+updateFlowEntitlement_entitlementArn :: Lens.Lens' UpdateFlowEntitlement Prelude.Text
+updateFlowEntitlement_entitlementArn = Lens.lens (\UpdateFlowEntitlement' {entitlementArn} -> entitlementArn) (\s@UpdateFlowEntitlement' {} a -> s {entitlementArn = a} :: UpdateFlowEntitlement)
+
+instance Core.AWSRequest UpdateFlowEntitlement where
+  type
+    AWSResponse UpdateFlowEntitlement =
+      UpdateFlowEntitlementResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFlowEntitlementResponse'
+            Prelude.<$> (x Data..?> "entitlement")
+            Prelude.<*> (x Data..?> "flowArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFlowEntitlement where
+  hashWithSalt _salt UpdateFlowEntitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` entitlementStatus
+      `Prelude.hashWithSalt` subscribers
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` entitlementArn
+
+instance Prelude.NFData UpdateFlowEntitlement where
+  rnf UpdateFlowEntitlement' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf entitlementStatus
+      `Prelude.seq` Prelude.rnf subscribers
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf entitlementArn
+
+instance Data.ToHeaders UpdateFlowEntitlement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFlowEntitlement where
+  toJSON UpdateFlowEntitlement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("encryption" Data..=) Prelude.<$> encryption,
+            ("entitlementStatus" Data..=)
+              Prelude.<$> entitlementStatus,
+            ("subscribers" Data..=) Prelude.<$> subscribers
+          ]
+      )
+
+instance Data.ToPath UpdateFlowEntitlement where
+  toPath UpdateFlowEntitlement' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/entitlements/",
+        Data.toBS entitlementArn
+      ]
+
+instance Data.ToQuery UpdateFlowEntitlement where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFlowEntitlementResponse' smart constructor.
+data UpdateFlowEntitlementResponse = UpdateFlowEntitlementResponse'
+  { -- | The new configuration of the entitlement that you updated.
+    entitlement :: Prelude.Maybe Entitlement,
+    -- | The ARN of the flow that this entitlement was granted on.
+    flowArn :: 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 'UpdateFlowEntitlementResponse' 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:
+--
+-- 'entitlement', 'updateFlowEntitlementResponse_entitlement' - The new configuration of the entitlement that you updated.
+--
+-- 'flowArn', 'updateFlowEntitlementResponse_flowArn' - The ARN of the flow that this entitlement was granted on.
+--
+-- 'httpStatus', 'updateFlowEntitlementResponse_httpStatus' - The response's http status code.
+newUpdateFlowEntitlementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFlowEntitlementResponse
+newUpdateFlowEntitlementResponse pHttpStatus_ =
+  UpdateFlowEntitlementResponse'
+    { entitlement =
+        Prelude.Nothing,
+      flowArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The new configuration of the entitlement that you updated.
+updateFlowEntitlementResponse_entitlement :: Lens.Lens' UpdateFlowEntitlementResponse (Prelude.Maybe Entitlement)
+updateFlowEntitlementResponse_entitlement = Lens.lens (\UpdateFlowEntitlementResponse' {entitlement} -> entitlement) (\s@UpdateFlowEntitlementResponse' {} a -> s {entitlement = a} :: UpdateFlowEntitlementResponse)
+
+-- | The ARN of the flow that this entitlement was granted on.
+updateFlowEntitlementResponse_flowArn :: Lens.Lens' UpdateFlowEntitlementResponse (Prelude.Maybe Prelude.Text)
+updateFlowEntitlementResponse_flowArn = Lens.lens (\UpdateFlowEntitlementResponse' {flowArn} -> flowArn) (\s@UpdateFlowEntitlementResponse' {} a -> s {flowArn = a} :: UpdateFlowEntitlementResponse)
+
+-- | The response's http status code.
+updateFlowEntitlementResponse_httpStatus :: Lens.Lens' UpdateFlowEntitlementResponse Prelude.Int
+updateFlowEntitlementResponse_httpStatus = Lens.lens (\UpdateFlowEntitlementResponse' {httpStatus} -> httpStatus) (\s@UpdateFlowEntitlementResponse' {} a -> s {httpStatus = a} :: UpdateFlowEntitlementResponse)
+
+instance Prelude.NFData UpdateFlowEntitlementResponse where
+  rnf UpdateFlowEntitlementResponse' {..} =
+    Prelude.rnf entitlement
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/UpdateFlowMediaStream.hs b/gen/Amazonka/MediaConnect/UpdateFlowMediaStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/UpdateFlowMediaStream.hs
@@ -0,0 +1,278 @@
+{-# 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.MediaConnect.UpdateFlowMediaStream
+-- 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 an existing media stream.
+module Amazonka.MediaConnect.UpdateFlowMediaStream
+  ( -- * Creating a Request
+    UpdateFlowMediaStream (..),
+    newUpdateFlowMediaStream,
+
+    -- * Request Lenses
+    updateFlowMediaStream_attributes,
+    updateFlowMediaStream_clockRate,
+    updateFlowMediaStream_description,
+    updateFlowMediaStream_mediaStreamType,
+    updateFlowMediaStream_videoFormat,
+    updateFlowMediaStream_flowArn,
+    updateFlowMediaStream_mediaStreamName,
+
+    -- * Destructuring the Response
+    UpdateFlowMediaStreamResponse (..),
+    newUpdateFlowMediaStreamResponse,
+
+    -- * Response Lenses
+    updateFlowMediaStreamResponse_flowArn,
+    updateFlowMediaStreamResponse_mediaStream,
+    updateFlowMediaStreamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The fields that you want to update in the media stream.
+--
+-- /See:/ 'newUpdateFlowMediaStream' smart constructor.
+data UpdateFlowMediaStream = UpdateFlowMediaStream'
+  { -- | The attributes that you want to assign to the media stream.
+    attributes :: Prelude.Maybe MediaStreamAttributesRequest,
+    -- | The sample rate (in Hz) for the stream. If the media stream type is
+    -- video or ancillary data, set this value to 90000. If the media stream
+    -- type is audio, set this value to either 48000 or 96000.
+    clockRate :: Prelude.Maybe Prelude.Int,
+    -- | Description
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of media stream.
+    mediaStreamType :: Prelude.Maybe MediaStreamType,
+    -- | The resolution of the video.
+    videoFormat :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the flow.
+    flowArn :: Prelude.Text,
+    -- | The name of the media stream that you want to update.
+    mediaStreamName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowMediaStream' 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:
+--
+-- 'attributes', 'updateFlowMediaStream_attributes' - The attributes that you want to assign to the media stream.
+--
+-- 'clockRate', 'updateFlowMediaStream_clockRate' - The sample rate (in Hz) for the stream. If the media stream type is
+-- video or ancillary data, set this value to 90000. If the media stream
+-- type is audio, set this value to either 48000 or 96000.
+--
+-- 'description', 'updateFlowMediaStream_description' - Description
+--
+-- 'mediaStreamType', 'updateFlowMediaStream_mediaStreamType' - The type of media stream.
+--
+-- 'videoFormat', 'updateFlowMediaStream_videoFormat' - The resolution of the video.
+--
+-- 'flowArn', 'updateFlowMediaStream_flowArn' - The Amazon Resource Name (ARN) of the flow.
+--
+-- 'mediaStreamName', 'updateFlowMediaStream_mediaStreamName' - The name of the media stream that you want to update.
+newUpdateFlowMediaStream ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'mediaStreamName'
+  Prelude.Text ->
+  UpdateFlowMediaStream
+newUpdateFlowMediaStream pFlowArn_ pMediaStreamName_ =
+  UpdateFlowMediaStream'
+    { attributes =
+        Prelude.Nothing,
+      clockRate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      mediaStreamType = Prelude.Nothing,
+      videoFormat = Prelude.Nothing,
+      flowArn = pFlowArn_,
+      mediaStreamName = pMediaStreamName_
+    }
+
+-- | The attributes that you want to assign to the media stream.
+updateFlowMediaStream_attributes :: Lens.Lens' UpdateFlowMediaStream (Prelude.Maybe MediaStreamAttributesRequest)
+updateFlowMediaStream_attributes = Lens.lens (\UpdateFlowMediaStream' {attributes} -> attributes) (\s@UpdateFlowMediaStream' {} a -> s {attributes = a} :: UpdateFlowMediaStream)
+
+-- | The sample rate (in Hz) for the stream. If the media stream type is
+-- video or ancillary data, set this value to 90000. If the media stream
+-- type is audio, set this value to either 48000 or 96000.
+updateFlowMediaStream_clockRate :: Lens.Lens' UpdateFlowMediaStream (Prelude.Maybe Prelude.Int)
+updateFlowMediaStream_clockRate = Lens.lens (\UpdateFlowMediaStream' {clockRate} -> clockRate) (\s@UpdateFlowMediaStream' {} a -> s {clockRate = a} :: UpdateFlowMediaStream)
+
+-- | Description
+updateFlowMediaStream_description :: Lens.Lens' UpdateFlowMediaStream (Prelude.Maybe Prelude.Text)
+updateFlowMediaStream_description = Lens.lens (\UpdateFlowMediaStream' {description} -> description) (\s@UpdateFlowMediaStream' {} a -> s {description = a} :: UpdateFlowMediaStream)
+
+-- | The type of media stream.
+updateFlowMediaStream_mediaStreamType :: Lens.Lens' UpdateFlowMediaStream (Prelude.Maybe MediaStreamType)
+updateFlowMediaStream_mediaStreamType = Lens.lens (\UpdateFlowMediaStream' {mediaStreamType} -> mediaStreamType) (\s@UpdateFlowMediaStream' {} a -> s {mediaStreamType = a} :: UpdateFlowMediaStream)
+
+-- | The resolution of the video.
+updateFlowMediaStream_videoFormat :: Lens.Lens' UpdateFlowMediaStream (Prelude.Maybe Prelude.Text)
+updateFlowMediaStream_videoFormat = Lens.lens (\UpdateFlowMediaStream' {videoFormat} -> videoFormat) (\s@UpdateFlowMediaStream' {} a -> s {videoFormat = a} :: UpdateFlowMediaStream)
+
+-- | The Amazon Resource Name (ARN) of the flow.
+updateFlowMediaStream_flowArn :: Lens.Lens' UpdateFlowMediaStream Prelude.Text
+updateFlowMediaStream_flowArn = Lens.lens (\UpdateFlowMediaStream' {flowArn} -> flowArn) (\s@UpdateFlowMediaStream' {} a -> s {flowArn = a} :: UpdateFlowMediaStream)
+
+-- | The name of the media stream that you want to update.
+updateFlowMediaStream_mediaStreamName :: Lens.Lens' UpdateFlowMediaStream Prelude.Text
+updateFlowMediaStream_mediaStreamName = Lens.lens (\UpdateFlowMediaStream' {mediaStreamName} -> mediaStreamName) (\s@UpdateFlowMediaStream' {} a -> s {mediaStreamName = a} :: UpdateFlowMediaStream)
+
+instance Core.AWSRequest UpdateFlowMediaStream where
+  type
+    AWSResponse UpdateFlowMediaStream =
+      UpdateFlowMediaStreamResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFlowMediaStreamResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "mediaStream")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFlowMediaStream where
+  hashWithSalt _salt UpdateFlowMediaStream' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` clockRate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` mediaStreamType
+      `Prelude.hashWithSalt` videoFormat
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` mediaStreamName
+
+instance Prelude.NFData UpdateFlowMediaStream where
+  rnf UpdateFlowMediaStream' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf clockRate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf mediaStreamType
+      `Prelude.seq` Prelude.rnf videoFormat
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf mediaStreamName
+
+instance Data.ToHeaders UpdateFlowMediaStream where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFlowMediaStream where
+  toJSON UpdateFlowMediaStream' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributes" Data..=) Prelude.<$> attributes,
+            ("clockRate" Data..=) Prelude.<$> clockRate,
+            ("description" Data..=) Prelude.<$> description,
+            ("mediaStreamType" Data..=)
+              Prelude.<$> mediaStreamType,
+            ("videoFormat" Data..=) Prelude.<$> videoFormat
+          ]
+      )
+
+instance Data.ToPath UpdateFlowMediaStream where
+  toPath UpdateFlowMediaStream' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/mediaStreams/",
+        Data.toBS mediaStreamName
+      ]
+
+instance Data.ToQuery UpdateFlowMediaStream where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFlowMediaStreamResponse' smart constructor.
+data UpdateFlowMediaStreamResponse = UpdateFlowMediaStreamResponse'
+  { -- | The ARN of the flow that is associated with the media stream that you
+    -- updated.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The media stream that you updated.
+    mediaStream :: Prelude.Maybe MediaStream,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowMediaStreamResponse' 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:
+--
+-- 'flowArn', 'updateFlowMediaStreamResponse_flowArn' - The ARN of the flow that is associated with the media stream that you
+-- updated.
+--
+-- 'mediaStream', 'updateFlowMediaStreamResponse_mediaStream' - The media stream that you updated.
+--
+-- 'httpStatus', 'updateFlowMediaStreamResponse_httpStatus' - The response's http status code.
+newUpdateFlowMediaStreamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFlowMediaStreamResponse
+newUpdateFlowMediaStreamResponse pHttpStatus_ =
+  UpdateFlowMediaStreamResponse'
+    { flowArn =
+        Prelude.Nothing,
+      mediaStream = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that is associated with the media stream that you
+-- updated.
+updateFlowMediaStreamResponse_flowArn :: Lens.Lens' UpdateFlowMediaStreamResponse (Prelude.Maybe Prelude.Text)
+updateFlowMediaStreamResponse_flowArn = Lens.lens (\UpdateFlowMediaStreamResponse' {flowArn} -> flowArn) (\s@UpdateFlowMediaStreamResponse' {} a -> s {flowArn = a} :: UpdateFlowMediaStreamResponse)
+
+-- | The media stream that you updated.
+updateFlowMediaStreamResponse_mediaStream :: Lens.Lens' UpdateFlowMediaStreamResponse (Prelude.Maybe MediaStream)
+updateFlowMediaStreamResponse_mediaStream = Lens.lens (\UpdateFlowMediaStreamResponse' {mediaStream} -> mediaStream) (\s@UpdateFlowMediaStreamResponse' {} a -> s {mediaStream = a} :: UpdateFlowMediaStreamResponse)
+
+-- | The response's http status code.
+updateFlowMediaStreamResponse_httpStatus :: Lens.Lens' UpdateFlowMediaStreamResponse Prelude.Int
+updateFlowMediaStreamResponse_httpStatus = Lens.lens (\UpdateFlowMediaStreamResponse' {httpStatus} -> httpStatus) (\s@UpdateFlowMediaStreamResponse' {} a -> s {httpStatus = a} :: UpdateFlowMediaStreamResponse)
+
+instance Prelude.NFData UpdateFlowMediaStreamResponse where
+  rnf UpdateFlowMediaStreamResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf mediaStream
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/UpdateFlowOutput.hs b/gen/Amazonka/MediaConnect/UpdateFlowOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/UpdateFlowOutput.hs
@@ -0,0 +1,444 @@
+{-# 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.MediaConnect.UpdateFlowOutput
+-- 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 an existing flow output.
+module Amazonka.MediaConnect.UpdateFlowOutput
+  ( -- * Creating a Request
+    UpdateFlowOutput (..),
+    newUpdateFlowOutput,
+
+    -- * Request Lenses
+    updateFlowOutput_cidrAllowList,
+    updateFlowOutput_description,
+    updateFlowOutput_destination,
+    updateFlowOutput_encryption,
+    updateFlowOutput_maxLatency,
+    updateFlowOutput_mediaStreamOutputConfigurations,
+    updateFlowOutput_minLatency,
+    updateFlowOutput_port,
+    updateFlowOutput_protocol,
+    updateFlowOutput_remoteId,
+    updateFlowOutput_senderControlPort,
+    updateFlowOutput_senderIpAddress,
+    updateFlowOutput_smoothingLatency,
+    updateFlowOutput_streamId,
+    updateFlowOutput_vpcInterfaceAttachment,
+    updateFlowOutput_flowArn,
+    updateFlowOutput_outputArn,
+
+    -- * Destructuring the Response
+    UpdateFlowOutputResponse (..),
+    newUpdateFlowOutputResponse,
+
+    -- * Response Lenses
+    updateFlowOutputResponse_flowArn,
+    updateFlowOutputResponse_output,
+    updateFlowOutputResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | The fields that you want to update in the output.
+--
+-- /See:/ 'newUpdateFlowOutput' smart constructor.
+data UpdateFlowOutput = UpdateFlowOutput'
+  { -- | The range of IP addresses that should be allowed to initiate output
+    -- requests to this flow. These IP addresses should be in the form of a
+    -- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+    cidrAllowList :: Prelude.Maybe [Prelude.Text],
+    -- | A description of the output. This description appears only on the AWS
+    -- Elemental MediaConnect console and will not be seen by the end user.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The IP address where you want to send the output.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The type of key used for the encryption. If no keyType is provided, the
+    -- service will use the default setting (static-key).
+    encryption :: Prelude.Maybe UpdateEncryption,
+    -- | The maximum latency in milliseconds. This parameter applies only to
+    -- RIST-based, Zixi-based, and Fujitsu-based streams.
+    maxLatency :: Prelude.Maybe Prelude.Int,
+    -- | The media streams that are associated with the output, and the
+    -- parameters for those associations.
+    mediaStreamOutputConfigurations :: Prelude.Maybe [MediaStreamOutputConfigurationRequest],
+    -- | The minimum latency in milliseconds for SRT-based streams. In streams
+    -- that use the SRT protocol, this value that you set on your MediaConnect
+    -- source or output represents the minimal potential latency of that
+    -- connection. The latency of the stream is set to the highest number
+    -- between the sender’s minimum latency and the receiver’s minimum latency.
+    minLatency :: Prelude.Maybe Prelude.Int,
+    -- | The port to use when content is distributed to this output.
+    port :: Prelude.Maybe Prelude.Int,
+    -- | The protocol to use for the output.
+    protocol :: Prelude.Maybe Protocol,
+    -- | The remote ID for the Zixi-pull stream.
+    remoteId :: Prelude.Maybe Prelude.Text,
+    -- | The port that the flow uses to send outbound requests to initiate
+    -- connection with the sender.
+    senderControlPort :: Prelude.Maybe Prelude.Int,
+    -- | The IP address that the flow communicates with to initiate connection
+    -- with the sender.
+    senderIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+    -- streams.
+    smoothingLatency :: Prelude.Maybe Prelude.Int,
+    -- | The stream ID that you want to use for this transport. This parameter
+    -- applies only to Zixi-based streams.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the VPC interface attachment to use for this output.
+    vpcInterfaceAttachment :: Prelude.Maybe VpcInterfaceAttachment,
+    -- | The flow that is associated with the output that you want to update.
+    flowArn :: Prelude.Text,
+    -- | The ARN of the output that you want to update.
+    outputArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowOutput' 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:
+--
+-- 'cidrAllowList', 'updateFlowOutput_cidrAllowList' - The range of IP addresses that should be allowed to initiate output
+-- requests to this flow. These IP addresses should be in the form of a
+-- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+--
+-- 'description', 'updateFlowOutput_description' - A description of the output. This description appears only on the AWS
+-- Elemental MediaConnect console and will not be seen by the end user.
+--
+-- 'destination', 'updateFlowOutput_destination' - The IP address where you want to send the output.
+--
+-- 'encryption', 'updateFlowOutput_encryption' - The type of key used for the encryption. If no keyType is provided, the
+-- service will use the default setting (static-key).
+--
+-- 'maxLatency', 'updateFlowOutput_maxLatency' - The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+--
+-- 'mediaStreamOutputConfigurations', 'updateFlowOutput_mediaStreamOutputConfigurations' - The media streams that are associated with the output, and the
+-- parameters for those associations.
+--
+-- 'minLatency', 'updateFlowOutput_minLatency' - The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+--
+-- 'port', 'updateFlowOutput_port' - The port to use when content is distributed to this output.
+--
+-- 'protocol', 'updateFlowOutput_protocol' - The protocol to use for the output.
+--
+-- 'remoteId', 'updateFlowOutput_remoteId' - The remote ID for the Zixi-pull stream.
+--
+-- 'senderControlPort', 'updateFlowOutput_senderControlPort' - The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+--
+-- 'senderIpAddress', 'updateFlowOutput_senderIpAddress' - The IP address that the flow communicates with to initiate connection
+-- with the sender.
+--
+-- 'smoothingLatency', 'updateFlowOutput_smoothingLatency' - The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+-- streams.
+--
+-- 'streamId', 'updateFlowOutput_streamId' - The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+--
+-- 'vpcInterfaceAttachment', 'updateFlowOutput_vpcInterfaceAttachment' - The name of the VPC interface attachment to use for this output.
+--
+-- 'flowArn', 'updateFlowOutput_flowArn' - The flow that is associated with the output that you want to update.
+--
+-- 'outputArn', 'updateFlowOutput_outputArn' - The ARN of the output that you want to update.
+newUpdateFlowOutput ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'outputArn'
+  Prelude.Text ->
+  UpdateFlowOutput
+newUpdateFlowOutput pFlowArn_ pOutputArn_ =
+  UpdateFlowOutput'
+    { cidrAllowList = Prelude.Nothing,
+      description = Prelude.Nothing,
+      destination = Prelude.Nothing,
+      encryption = Prelude.Nothing,
+      maxLatency = Prelude.Nothing,
+      mediaStreamOutputConfigurations = Prelude.Nothing,
+      minLatency = Prelude.Nothing,
+      port = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      remoteId = Prelude.Nothing,
+      senderControlPort = Prelude.Nothing,
+      senderIpAddress = Prelude.Nothing,
+      smoothingLatency = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      vpcInterfaceAttachment = Prelude.Nothing,
+      flowArn = pFlowArn_,
+      outputArn = pOutputArn_
+    }
+
+-- | The range of IP addresses that should be allowed to initiate output
+-- requests to this flow. These IP addresses should be in the form of a
+-- Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+updateFlowOutput_cidrAllowList :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe [Prelude.Text])
+updateFlowOutput_cidrAllowList = Lens.lens (\UpdateFlowOutput' {cidrAllowList} -> cidrAllowList) (\s@UpdateFlowOutput' {} a -> s {cidrAllowList = a} :: UpdateFlowOutput) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description of the output. This description appears only on the AWS
+-- Elemental MediaConnect console and will not be seen by the end user.
+updateFlowOutput_description :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Text)
+updateFlowOutput_description = Lens.lens (\UpdateFlowOutput' {description} -> description) (\s@UpdateFlowOutput' {} a -> s {description = a} :: UpdateFlowOutput)
+
+-- | The IP address where you want to send the output.
+updateFlowOutput_destination :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Text)
+updateFlowOutput_destination = Lens.lens (\UpdateFlowOutput' {destination} -> destination) (\s@UpdateFlowOutput' {} a -> s {destination = a} :: UpdateFlowOutput)
+
+-- | The type of key used for the encryption. If no keyType is provided, the
+-- service will use the default setting (static-key).
+updateFlowOutput_encryption :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe UpdateEncryption)
+updateFlowOutput_encryption = Lens.lens (\UpdateFlowOutput' {encryption} -> encryption) (\s@UpdateFlowOutput' {} a -> s {encryption = a} :: UpdateFlowOutput)
+
+-- | The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+updateFlowOutput_maxLatency :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Int)
+updateFlowOutput_maxLatency = Lens.lens (\UpdateFlowOutput' {maxLatency} -> maxLatency) (\s@UpdateFlowOutput' {} a -> s {maxLatency = a} :: UpdateFlowOutput)
+
+-- | The media streams that are associated with the output, and the
+-- parameters for those associations.
+updateFlowOutput_mediaStreamOutputConfigurations :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe [MediaStreamOutputConfigurationRequest])
+updateFlowOutput_mediaStreamOutputConfigurations = Lens.lens (\UpdateFlowOutput' {mediaStreamOutputConfigurations} -> mediaStreamOutputConfigurations) (\s@UpdateFlowOutput' {} a -> s {mediaStreamOutputConfigurations = a} :: UpdateFlowOutput) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+updateFlowOutput_minLatency :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Int)
+updateFlowOutput_minLatency = Lens.lens (\UpdateFlowOutput' {minLatency} -> minLatency) (\s@UpdateFlowOutput' {} a -> s {minLatency = a} :: UpdateFlowOutput)
+
+-- | The port to use when content is distributed to this output.
+updateFlowOutput_port :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Int)
+updateFlowOutput_port = Lens.lens (\UpdateFlowOutput' {port} -> port) (\s@UpdateFlowOutput' {} a -> s {port = a} :: UpdateFlowOutput)
+
+-- | The protocol to use for the output.
+updateFlowOutput_protocol :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Protocol)
+updateFlowOutput_protocol = Lens.lens (\UpdateFlowOutput' {protocol} -> protocol) (\s@UpdateFlowOutput' {} a -> s {protocol = a} :: UpdateFlowOutput)
+
+-- | The remote ID for the Zixi-pull stream.
+updateFlowOutput_remoteId :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Text)
+updateFlowOutput_remoteId = Lens.lens (\UpdateFlowOutput' {remoteId} -> remoteId) (\s@UpdateFlowOutput' {} a -> s {remoteId = a} :: UpdateFlowOutput)
+
+-- | The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+updateFlowOutput_senderControlPort :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Int)
+updateFlowOutput_senderControlPort = Lens.lens (\UpdateFlowOutput' {senderControlPort} -> senderControlPort) (\s@UpdateFlowOutput' {} a -> s {senderControlPort = a} :: UpdateFlowOutput)
+
+-- | The IP address that the flow communicates with to initiate connection
+-- with the sender.
+updateFlowOutput_senderIpAddress :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Text)
+updateFlowOutput_senderIpAddress = Lens.lens (\UpdateFlowOutput' {senderIpAddress} -> senderIpAddress) (\s@UpdateFlowOutput' {} a -> s {senderIpAddress = a} :: UpdateFlowOutput)
+
+-- | The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC
+-- streams.
+updateFlowOutput_smoothingLatency :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Int)
+updateFlowOutput_smoothingLatency = Lens.lens (\UpdateFlowOutput' {smoothingLatency} -> smoothingLatency) (\s@UpdateFlowOutput' {} a -> s {smoothingLatency = a} :: UpdateFlowOutput)
+
+-- | The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+updateFlowOutput_streamId :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe Prelude.Text)
+updateFlowOutput_streamId = Lens.lens (\UpdateFlowOutput' {streamId} -> streamId) (\s@UpdateFlowOutput' {} a -> s {streamId = a} :: UpdateFlowOutput)
+
+-- | The name of the VPC interface attachment to use for this output.
+updateFlowOutput_vpcInterfaceAttachment :: Lens.Lens' UpdateFlowOutput (Prelude.Maybe VpcInterfaceAttachment)
+updateFlowOutput_vpcInterfaceAttachment = Lens.lens (\UpdateFlowOutput' {vpcInterfaceAttachment} -> vpcInterfaceAttachment) (\s@UpdateFlowOutput' {} a -> s {vpcInterfaceAttachment = a} :: UpdateFlowOutput)
+
+-- | The flow that is associated with the output that you want to update.
+updateFlowOutput_flowArn :: Lens.Lens' UpdateFlowOutput Prelude.Text
+updateFlowOutput_flowArn = Lens.lens (\UpdateFlowOutput' {flowArn} -> flowArn) (\s@UpdateFlowOutput' {} a -> s {flowArn = a} :: UpdateFlowOutput)
+
+-- | The ARN of the output that you want to update.
+updateFlowOutput_outputArn :: Lens.Lens' UpdateFlowOutput Prelude.Text
+updateFlowOutput_outputArn = Lens.lens (\UpdateFlowOutput' {outputArn} -> outputArn) (\s@UpdateFlowOutput' {} a -> s {outputArn = a} :: UpdateFlowOutput)
+
+instance Core.AWSRequest UpdateFlowOutput where
+  type
+    AWSResponse UpdateFlowOutput =
+      UpdateFlowOutputResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFlowOutputResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "output")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFlowOutput where
+  hashWithSalt _salt UpdateFlowOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrAllowList
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` encryption
+      `Prelude.hashWithSalt` maxLatency
+      `Prelude.hashWithSalt` mediaStreamOutputConfigurations
+      `Prelude.hashWithSalt` minLatency
+      `Prelude.hashWithSalt` port
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` remoteId
+      `Prelude.hashWithSalt` senderControlPort
+      `Prelude.hashWithSalt` senderIpAddress
+      `Prelude.hashWithSalt` smoothingLatency
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` vpcInterfaceAttachment
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` outputArn
+
+instance Prelude.NFData UpdateFlowOutput where
+  rnf UpdateFlowOutput' {..} =
+    Prelude.rnf cidrAllowList
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf maxLatency
+      `Prelude.seq` Prelude.rnf mediaStreamOutputConfigurations
+      `Prelude.seq` Prelude.rnf minLatency
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf remoteId
+      `Prelude.seq` Prelude.rnf senderControlPort
+      `Prelude.seq` Prelude.rnf senderIpAddress
+      `Prelude.seq` Prelude.rnf smoothingLatency
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf vpcInterfaceAttachment
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf outputArn
+
+instance Data.ToHeaders UpdateFlowOutput where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFlowOutput where
+  toJSON UpdateFlowOutput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cidrAllowList" Data..=) Prelude.<$> cidrAllowList,
+            ("description" Data..=) Prelude.<$> description,
+            ("destination" Data..=) Prelude.<$> destination,
+            ("encryption" Data..=) Prelude.<$> encryption,
+            ("maxLatency" Data..=) Prelude.<$> maxLatency,
+            ("mediaStreamOutputConfigurations" Data..=)
+              Prelude.<$> mediaStreamOutputConfigurations,
+            ("minLatency" Data..=) Prelude.<$> minLatency,
+            ("port" Data..=) Prelude.<$> port,
+            ("protocol" Data..=) Prelude.<$> protocol,
+            ("remoteId" Data..=) Prelude.<$> remoteId,
+            ("senderControlPort" Data..=)
+              Prelude.<$> senderControlPort,
+            ("senderIpAddress" Data..=)
+              Prelude.<$> senderIpAddress,
+            ("smoothingLatency" Data..=)
+              Prelude.<$> smoothingLatency,
+            ("streamId" Data..=) Prelude.<$> streamId,
+            ("vpcInterfaceAttachment" Data..=)
+              Prelude.<$> vpcInterfaceAttachment
+          ]
+      )
+
+instance Data.ToPath UpdateFlowOutput where
+  toPath UpdateFlowOutput' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/outputs/",
+        Data.toBS outputArn
+      ]
+
+instance Data.ToQuery UpdateFlowOutput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFlowOutputResponse' smart constructor.
+data UpdateFlowOutputResponse = UpdateFlowOutputResponse'
+  { -- | The ARN of the flow that is associated with the updated output.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The new settings of the output that you updated.
+    output :: Prelude.Maybe Output,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowOutputResponse' 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:
+--
+-- 'flowArn', 'updateFlowOutputResponse_flowArn' - The ARN of the flow that is associated with the updated output.
+--
+-- 'output', 'updateFlowOutputResponse_output' - The new settings of the output that you updated.
+--
+-- 'httpStatus', 'updateFlowOutputResponse_httpStatus' - The response's http status code.
+newUpdateFlowOutputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFlowOutputResponse
+newUpdateFlowOutputResponse pHttpStatus_ =
+  UpdateFlowOutputResponse'
+    { flowArn =
+        Prelude.Nothing,
+      output = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that is associated with the updated output.
+updateFlowOutputResponse_flowArn :: Lens.Lens' UpdateFlowOutputResponse (Prelude.Maybe Prelude.Text)
+updateFlowOutputResponse_flowArn = Lens.lens (\UpdateFlowOutputResponse' {flowArn} -> flowArn) (\s@UpdateFlowOutputResponse' {} a -> s {flowArn = a} :: UpdateFlowOutputResponse)
+
+-- | The new settings of the output that you updated.
+updateFlowOutputResponse_output :: Lens.Lens' UpdateFlowOutputResponse (Prelude.Maybe Output)
+updateFlowOutputResponse_output = Lens.lens (\UpdateFlowOutputResponse' {output} -> output) (\s@UpdateFlowOutputResponse' {} a -> s {output = a} :: UpdateFlowOutputResponse)
+
+-- | The response's http status code.
+updateFlowOutputResponse_httpStatus :: Lens.Lens' UpdateFlowOutputResponse Prelude.Int
+updateFlowOutputResponse_httpStatus = Lens.lens (\UpdateFlowOutputResponse' {httpStatus} -> httpStatus) (\s@UpdateFlowOutputResponse' {} a -> s {httpStatus = a} :: UpdateFlowOutputResponse)
+
+instance Prelude.NFData UpdateFlowOutputResponse where
+  rnf UpdateFlowOutputResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf output
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/UpdateFlowSource.hs b/gen/Amazonka/MediaConnect/UpdateFlowSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/UpdateFlowSource.hs
@@ -0,0 +1,475 @@
+{-# 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.MediaConnect.UpdateFlowSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the source of a flow.
+module Amazonka.MediaConnect.UpdateFlowSource
+  ( -- * Creating a Request
+    UpdateFlowSource (..),
+    newUpdateFlowSource,
+
+    -- * Request Lenses
+    updateFlowSource_decryption,
+    updateFlowSource_description,
+    updateFlowSource_entitlementArn,
+    updateFlowSource_ingestPort,
+    updateFlowSource_maxBitrate,
+    updateFlowSource_maxLatency,
+    updateFlowSource_maxSyncBuffer,
+    updateFlowSource_mediaStreamSourceConfigurations,
+    updateFlowSource_minLatency,
+    updateFlowSource_protocol,
+    updateFlowSource_senderControlPort,
+    updateFlowSource_senderIpAddress,
+    updateFlowSource_sourceListenerAddress,
+    updateFlowSource_sourceListenerPort,
+    updateFlowSource_streamId,
+    updateFlowSource_vpcInterfaceName,
+    updateFlowSource_whitelistCidr,
+    updateFlowSource_flowArn,
+    updateFlowSource_sourceArn,
+
+    -- * Destructuring the Response
+    UpdateFlowSourceResponse (..),
+    newUpdateFlowSourceResponse,
+
+    -- * Response Lenses
+    updateFlowSourceResponse_flowArn,
+    updateFlowSourceResponse_source,
+    updateFlowSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A request to update the source of a flow.
+--
+-- /See:/ 'newUpdateFlowSource' smart constructor.
+data UpdateFlowSource = UpdateFlowSource'
+  { -- | The type of encryption used on the content ingested from this source.
+    decryption :: Prelude.Maybe UpdateEncryption,
+    -- | A description for the source. This value is not used or seen outside of
+    -- the current AWS Elemental MediaConnect account.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the entitlement that allows you to subscribe to this flow.
+    -- The entitlement is set by the flow originator, and the ARN is generated
+    -- as part of the originator\'s flow.
+    entitlementArn :: Prelude.Maybe Prelude.Text,
+    -- | The port that the flow will be listening on for incoming content.
+    ingestPort :: Prelude.Maybe Prelude.Int,
+    -- | The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+    maxBitrate :: Prelude.Maybe Prelude.Int,
+    -- | The maximum latency in milliseconds. This parameter applies only to
+    -- RIST-based, Zixi-based, and Fujitsu-based streams.
+    maxLatency :: Prelude.Maybe Prelude.Int,
+    -- | The size of the buffer (in milliseconds) to use to sync incoming source
+    -- data.
+    maxSyncBuffer :: Prelude.Maybe Prelude.Int,
+    -- | The media streams that are associated with the source, and the
+    -- parameters for those associations.
+    mediaStreamSourceConfigurations :: Prelude.Maybe [MediaStreamSourceConfigurationRequest],
+    -- | The minimum latency in milliseconds for SRT-based streams. In streams
+    -- that use the SRT protocol, this value that you set on your MediaConnect
+    -- source or output represents the minimal potential latency of that
+    -- connection. The latency of the stream is set to the highest number
+    -- between the sender’s minimum latency and the receiver’s minimum latency.
+    minLatency :: Prelude.Maybe Prelude.Int,
+    -- | The protocol that is used by the source.
+    protocol :: Prelude.Maybe Protocol,
+    -- | The port that the flow uses to send outbound requests to initiate
+    -- connection with the sender.
+    senderControlPort :: Prelude.Maybe Prelude.Int,
+    -- | The IP address that the flow communicates with to initiate connection
+    -- with the sender.
+    senderIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | Source IP or domain name for SRT-caller protocol.
+    sourceListenerAddress :: Prelude.Maybe Prelude.Text,
+    -- | Source port for SRT-caller protocol.
+    sourceListenerPort :: Prelude.Maybe Prelude.Int,
+    -- | The stream ID that you want to use for this transport. This parameter
+    -- applies only to Zixi-based streams.
+    streamId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the VPC interface to use for this source.
+    vpcInterfaceName :: Prelude.Maybe Prelude.Text,
+    -- | The range of IP addresses that should be allowed to contribute content
+    -- to your source. These IP addresses should be in the form of a Classless
+    -- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+    whitelistCidr :: Prelude.Maybe Prelude.Text,
+    -- | The flow that is associated with the source that you want to update.
+    flowArn :: Prelude.Text,
+    -- | The ARN of the source that you want to update.
+    sourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowSource' 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:
+--
+-- 'decryption', 'updateFlowSource_decryption' - The type of encryption used on the content ingested from this source.
+--
+-- 'description', 'updateFlowSource_description' - A description for the source. This value is not used or seen outside of
+-- the current AWS Elemental MediaConnect account.
+--
+-- 'entitlementArn', 'updateFlowSource_entitlementArn' - The ARN of the entitlement that allows you to subscribe to this flow.
+-- The entitlement is set by the flow originator, and the ARN is generated
+-- as part of the originator\'s flow.
+--
+-- 'ingestPort', 'updateFlowSource_ingestPort' - The port that the flow will be listening on for incoming content.
+--
+-- 'maxBitrate', 'updateFlowSource_maxBitrate' - The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+--
+-- 'maxLatency', 'updateFlowSource_maxLatency' - The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+--
+-- 'maxSyncBuffer', 'updateFlowSource_maxSyncBuffer' - The size of the buffer (in milliseconds) to use to sync incoming source
+-- data.
+--
+-- 'mediaStreamSourceConfigurations', 'updateFlowSource_mediaStreamSourceConfigurations' - The media streams that are associated with the source, and the
+-- parameters for those associations.
+--
+-- 'minLatency', 'updateFlowSource_minLatency' - The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+--
+-- 'protocol', 'updateFlowSource_protocol' - The protocol that is used by the source.
+--
+-- 'senderControlPort', 'updateFlowSource_senderControlPort' - The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+--
+-- 'senderIpAddress', 'updateFlowSource_senderIpAddress' - The IP address that the flow communicates with to initiate connection
+-- with the sender.
+--
+-- 'sourceListenerAddress', 'updateFlowSource_sourceListenerAddress' - Source IP or domain name for SRT-caller protocol.
+--
+-- 'sourceListenerPort', 'updateFlowSource_sourceListenerPort' - Source port for SRT-caller protocol.
+--
+-- 'streamId', 'updateFlowSource_streamId' - The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+--
+-- 'vpcInterfaceName', 'updateFlowSource_vpcInterfaceName' - The name of the VPC interface to use for this source.
+--
+-- 'whitelistCidr', 'updateFlowSource_whitelistCidr' - The range of IP addresses that should be allowed to contribute content
+-- to your source. These IP addresses should be in the form of a Classless
+-- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+--
+-- 'flowArn', 'updateFlowSource_flowArn' - The flow that is associated with the source that you want to update.
+--
+-- 'sourceArn', 'updateFlowSource_sourceArn' - The ARN of the source that you want to update.
+newUpdateFlowSource ::
+  -- | 'flowArn'
+  Prelude.Text ->
+  -- | 'sourceArn'
+  Prelude.Text ->
+  UpdateFlowSource
+newUpdateFlowSource pFlowArn_ pSourceArn_ =
+  UpdateFlowSource'
+    { decryption = Prelude.Nothing,
+      description = Prelude.Nothing,
+      entitlementArn = Prelude.Nothing,
+      ingestPort = Prelude.Nothing,
+      maxBitrate = Prelude.Nothing,
+      maxLatency = Prelude.Nothing,
+      maxSyncBuffer = Prelude.Nothing,
+      mediaStreamSourceConfigurations = Prelude.Nothing,
+      minLatency = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      senderControlPort = Prelude.Nothing,
+      senderIpAddress = Prelude.Nothing,
+      sourceListenerAddress = Prelude.Nothing,
+      sourceListenerPort = Prelude.Nothing,
+      streamId = Prelude.Nothing,
+      vpcInterfaceName = Prelude.Nothing,
+      whitelistCidr = Prelude.Nothing,
+      flowArn = pFlowArn_,
+      sourceArn = pSourceArn_
+    }
+
+-- | The type of encryption used on the content ingested from this source.
+updateFlowSource_decryption :: Lens.Lens' UpdateFlowSource (Prelude.Maybe UpdateEncryption)
+updateFlowSource_decryption = Lens.lens (\UpdateFlowSource' {decryption} -> decryption) (\s@UpdateFlowSource' {} a -> s {decryption = a} :: UpdateFlowSource)
+
+-- | A description for the source. This value is not used or seen outside of
+-- the current AWS Elemental MediaConnect account.
+updateFlowSource_description :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Text)
+updateFlowSource_description = Lens.lens (\UpdateFlowSource' {description} -> description) (\s@UpdateFlowSource' {} a -> s {description = a} :: UpdateFlowSource)
+
+-- | The ARN of the entitlement that allows you to subscribe to this flow.
+-- The entitlement is set by the flow originator, and the ARN is generated
+-- as part of the originator\'s flow.
+updateFlowSource_entitlementArn :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Text)
+updateFlowSource_entitlementArn = Lens.lens (\UpdateFlowSource' {entitlementArn} -> entitlementArn) (\s@UpdateFlowSource' {} a -> s {entitlementArn = a} :: UpdateFlowSource)
+
+-- | The port that the flow will be listening on for incoming content.
+updateFlowSource_ingestPort :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Int)
+updateFlowSource_ingestPort = Lens.lens (\UpdateFlowSource' {ingestPort} -> ingestPort) (\s@UpdateFlowSource' {} a -> s {ingestPort = a} :: UpdateFlowSource)
+
+-- | The smoothing max bitrate for RIST, RTP, and RTP-FEC streams.
+updateFlowSource_maxBitrate :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Int)
+updateFlowSource_maxBitrate = Lens.lens (\UpdateFlowSource' {maxBitrate} -> maxBitrate) (\s@UpdateFlowSource' {} a -> s {maxBitrate = a} :: UpdateFlowSource)
+
+-- | The maximum latency in milliseconds. This parameter applies only to
+-- RIST-based, Zixi-based, and Fujitsu-based streams.
+updateFlowSource_maxLatency :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Int)
+updateFlowSource_maxLatency = Lens.lens (\UpdateFlowSource' {maxLatency} -> maxLatency) (\s@UpdateFlowSource' {} a -> s {maxLatency = a} :: UpdateFlowSource)
+
+-- | The size of the buffer (in milliseconds) to use to sync incoming source
+-- data.
+updateFlowSource_maxSyncBuffer :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Int)
+updateFlowSource_maxSyncBuffer = Lens.lens (\UpdateFlowSource' {maxSyncBuffer} -> maxSyncBuffer) (\s@UpdateFlowSource' {} a -> s {maxSyncBuffer = a} :: UpdateFlowSource)
+
+-- | The media streams that are associated with the source, and the
+-- parameters for those associations.
+updateFlowSource_mediaStreamSourceConfigurations :: Lens.Lens' UpdateFlowSource (Prelude.Maybe [MediaStreamSourceConfigurationRequest])
+updateFlowSource_mediaStreamSourceConfigurations = Lens.lens (\UpdateFlowSource' {mediaStreamSourceConfigurations} -> mediaStreamSourceConfigurations) (\s@UpdateFlowSource' {} a -> s {mediaStreamSourceConfigurations = a} :: UpdateFlowSource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum latency in milliseconds for SRT-based streams. In streams
+-- that use the SRT protocol, this value that you set on your MediaConnect
+-- source or output represents the minimal potential latency of that
+-- connection. The latency of the stream is set to the highest number
+-- between the sender’s minimum latency and the receiver’s minimum latency.
+updateFlowSource_minLatency :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Int)
+updateFlowSource_minLatency = Lens.lens (\UpdateFlowSource' {minLatency} -> minLatency) (\s@UpdateFlowSource' {} a -> s {minLatency = a} :: UpdateFlowSource)
+
+-- | The protocol that is used by the source.
+updateFlowSource_protocol :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Protocol)
+updateFlowSource_protocol = Lens.lens (\UpdateFlowSource' {protocol} -> protocol) (\s@UpdateFlowSource' {} a -> s {protocol = a} :: UpdateFlowSource)
+
+-- | The port that the flow uses to send outbound requests to initiate
+-- connection with the sender.
+updateFlowSource_senderControlPort :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Int)
+updateFlowSource_senderControlPort = Lens.lens (\UpdateFlowSource' {senderControlPort} -> senderControlPort) (\s@UpdateFlowSource' {} a -> s {senderControlPort = a} :: UpdateFlowSource)
+
+-- | The IP address that the flow communicates with to initiate connection
+-- with the sender.
+updateFlowSource_senderIpAddress :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Text)
+updateFlowSource_senderIpAddress = Lens.lens (\UpdateFlowSource' {senderIpAddress} -> senderIpAddress) (\s@UpdateFlowSource' {} a -> s {senderIpAddress = a} :: UpdateFlowSource)
+
+-- | Source IP or domain name for SRT-caller protocol.
+updateFlowSource_sourceListenerAddress :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Text)
+updateFlowSource_sourceListenerAddress = Lens.lens (\UpdateFlowSource' {sourceListenerAddress} -> sourceListenerAddress) (\s@UpdateFlowSource' {} a -> s {sourceListenerAddress = a} :: UpdateFlowSource)
+
+-- | Source port for SRT-caller protocol.
+updateFlowSource_sourceListenerPort :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Int)
+updateFlowSource_sourceListenerPort = Lens.lens (\UpdateFlowSource' {sourceListenerPort} -> sourceListenerPort) (\s@UpdateFlowSource' {} a -> s {sourceListenerPort = a} :: UpdateFlowSource)
+
+-- | The stream ID that you want to use for this transport. This parameter
+-- applies only to Zixi-based streams.
+updateFlowSource_streamId :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Text)
+updateFlowSource_streamId = Lens.lens (\UpdateFlowSource' {streamId} -> streamId) (\s@UpdateFlowSource' {} a -> s {streamId = a} :: UpdateFlowSource)
+
+-- | The name of the VPC interface to use for this source.
+updateFlowSource_vpcInterfaceName :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Text)
+updateFlowSource_vpcInterfaceName = Lens.lens (\UpdateFlowSource' {vpcInterfaceName} -> vpcInterfaceName) (\s@UpdateFlowSource' {} a -> s {vpcInterfaceName = a} :: UpdateFlowSource)
+
+-- | The range of IP addresses that should be allowed to contribute content
+-- to your source. These IP addresses should be in the form of a Classless
+-- Inter-Domain Routing (CIDR) block; for example, 10.0.0.0\/16.
+updateFlowSource_whitelistCidr :: Lens.Lens' UpdateFlowSource (Prelude.Maybe Prelude.Text)
+updateFlowSource_whitelistCidr = Lens.lens (\UpdateFlowSource' {whitelistCidr} -> whitelistCidr) (\s@UpdateFlowSource' {} a -> s {whitelistCidr = a} :: UpdateFlowSource)
+
+-- | The flow that is associated with the source that you want to update.
+updateFlowSource_flowArn :: Lens.Lens' UpdateFlowSource Prelude.Text
+updateFlowSource_flowArn = Lens.lens (\UpdateFlowSource' {flowArn} -> flowArn) (\s@UpdateFlowSource' {} a -> s {flowArn = a} :: UpdateFlowSource)
+
+-- | The ARN of the source that you want to update.
+updateFlowSource_sourceArn :: Lens.Lens' UpdateFlowSource Prelude.Text
+updateFlowSource_sourceArn = Lens.lens (\UpdateFlowSource' {sourceArn} -> sourceArn) (\s@UpdateFlowSource' {} a -> s {sourceArn = a} :: UpdateFlowSource)
+
+instance Core.AWSRequest UpdateFlowSource where
+  type
+    AWSResponse UpdateFlowSource =
+      UpdateFlowSourceResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFlowSourceResponse'
+            Prelude.<$> (x Data..?> "flowArn")
+            Prelude.<*> (x Data..?> "source")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFlowSource where
+  hashWithSalt _salt UpdateFlowSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` decryption
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` entitlementArn
+      `Prelude.hashWithSalt` ingestPort
+      `Prelude.hashWithSalt` maxBitrate
+      `Prelude.hashWithSalt` maxLatency
+      `Prelude.hashWithSalt` maxSyncBuffer
+      `Prelude.hashWithSalt` mediaStreamSourceConfigurations
+      `Prelude.hashWithSalt` minLatency
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` senderControlPort
+      `Prelude.hashWithSalt` senderIpAddress
+      `Prelude.hashWithSalt` sourceListenerAddress
+      `Prelude.hashWithSalt` sourceListenerPort
+      `Prelude.hashWithSalt` streamId
+      `Prelude.hashWithSalt` vpcInterfaceName
+      `Prelude.hashWithSalt` whitelistCidr
+      `Prelude.hashWithSalt` flowArn
+      `Prelude.hashWithSalt` sourceArn
+
+instance Prelude.NFData UpdateFlowSource where
+  rnf UpdateFlowSource' {..} =
+    Prelude.rnf decryption
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf entitlementArn
+      `Prelude.seq` Prelude.rnf ingestPort
+      `Prelude.seq` Prelude.rnf maxBitrate
+      `Prelude.seq` Prelude.rnf maxLatency
+      `Prelude.seq` Prelude.rnf maxSyncBuffer
+      `Prelude.seq` Prelude.rnf mediaStreamSourceConfigurations
+      `Prelude.seq` Prelude.rnf minLatency
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf senderControlPort
+      `Prelude.seq` Prelude.rnf senderIpAddress
+      `Prelude.seq` Prelude.rnf sourceListenerAddress
+      `Prelude.seq` Prelude.rnf sourceListenerPort
+      `Prelude.seq` Prelude.rnf streamId
+      `Prelude.seq` Prelude.rnf vpcInterfaceName
+      `Prelude.seq` Prelude.rnf whitelistCidr
+      `Prelude.seq` Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf sourceArn
+
+instance Data.ToHeaders UpdateFlowSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFlowSource where
+  toJSON UpdateFlowSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("decryption" Data..=) Prelude.<$> decryption,
+            ("description" Data..=) Prelude.<$> description,
+            ("entitlementArn" Data..=)
+              Prelude.<$> entitlementArn,
+            ("ingestPort" Data..=) Prelude.<$> ingestPort,
+            ("maxBitrate" Data..=) Prelude.<$> maxBitrate,
+            ("maxLatency" Data..=) Prelude.<$> maxLatency,
+            ("maxSyncBuffer" Data..=) Prelude.<$> maxSyncBuffer,
+            ("mediaStreamSourceConfigurations" Data..=)
+              Prelude.<$> mediaStreamSourceConfigurations,
+            ("minLatency" Data..=) Prelude.<$> minLatency,
+            ("protocol" Data..=) Prelude.<$> protocol,
+            ("senderControlPort" Data..=)
+              Prelude.<$> senderControlPort,
+            ("senderIpAddress" Data..=)
+              Prelude.<$> senderIpAddress,
+            ("sourceListenerAddress" Data..=)
+              Prelude.<$> sourceListenerAddress,
+            ("sourceListenerPort" Data..=)
+              Prelude.<$> sourceListenerPort,
+            ("streamId" Data..=) Prelude.<$> streamId,
+            ("vpcInterfaceName" Data..=)
+              Prelude.<$> vpcInterfaceName,
+            ("whitelistCidr" Data..=) Prelude.<$> whitelistCidr
+          ]
+      )
+
+instance Data.ToPath UpdateFlowSource where
+  toPath UpdateFlowSource' {..} =
+    Prelude.mconcat
+      [ "/v1/flows/",
+        Data.toBS flowArn,
+        "/source/",
+        Data.toBS sourceArn
+      ]
+
+instance Data.ToQuery UpdateFlowSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFlowSourceResponse' smart constructor.
+data UpdateFlowSourceResponse = UpdateFlowSourceResponse'
+  { -- | The ARN of the flow that you want to update.
+    flowArn :: Prelude.Maybe Prelude.Text,
+    -- | The settings for the source of the flow.
+    source :: Prelude.Maybe Source,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFlowSourceResponse' 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:
+--
+-- 'flowArn', 'updateFlowSourceResponse_flowArn' - The ARN of the flow that you want to update.
+--
+-- 'source', 'updateFlowSourceResponse_source' - The settings for the source of the flow.
+--
+-- 'httpStatus', 'updateFlowSourceResponse_httpStatus' - The response's http status code.
+newUpdateFlowSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFlowSourceResponse
+newUpdateFlowSourceResponse pHttpStatus_ =
+  UpdateFlowSourceResponse'
+    { flowArn =
+        Prelude.Nothing,
+      source = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the flow that you want to update.
+updateFlowSourceResponse_flowArn :: Lens.Lens' UpdateFlowSourceResponse (Prelude.Maybe Prelude.Text)
+updateFlowSourceResponse_flowArn = Lens.lens (\UpdateFlowSourceResponse' {flowArn} -> flowArn) (\s@UpdateFlowSourceResponse' {} a -> s {flowArn = a} :: UpdateFlowSourceResponse)
+
+-- | The settings for the source of the flow.
+updateFlowSourceResponse_source :: Lens.Lens' UpdateFlowSourceResponse (Prelude.Maybe Source)
+updateFlowSourceResponse_source = Lens.lens (\UpdateFlowSourceResponse' {source} -> source) (\s@UpdateFlowSourceResponse' {} a -> s {source = a} :: UpdateFlowSourceResponse)
+
+-- | The response's http status code.
+updateFlowSourceResponse_httpStatus :: Lens.Lens' UpdateFlowSourceResponse Prelude.Int
+updateFlowSourceResponse_httpStatus = Lens.lens (\UpdateFlowSourceResponse' {httpStatus} -> httpStatus) (\s@UpdateFlowSourceResponse' {} a -> s {httpStatus = a} :: UpdateFlowSourceResponse)
+
+instance Prelude.NFData UpdateFlowSourceResponse where
+  rnf UpdateFlowSourceResponse' {..} =
+    Prelude.rnf flowArn
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MediaConnect/Waiters.hs b/gen/Amazonka/MediaConnect/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MediaConnect/Waiters.hs
@@ -0,0 +1,137 @@
+{-# 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.MediaConnect.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.MediaConnect.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MediaConnect.DescribeFlow
+import Amazonka.MediaConnect.Lens
+import Amazonka.MediaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+
+-- | Polls 'Amazonka.MediaConnect.DescribeFlow' every 3 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newFlowActive :: Core.Wait DescribeFlow
+newFlowActive =
+  Core.Wait
+    { Core.name = "FlowActive",
+      Core.attempts = 40,
+      Core.delay = 3,
+      Core.acceptors =
+        [ Core.matchAll
+            "ACTIVE"
+            Core.AcceptSuccess
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "STARTING"
+            Core.AcceptRetry
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "UPDATING"
+            Core.AcceptRetry
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchStatus 500 Core.AcceptRetry,
+          Core.matchStatus 503 Core.AcceptRetry,
+          Core.matchAll
+            "ERROR"
+            Core.AcceptFailure
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.MediaConnect.DescribeFlow' every 3 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newFlowDeleted :: Core.Wait DescribeFlow
+newFlowDeleted =
+  Core.Wait
+    { Core.name = "FlowDeleted",
+      Core.attempts = 40,
+      Core.delay = 3,
+      Core.acceptors =
+        [ Core.matchStatus 404 Core.AcceptSuccess,
+          Core.matchAll
+            "DELETING"
+            Core.AcceptRetry
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchStatus 500 Core.AcceptRetry,
+          Core.matchStatus 503 Core.AcceptRetry,
+          Core.matchAll
+            "ERROR"
+            Core.AcceptFailure
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.MediaConnect.DescribeFlow' every 3 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newFlowStandby :: Core.Wait DescribeFlow
+newFlowStandby =
+  Core.Wait
+    { Core.name = "FlowStandby",
+      Core.attempts = 40,
+      Core.delay = 3,
+      Core.acceptors =
+        [ Core.matchAll
+            "STANDBY"
+            Core.AcceptSuccess
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "STOPPING"
+            Core.AcceptRetry
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchStatus 500 Core.AcceptRetry,
+          Core.matchStatus 503 Core.AcceptRetry,
+          Core.matchAll
+            "ERROR"
+            Core.AcceptFailure
+            ( describeFlowResponse_flow
+                Prelude.. Lens._Just
+                Prelude.. flow_status
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
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.MediaConnect
+import Test.Amazonka.MediaConnect.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "MediaConnect"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/MediaConnect.hs b/test/Test/Amazonka/Gen/MediaConnect.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MediaConnect.hs
@@ -0,0 +1,638 @@
+{-# 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.MediaConnect
+-- 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.MediaConnect where
+
+import Amazonka.MediaConnect
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MediaConnect.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"
+--         [ requestAddFlowMediaStreams $
+--             newAddFlowMediaStreams
+--
+--         , requestAddFlowOutputs $
+--             newAddFlowOutputs
+--
+--         , requestAddFlowSources $
+--             newAddFlowSources
+--
+--         , requestAddFlowVpcInterfaces $
+--             newAddFlowVpcInterfaces
+--
+--         , requestCreateFlow $
+--             newCreateFlow
+--
+--         , requestDeleteFlow $
+--             newDeleteFlow
+--
+--         , requestDescribeFlow $
+--             newDescribeFlow
+--
+--         , requestDescribeOffering $
+--             newDescribeOffering
+--
+--         , requestDescribeReservation $
+--             newDescribeReservation
+--
+--         , requestGrantFlowEntitlements $
+--             newGrantFlowEntitlements
+--
+--         , requestListEntitlements $
+--             newListEntitlements
+--
+--         , requestListFlows $
+--             newListFlows
+--
+--         , requestListOfferings $
+--             newListOfferings
+--
+--         , requestListReservations $
+--             newListReservations
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPurchaseOffering $
+--             newPurchaseOffering
+--
+--         , requestRemoveFlowMediaStream $
+--             newRemoveFlowMediaStream
+--
+--         , requestRemoveFlowOutput $
+--             newRemoveFlowOutput
+--
+--         , requestRemoveFlowSource $
+--             newRemoveFlowSource
+--
+--         , requestRemoveFlowVpcInterface $
+--             newRemoveFlowVpcInterface
+--
+--         , requestRevokeFlowEntitlement $
+--             newRevokeFlowEntitlement
+--
+--         , requestStartFlow $
+--             newStartFlow
+--
+--         , requestStopFlow $
+--             newStopFlow
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateFlow $
+--             newUpdateFlow
+--
+--         , requestUpdateFlowEntitlement $
+--             newUpdateFlowEntitlement
+--
+--         , requestUpdateFlowMediaStream $
+--             newUpdateFlowMediaStream
+--
+--         , requestUpdateFlowOutput $
+--             newUpdateFlowOutput
+--
+--         , requestUpdateFlowSource $
+--             newUpdateFlowSource
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAddFlowMediaStreams $
+--             newAddFlowMediaStreamsResponse
+--
+--         , responseAddFlowOutputs $
+--             newAddFlowOutputsResponse
+--
+--         , responseAddFlowSources $
+--             newAddFlowSourcesResponse
+--
+--         , responseAddFlowVpcInterfaces $
+--             newAddFlowVpcInterfacesResponse
+--
+--         , responseCreateFlow $
+--             newCreateFlowResponse
+--
+--         , responseDeleteFlow $
+--             newDeleteFlowResponse
+--
+--         , responseDescribeFlow $
+--             newDescribeFlowResponse
+--
+--         , responseDescribeOffering $
+--             newDescribeOfferingResponse
+--
+--         , responseDescribeReservation $
+--             newDescribeReservationResponse
+--
+--         , responseGrantFlowEntitlements $
+--             newGrantFlowEntitlementsResponse
+--
+--         , responseListEntitlements $
+--             newListEntitlementsResponse
+--
+--         , responseListFlows $
+--             newListFlowsResponse
+--
+--         , responseListOfferings $
+--             newListOfferingsResponse
+--
+--         , responseListReservations $
+--             newListReservationsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePurchaseOffering $
+--             newPurchaseOfferingResponse
+--
+--         , responseRemoveFlowMediaStream $
+--             newRemoveFlowMediaStreamResponse
+--
+--         , responseRemoveFlowOutput $
+--             newRemoveFlowOutputResponse
+--
+--         , responseRemoveFlowSource $
+--             newRemoveFlowSourceResponse
+--
+--         , responseRemoveFlowVpcInterface $
+--             newRemoveFlowVpcInterfaceResponse
+--
+--         , responseRevokeFlowEntitlement $
+--             newRevokeFlowEntitlementResponse
+--
+--         , responseStartFlow $
+--             newStartFlowResponse
+--
+--         , responseStopFlow $
+--             newStopFlowResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateFlow $
+--             newUpdateFlowResponse
+--
+--         , responseUpdateFlowEntitlement $
+--             newUpdateFlowEntitlementResponse
+--
+--         , responseUpdateFlowMediaStream $
+--             newUpdateFlowMediaStreamResponse
+--
+--         , responseUpdateFlowOutput $
+--             newUpdateFlowOutputResponse
+--
+--         , responseUpdateFlowSource $
+--             newUpdateFlowSourceResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAddFlowMediaStreams :: AddFlowMediaStreams -> TestTree
+requestAddFlowMediaStreams =
+  req
+    "AddFlowMediaStreams"
+    "fixture/AddFlowMediaStreams.yaml"
+
+requestAddFlowOutputs :: AddFlowOutputs -> TestTree
+requestAddFlowOutputs =
+  req
+    "AddFlowOutputs"
+    "fixture/AddFlowOutputs.yaml"
+
+requestAddFlowSources :: AddFlowSources -> TestTree
+requestAddFlowSources =
+  req
+    "AddFlowSources"
+    "fixture/AddFlowSources.yaml"
+
+requestAddFlowVpcInterfaces :: AddFlowVpcInterfaces -> TestTree
+requestAddFlowVpcInterfaces =
+  req
+    "AddFlowVpcInterfaces"
+    "fixture/AddFlowVpcInterfaces.yaml"
+
+requestCreateFlow :: CreateFlow -> TestTree
+requestCreateFlow =
+  req
+    "CreateFlow"
+    "fixture/CreateFlow.yaml"
+
+requestDeleteFlow :: DeleteFlow -> TestTree
+requestDeleteFlow =
+  req
+    "DeleteFlow"
+    "fixture/DeleteFlow.yaml"
+
+requestDescribeFlow :: DescribeFlow -> TestTree
+requestDescribeFlow =
+  req
+    "DescribeFlow"
+    "fixture/DescribeFlow.yaml"
+
+requestDescribeOffering :: DescribeOffering -> TestTree
+requestDescribeOffering =
+  req
+    "DescribeOffering"
+    "fixture/DescribeOffering.yaml"
+
+requestDescribeReservation :: DescribeReservation -> TestTree
+requestDescribeReservation =
+  req
+    "DescribeReservation"
+    "fixture/DescribeReservation.yaml"
+
+requestGrantFlowEntitlements :: GrantFlowEntitlements -> TestTree
+requestGrantFlowEntitlements =
+  req
+    "GrantFlowEntitlements"
+    "fixture/GrantFlowEntitlements.yaml"
+
+requestListEntitlements :: ListEntitlements -> TestTree
+requestListEntitlements =
+  req
+    "ListEntitlements"
+    "fixture/ListEntitlements.yaml"
+
+requestListFlows :: ListFlows -> TestTree
+requestListFlows =
+  req
+    "ListFlows"
+    "fixture/ListFlows.yaml"
+
+requestListOfferings :: ListOfferings -> TestTree
+requestListOfferings =
+  req
+    "ListOfferings"
+    "fixture/ListOfferings.yaml"
+
+requestListReservations :: ListReservations -> TestTree
+requestListReservations =
+  req
+    "ListReservations"
+    "fixture/ListReservations.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPurchaseOffering :: PurchaseOffering -> TestTree
+requestPurchaseOffering =
+  req
+    "PurchaseOffering"
+    "fixture/PurchaseOffering.yaml"
+
+requestRemoveFlowMediaStream :: RemoveFlowMediaStream -> TestTree
+requestRemoveFlowMediaStream =
+  req
+    "RemoveFlowMediaStream"
+    "fixture/RemoveFlowMediaStream.yaml"
+
+requestRemoveFlowOutput :: RemoveFlowOutput -> TestTree
+requestRemoveFlowOutput =
+  req
+    "RemoveFlowOutput"
+    "fixture/RemoveFlowOutput.yaml"
+
+requestRemoveFlowSource :: RemoveFlowSource -> TestTree
+requestRemoveFlowSource =
+  req
+    "RemoveFlowSource"
+    "fixture/RemoveFlowSource.yaml"
+
+requestRemoveFlowVpcInterface :: RemoveFlowVpcInterface -> TestTree
+requestRemoveFlowVpcInterface =
+  req
+    "RemoveFlowVpcInterface"
+    "fixture/RemoveFlowVpcInterface.yaml"
+
+requestRevokeFlowEntitlement :: RevokeFlowEntitlement -> TestTree
+requestRevokeFlowEntitlement =
+  req
+    "RevokeFlowEntitlement"
+    "fixture/RevokeFlowEntitlement.yaml"
+
+requestStartFlow :: StartFlow -> TestTree
+requestStartFlow =
+  req
+    "StartFlow"
+    "fixture/StartFlow.yaml"
+
+requestStopFlow :: StopFlow -> TestTree
+requestStopFlow =
+  req
+    "StopFlow"
+    "fixture/StopFlow.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateFlow :: UpdateFlow -> TestTree
+requestUpdateFlow =
+  req
+    "UpdateFlow"
+    "fixture/UpdateFlow.yaml"
+
+requestUpdateFlowEntitlement :: UpdateFlowEntitlement -> TestTree
+requestUpdateFlowEntitlement =
+  req
+    "UpdateFlowEntitlement"
+    "fixture/UpdateFlowEntitlement.yaml"
+
+requestUpdateFlowMediaStream :: UpdateFlowMediaStream -> TestTree
+requestUpdateFlowMediaStream =
+  req
+    "UpdateFlowMediaStream"
+    "fixture/UpdateFlowMediaStream.yaml"
+
+requestUpdateFlowOutput :: UpdateFlowOutput -> TestTree
+requestUpdateFlowOutput =
+  req
+    "UpdateFlowOutput"
+    "fixture/UpdateFlowOutput.yaml"
+
+requestUpdateFlowSource :: UpdateFlowSource -> TestTree
+requestUpdateFlowSource =
+  req
+    "UpdateFlowSource"
+    "fixture/UpdateFlowSource.yaml"
+
+-- Responses
+
+responseAddFlowMediaStreams :: AddFlowMediaStreamsResponse -> TestTree
+responseAddFlowMediaStreams =
+  res
+    "AddFlowMediaStreamsResponse"
+    "fixture/AddFlowMediaStreamsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddFlowMediaStreams)
+
+responseAddFlowOutputs :: AddFlowOutputsResponse -> TestTree
+responseAddFlowOutputs =
+  res
+    "AddFlowOutputsResponse"
+    "fixture/AddFlowOutputsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddFlowOutputs)
+
+responseAddFlowSources :: AddFlowSourcesResponse -> TestTree
+responseAddFlowSources =
+  res
+    "AddFlowSourcesResponse"
+    "fixture/AddFlowSourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddFlowSources)
+
+responseAddFlowVpcInterfaces :: AddFlowVpcInterfacesResponse -> TestTree
+responseAddFlowVpcInterfaces =
+  res
+    "AddFlowVpcInterfacesResponse"
+    "fixture/AddFlowVpcInterfacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddFlowVpcInterfaces)
+
+responseCreateFlow :: CreateFlowResponse -> TestTree
+responseCreateFlow =
+  res
+    "CreateFlowResponse"
+    "fixture/CreateFlowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFlow)
+
+responseDeleteFlow :: DeleteFlowResponse -> TestTree
+responseDeleteFlow =
+  res
+    "DeleteFlowResponse"
+    "fixture/DeleteFlowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFlow)
+
+responseDescribeFlow :: DescribeFlowResponse -> TestTree
+responseDescribeFlow =
+  res
+    "DescribeFlowResponse"
+    "fixture/DescribeFlowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFlow)
+
+responseDescribeOffering :: DescribeOfferingResponse -> TestTree
+responseDescribeOffering =
+  res
+    "DescribeOfferingResponse"
+    "fixture/DescribeOfferingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeOffering)
+
+responseDescribeReservation :: DescribeReservationResponse -> TestTree
+responseDescribeReservation =
+  res
+    "DescribeReservationResponse"
+    "fixture/DescribeReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReservation)
+
+responseGrantFlowEntitlements :: GrantFlowEntitlementsResponse -> TestTree
+responseGrantFlowEntitlements =
+  res
+    "GrantFlowEntitlementsResponse"
+    "fixture/GrantFlowEntitlementsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GrantFlowEntitlements)
+
+responseListEntitlements :: ListEntitlementsResponse -> TestTree
+responseListEntitlements =
+  res
+    "ListEntitlementsResponse"
+    "fixture/ListEntitlementsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEntitlements)
+
+responseListFlows :: ListFlowsResponse -> TestTree
+responseListFlows =
+  res
+    "ListFlowsResponse"
+    "fixture/ListFlowsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFlows)
+
+responseListOfferings :: ListOfferingsResponse -> TestTree
+responseListOfferings =
+  res
+    "ListOfferingsResponse"
+    "fixture/ListOfferingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListOfferings)
+
+responseListReservations :: ListReservationsResponse -> TestTree
+responseListReservations =
+  res
+    "ListReservationsResponse"
+    "fixture/ListReservationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListReservations)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePurchaseOffering :: PurchaseOfferingResponse -> TestTree
+responsePurchaseOffering =
+  res
+    "PurchaseOfferingResponse"
+    "fixture/PurchaseOfferingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PurchaseOffering)
+
+responseRemoveFlowMediaStream :: RemoveFlowMediaStreamResponse -> TestTree
+responseRemoveFlowMediaStream =
+  res
+    "RemoveFlowMediaStreamResponse"
+    "fixture/RemoveFlowMediaStreamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveFlowMediaStream)
+
+responseRemoveFlowOutput :: RemoveFlowOutputResponse -> TestTree
+responseRemoveFlowOutput =
+  res
+    "RemoveFlowOutputResponse"
+    "fixture/RemoveFlowOutputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveFlowOutput)
+
+responseRemoveFlowSource :: RemoveFlowSourceResponse -> TestTree
+responseRemoveFlowSource =
+  res
+    "RemoveFlowSourceResponse"
+    "fixture/RemoveFlowSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveFlowSource)
+
+responseRemoveFlowVpcInterface :: RemoveFlowVpcInterfaceResponse -> TestTree
+responseRemoveFlowVpcInterface =
+  res
+    "RemoveFlowVpcInterfaceResponse"
+    "fixture/RemoveFlowVpcInterfaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveFlowVpcInterface)
+
+responseRevokeFlowEntitlement :: RevokeFlowEntitlementResponse -> TestTree
+responseRevokeFlowEntitlement =
+  res
+    "RevokeFlowEntitlementResponse"
+    "fixture/RevokeFlowEntitlementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeFlowEntitlement)
+
+responseStartFlow :: StartFlowResponse -> TestTree
+responseStartFlow =
+  res
+    "StartFlowResponse"
+    "fixture/StartFlowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartFlow)
+
+responseStopFlow :: StopFlowResponse -> TestTree
+responseStopFlow =
+  res
+    "StopFlowResponse"
+    "fixture/StopFlowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopFlow)
+
+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)
+
+responseUpdateFlow :: UpdateFlowResponse -> TestTree
+responseUpdateFlow =
+  res
+    "UpdateFlowResponse"
+    "fixture/UpdateFlowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFlow)
+
+responseUpdateFlowEntitlement :: UpdateFlowEntitlementResponse -> TestTree
+responseUpdateFlowEntitlement =
+  res
+    "UpdateFlowEntitlementResponse"
+    "fixture/UpdateFlowEntitlementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFlowEntitlement)
+
+responseUpdateFlowMediaStream :: UpdateFlowMediaStreamResponse -> TestTree
+responseUpdateFlowMediaStream =
+  res
+    "UpdateFlowMediaStreamResponse"
+    "fixture/UpdateFlowMediaStreamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFlowMediaStream)
+
+responseUpdateFlowOutput :: UpdateFlowOutputResponse -> TestTree
+responseUpdateFlowOutput =
+  res
+    "UpdateFlowOutputResponse"
+    "fixture/UpdateFlowOutputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFlowOutput)
+
+responseUpdateFlowSource :: UpdateFlowSourceResponse -> TestTree
+responseUpdateFlowSource =
+  res
+    "UpdateFlowSourceResponse"
+    "fixture/UpdateFlowSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFlowSource)
diff --git a/test/Test/Amazonka/MediaConnect.hs b/test/Test/Amazonka/MediaConnect.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MediaConnect.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MediaConnect
+-- 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.MediaConnect
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MediaConnect/Internal.hs b/test/Test/Amazonka/MediaConnect/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MediaConnect/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MediaConnect.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.MediaConnect.Internal where
