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 ApiGatewayV2 SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-11-29@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-apigatewayv2)
+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.ApiGatewayV2](http://hackage.haskell.org/package/amazonka-apigatewayv2/docs/Amazonka-ApiGatewayV2.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-apigatewayv2` 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-apigatewayv2.cabal b/amazonka-apigatewayv2.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-apigatewayv2.cabal
@@ -0,0 +1,191 @@
+cabal-version:      2.2
+name:               amazonka-apigatewayv2
+version:            2.0
+synopsis:           Amazon ApiGatewayV2 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-29@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.ApiGatewayV2.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.ApiGatewayV2" 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-apigatewayv2
+
+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.ApiGatewayV2
+    Amazonka.ApiGatewayV2.CreateApi
+    Amazonka.ApiGatewayV2.CreateApiMapping
+    Amazonka.ApiGatewayV2.CreateAuthorizer
+    Amazonka.ApiGatewayV2.CreateDeployment
+    Amazonka.ApiGatewayV2.CreateDomainName
+    Amazonka.ApiGatewayV2.CreateIntegration
+    Amazonka.ApiGatewayV2.CreateIntegrationResponse
+    Amazonka.ApiGatewayV2.CreateModel
+    Amazonka.ApiGatewayV2.CreateRoute
+    Amazonka.ApiGatewayV2.CreateRouteResponse
+    Amazonka.ApiGatewayV2.CreateStage
+    Amazonka.ApiGatewayV2.CreateVpcLink
+    Amazonka.ApiGatewayV2.DeleteAccessLogSettings
+    Amazonka.ApiGatewayV2.DeleteApi
+    Amazonka.ApiGatewayV2.DeleteApiMapping
+    Amazonka.ApiGatewayV2.DeleteAuthorizer
+    Amazonka.ApiGatewayV2.DeleteCorsConfiguration
+    Amazonka.ApiGatewayV2.DeleteDeployment
+    Amazonka.ApiGatewayV2.DeleteDomainName
+    Amazonka.ApiGatewayV2.DeleteIntegration
+    Amazonka.ApiGatewayV2.DeleteIntegrationResponse
+    Amazonka.ApiGatewayV2.DeleteModel
+    Amazonka.ApiGatewayV2.DeleteRoute
+    Amazonka.ApiGatewayV2.DeleteRouteRequestParameter
+    Amazonka.ApiGatewayV2.DeleteRouteResponse
+    Amazonka.ApiGatewayV2.DeleteRouteSettings
+    Amazonka.ApiGatewayV2.DeleteStage
+    Amazonka.ApiGatewayV2.DeleteVpcLink
+    Amazonka.ApiGatewayV2.ExportApi
+    Amazonka.ApiGatewayV2.GetApi
+    Amazonka.ApiGatewayV2.GetApiMapping
+    Amazonka.ApiGatewayV2.GetApiMappings
+    Amazonka.ApiGatewayV2.GetApis
+    Amazonka.ApiGatewayV2.GetAuthorizer
+    Amazonka.ApiGatewayV2.GetAuthorizers
+    Amazonka.ApiGatewayV2.GetDeployment
+    Amazonka.ApiGatewayV2.GetDeployments
+    Amazonka.ApiGatewayV2.GetDomainName
+    Amazonka.ApiGatewayV2.GetDomainNames
+    Amazonka.ApiGatewayV2.GetIntegration
+    Amazonka.ApiGatewayV2.GetIntegrationResponse
+    Amazonka.ApiGatewayV2.GetIntegrationResponses
+    Amazonka.ApiGatewayV2.GetIntegrations
+    Amazonka.ApiGatewayV2.GetModel
+    Amazonka.ApiGatewayV2.GetModels
+    Amazonka.ApiGatewayV2.GetModelTemplate
+    Amazonka.ApiGatewayV2.GetRoute
+    Amazonka.ApiGatewayV2.GetRouteResponse
+    Amazonka.ApiGatewayV2.GetRouteResponses
+    Amazonka.ApiGatewayV2.GetRoutes
+    Amazonka.ApiGatewayV2.GetStage
+    Amazonka.ApiGatewayV2.GetStages
+    Amazonka.ApiGatewayV2.GetTags
+    Amazonka.ApiGatewayV2.GetVpcLink
+    Amazonka.ApiGatewayV2.GetVpcLinks
+    Amazonka.ApiGatewayV2.ImportApi
+    Amazonka.ApiGatewayV2.Lens
+    Amazonka.ApiGatewayV2.ReimportApi
+    Amazonka.ApiGatewayV2.ResetAuthorizersCache
+    Amazonka.ApiGatewayV2.TagResource
+    Amazonka.ApiGatewayV2.Types
+    Amazonka.ApiGatewayV2.Types.AccessLogSettings
+    Amazonka.ApiGatewayV2.Types.Api
+    Amazonka.ApiGatewayV2.Types.ApiMapping
+    Amazonka.ApiGatewayV2.Types.AuthorizationType
+    Amazonka.ApiGatewayV2.Types.Authorizer
+    Amazonka.ApiGatewayV2.Types.AuthorizerType
+    Amazonka.ApiGatewayV2.Types.ConnectionType
+    Amazonka.ApiGatewayV2.Types.ContentHandlingStrategy
+    Amazonka.ApiGatewayV2.Types.Cors
+    Amazonka.ApiGatewayV2.Types.Deployment
+    Amazonka.ApiGatewayV2.Types.DeploymentStatus
+    Amazonka.ApiGatewayV2.Types.DomainName
+    Amazonka.ApiGatewayV2.Types.DomainNameConfiguration
+    Amazonka.ApiGatewayV2.Types.DomainNameStatus
+    Amazonka.ApiGatewayV2.Types.EndpointType
+    Amazonka.ApiGatewayV2.Types.Integration
+    Amazonka.ApiGatewayV2.Types.IntegrationResponse
+    Amazonka.ApiGatewayV2.Types.IntegrationType
+    Amazonka.ApiGatewayV2.Types.JWTConfiguration
+    Amazonka.ApiGatewayV2.Types.LoggingLevel
+    Amazonka.ApiGatewayV2.Types.Model
+    Amazonka.ApiGatewayV2.Types.MutualTlsAuthentication
+    Amazonka.ApiGatewayV2.Types.MutualTlsAuthenticationInput
+    Amazonka.ApiGatewayV2.Types.ParameterConstraints
+    Amazonka.ApiGatewayV2.Types.PassthroughBehavior
+    Amazonka.ApiGatewayV2.Types.ProtocolType
+    Amazonka.ApiGatewayV2.Types.Route
+    Amazonka.ApiGatewayV2.Types.RouteResponse
+    Amazonka.ApiGatewayV2.Types.RouteSettings
+    Amazonka.ApiGatewayV2.Types.SecurityPolicy
+    Amazonka.ApiGatewayV2.Types.Stage
+    Amazonka.ApiGatewayV2.Types.TlsConfig
+    Amazonka.ApiGatewayV2.Types.TlsConfigInput
+    Amazonka.ApiGatewayV2.Types.VpcLink
+    Amazonka.ApiGatewayV2.Types.VpcLinkStatus
+    Amazonka.ApiGatewayV2.Types.VpcLinkVersion
+    Amazonka.ApiGatewayV2.UntagResource
+    Amazonka.ApiGatewayV2.UpdateApi
+    Amazonka.ApiGatewayV2.UpdateApiMapping
+    Amazonka.ApiGatewayV2.UpdateAuthorizer
+    Amazonka.ApiGatewayV2.UpdateDeployment
+    Amazonka.ApiGatewayV2.UpdateDomainName
+    Amazonka.ApiGatewayV2.UpdateIntegration
+    Amazonka.ApiGatewayV2.UpdateIntegrationResponse
+    Amazonka.ApiGatewayV2.UpdateModel
+    Amazonka.ApiGatewayV2.UpdateRoute
+    Amazonka.ApiGatewayV2.UpdateRouteResponse
+    Amazonka.ApiGatewayV2.UpdateStage
+    Amazonka.ApiGatewayV2.UpdateVpcLink
+    Amazonka.ApiGatewayV2.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-apigatewayv2-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.ApiGatewayV2
+    Test.Amazonka.ApiGatewayV2.Internal
+    Test.Amazonka.Gen.ApiGatewayV2
+
+  build-depends:
+    , amazonka-apigatewayv2
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateApi.yaml b/fixture/CreateApi.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApi.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateApiMapping.yaml b/fixture/CreateApiMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApiMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateApiMappingResponse.proto b/fixture/CreateApiMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApiMappingResponse.proto
diff --git a/fixture/CreateApiResponse.proto b/fixture/CreateApiResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApiResponse.proto
diff --git a/fixture/CreateAuthorizer.yaml b/fixture/CreateAuthorizer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAuthorizer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateAuthorizerResponse.proto b/fixture/CreateAuthorizerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAuthorizerResponse.proto
diff --git a/fixture/CreateDeployment.yaml b/fixture/CreateDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateDeploymentResponse.proto b/fixture/CreateDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeploymentResponse.proto
diff --git a/fixture/CreateDomainName.yaml b/fixture/CreateDomainName.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomainName.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateDomainNameResponse.proto b/fixture/CreateDomainNameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomainNameResponse.proto
diff --git a/fixture/CreateIntegration.yaml b/fixture/CreateIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateIntegrationResponse.proto b/fixture/CreateIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntegrationResponse.proto
diff --git a/fixture/CreateIntegrationResponse.yaml b/fixture/CreateIntegrationResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntegrationResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateIntegrationResponseResponse.proto b/fixture/CreateIntegrationResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntegrationResponseResponse.proto
diff --git a/fixture/CreateModel.yaml b/fixture/CreateModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateModelResponse.proto b/fixture/CreateModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModelResponse.proto
diff --git a/fixture/CreateRoute.yaml b/fixture/CreateRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateRouteResponse.proto b/fixture/CreateRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRouteResponse.proto
diff --git a/fixture/CreateRouteResponse.yaml b/fixture/CreateRouteResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRouteResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateRouteResponseResponse.proto b/fixture/CreateRouteResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRouteResponseResponse.proto
diff --git a/fixture/CreateStage.yaml b/fixture/CreateStage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateStageResponse.proto b/fixture/CreateStageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStageResponse.proto
diff --git a/fixture/CreateVpcLink.yaml b/fixture/CreateVpcLink.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcLink.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/CreateVpcLinkResponse.proto b/fixture/CreateVpcLinkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcLinkResponse.proto
diff --git a/fixture/DeleteAccessLogSettings.yaml b/fixture/DeleteAccessLogSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessLogSettings.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteAccessLogSettingsResponse.proto b/fixture/DeleteAccessLogSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessLogSettingsResponse.proto
diff --git a/fixture/DeleteApi.yaml b/fixture/DeleteApi.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApi.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteApiMapping.yaml b/fixture/DeleteApiMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApiMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteApiMappingResponse.proto b/fixture/DeleteApiMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApiMappingResponse.proto
diff --git a/fixture/DeleteApiResponse.proto b/fixture/DeleteApiResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApiResponse.proto
diff --git a/fixture/DeleteAuthorizer.yaml b/fixture/DeleteAuthorizer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAuthorizer.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteAuthorizerResponse.proto b/fixture/DeleteAuthorizerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAuthorizerResponse.proto
diff --git a/fixture/DeleteCorsConfiguration.yaml b/fixture/DeleteCorsConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCorsConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteCorsConfigurationResponse.proto b/fixture/DeleteCorsConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCorsConfigurationResponse.proto
diff --git a/fixture/DeleteDeployment.yaml b/fixture/DeleteDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteDeploymentResponse.proto b/fixture/DeleteDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeploymentResponse.proto
diff --git a/fixture/DeleteDomainName.yaml b/fixture/DeleteDomainName.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainName.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteDomainNameResponse.proto b/fixture/DeleteDomainNameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDomainNameResponse.proto
diff --git a/fixture/DeleteIntegration.yaml b/fixture/DeleteIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteIntegrationResponse.proto b/fixture/DeleteIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntegrationResponse.proto
diff --git a/fixture/DeleteIntegrationResponse.yaml b/fixture/DeleteIntegrationResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntegrationResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteIntegrationResponseResponse.proto b/fixture/DeleteIntegrationResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntegrationResponseResponse.proto
diff --git a/fixture/DeleteModel.yaml b/fixture/DeleteModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModel.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteModelResponse.proto b/fixture/DeleteModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModelResponse.proto
diff --git a/fixture/DeleteRoute.yaml b/fixture/DeleteRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteRouteRequestParameter.yaml b/fixture/DeleteRouteRequestParameter.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteRequestParameter.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteRouteRequestParameterResponse.proto b/fixture/DeleteRouteRequestParameterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteRequestParameterResponse.proto
diff --git a/fixture/DeleteRouteResponse.proto b/fixture/DeleteRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteResponse.proto
diff --git a/fixture/DeleteRouteResponse.yaml b/fixture/DeleteRouteResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteRouteResponseResponse.proto b/fixture/DeleteRouteResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteResponseResponse.proto
diff --git a/fixture/DeleteRouteSettings.yaml b/fixture/DeleteRouteSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteSettings.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteRouteSettingsResponse.proto b/fixture/DeleteRouteSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteSettingsResponse.proto
diff --git a/fixture/DeleteStage.yaml b/fixture/DeleteStage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStage.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteStageResponse.proto b/fixture/DeleteStageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteStageResponse.proto
diff --git a/fixture/DeleteVpcLink.yaml b/fixture/DeleteVpcLink.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcLink.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/DeleteVpcLinkResponse.proto b/fixture/DeleteVpcLinkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcLinkResponse.proto
diff --git a/fixture/ExportApi.yaml b/fixture/ExportApi.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportApi.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/ExportApiResponse.proto b/fixture/ExportApiResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportApiResponse.proto
diff --git a/fixture/GetApi.yaml b/fixture/GetApi.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApi.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetApiMapping.yaml b/fixture/GetApiMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApiMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetApiMappingResponse.proto b/fixture/GetApiMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApiMappingResponse.proto
diff --git a/fixture/GetApiMappings.yaml b/fixture/GetApiMappings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApiMappings.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetApiMappingsResponse.proto b/fixture/GetApiMappingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApiMappingsResponse.proto
diff --git a/fixture/GetApiResponse.proto b/fixture/GetApiResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApiResponse.proto
diff --git a/fixture/GetApis.yaml b/fixture/GetApis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApis.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetApisResponse.proto b/fixture/GetApisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApisResponse.proto
diff --git a/fixture/GetAuthorizer.yaml b/fixture/GetAuthorizer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAuthorizer.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetAuthorizerResponse.proto b/fixture/GetAuthorizerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAuthorizerResponse.proto
diff --git a/fixture/GetAuthorizers.yaml b/fixture/GetAuthorizers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAuthorizers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetAuthorizersResponse.proto b/fixture/GetAuthorizersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAuthorizersResponse.proto
diff --git a/fixture/GetDeployment.yaml b/fixture/GetDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetDeploymentResponse.proto b/fixture/GetDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeploymentResponse.proto
diff --git a/fixture/GetDeployments.yaml b/fixture/GetDeployments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeployments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetDeploymentsResponse.proto b/fixture/GetDeploymentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeploymentsResponse.proto
diff --git a/fixture/GetDomainName.yaml b/fixture/GetDomainName.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainName.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetDomainNameResponse.proto b/fixture/GetDomainNameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainNameResponse.proto
diff --git a/fixture/GetDomainNames.yaml b/fixture/GetDomainNames.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainNames.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetDomainNamesResponse.proto b/fixture/GetDomainNamesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainNamesResponse.proto
diff --git a/fixture/GetIntegration.yaml b/fixture/GetIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetIntegrationResponse.proto b/fixture/GetIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrationResponse.proto
diff --git a/fixture/GetIntegrationResponse.yaml b/fixture/GetIntegrationResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrationResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetIntegrationResponseResponse.proto b/fixture/GetIntegrationResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrationResponseResponse.proto
diff --git a/fixture/GetIntegrationResponses.yaml b/fixture/GetIntegrationResponses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrationResponses.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetIntegrationResponsesResponse.proto b/fixture/GetIntegrationResponsesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrationResponsesResponse.proto
diff --git a/fixture/GetIntegrations.yaml b/fixture/GetIntegrations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetIntegrationsResponse.proto b/fixture/GetIntegrationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntegrationsResponse.proto
diff --git a/fixture/GetModel.yaml b/fixture/GetModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetModel.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetModelResponse.proto b/fixture/GetModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelResponse.proto
diff --git a/fixture/GetModelTemplate.yaml b/fixture/GetModelTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetModelTemplateResponse.proto b/fixture/GetModelTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelTemplateResponse.proto
diff --git a/fixture/GetModels.yaml b/fixture/GetModels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetModels.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetModelsResponse.proto b/fixture/GetModelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelsResponse.proto
diff --git a/fixture/GetRoute.yaml b/fixture/GetRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetRouteResponse.proto b/fixture/GetRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRouteResponse.proto
diff --git a/fixture/GetRouteResponse.yaml b/fixture/GetRouteResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRouteResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetRouteResponseResponse.proto b/fixture/GetRouteResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRouteResponseResponse.proto
diff --git a/fixture/GetRouteResponses.yaml b/fixture/GetRouteResponses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRouteResponses.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetRouteResponsesResponse.proto b/fixture/GetRouteResponsesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRouteResponsesResponse.proto
diff --git a/fixture/GetRoutes.yaml b/fixture/GetRoutes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRoutes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetRoutesResponse.proto b/fixture/GetRoutesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRoutesResponse.proto
diff --git a/fixture/GetStage.yaml b/fixture/GetStage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStage.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetStageResponse.proto b/fixture/GetStageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStageResponse.proto
diff --git a/fixture/GetStages.yaml b/fixture/GetStages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStages.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetStagesResponse.proto b/fixture/GetStagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStagesResponse.proto
diff --git a/fixture/GetTags.yaml b/fixture/GetTags.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTags.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetTagsResponse.proto b/fixture/GetTagsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTagsResponse.proto
diff --git a/fixture/GetVpcLink.yaml b/fixture/GetVpcLink.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpcLink.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetVpcLinkResponse.proto b/fixture/GetVpcLinkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpcLinkResponse.proto
diff --git a/fixture/GetVpcLinks.yaml b/fixture/GetVpcLinks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpcLinks.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/GetVpcLinksResponse.proto b/fixture/GetVpcLinksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpcLinksResponse.proto
diff --git a/fixture/ImportApi.yaml b/fixture/ImportApi.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportApi.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/ImportApiResponse.proto b/fixture/ImportApiResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportApiResponse.proto
diff --git a/fixture/ReimportApi.yaml b/fixture/ReimportApi.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ReimportApi.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/ReimportApiResponse.proto b/fixture/ReimportApiResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ReimportApiResponse.proto
diff --git a/fixture/ResetAuthorizersCache.yaml b/fixture/ResetAuthorizersCache.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResetAuthorizersCache.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/ResetAuthorizersCacheResponse.proto b/fixture/ResetAuthorizersCacheResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResetAuthorizersCacheResponse.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/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateApi.yaml b/fixture/UpdateApi.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApi.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateApiMapping.yaml b/fixture/UpdateApiMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApiMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateApiMappingResponse.proto b/fixture/UpdateApiMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApiMappingResponse.proto
diff --git a/fixture/UpdateApiResponse.proto b/fixture/UpdateApiResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApiResponse.proto
diff --git a/fixture/UpdateAuthorizer.yaml b/fixture/UpdateAuthorizer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAuthorizer.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateAuthorizerResponse.proto b/fixture/UpdateAuthorizerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAuthorizerResponse.proto
diff --git a/fixture/UpdateDeployment.yaml b/fixture/UpdateDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateDeploymentResponse.proto b/fixture/UpdateDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDeploymentResponse.proto
diff --git a/fixture/UpdateDomainName.yaml b/fixture/UpdateDomainName.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDomainName.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateDomainNameResponse.proto b/fixture/UpdateDomainNameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDomainNameResponse.proto
diff --git a/fixture/UpdateIntegration.yaml b/fixture/UpdateIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateIntegrationResponse.proto b/fixture/UpdateIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIntegrationResponse.proto
diff --git a/fixture/UpdateIntegrationResponse.yaml b/fixture/UpdateIntegrationResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIntegrationResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateIntegrationResponseResponse.proto b/fixture/UpdateIntegrationResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIntegrationResponseResponse.proto
diff --git a/fixture/UpdateModel.yaml b/fixture/UpdateModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModel.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateModelResponse.proto b/fixture/UpdateModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelResponse.proto
diff --git a/fixture/UpdateRoute.yaml b/fixture/UpdateRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateRouteResponse.proto b/fixture/UpdateRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRouteResponse.proto
diff --git a/fixture/UpdateRouteResponse.yaml b/fixture/UpdateRouteResponse.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRouteResponse.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateRouteResponseResponse.proto b/fixture/UpdateRouteResponseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRouteResponseResponse.proto
diff --git a/fixture/UpdateStage.yaml b/fixture/UpdateStage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStage.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateStageResponse.proto b/fixture/UpdateStageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateStageResponse.proto
diff --git a/fixture/UpdateVpcLink.yaml b/fixture/UpdateVpcLink.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVpcLink.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  apigateway.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/UpdateVpcLinkResponse.proto b/fixture/UpdateVpcLinkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVpcLinkResponse.proto
diff --git a/gen/Amazonka/ApiGatewayV2.hs b/gen/Amazonka/ApiGatewayV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2.hs
@@ -0,0 +1,710 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2
+-- 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-29@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon API Gateway V2
+module Amazonka.ApiGatewayV2
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateApi
+    CreateApi (CreateApi'),
+    newCreateApi,
+    CreateApiResponse (CreateApiResponse'),
+    newCreateApiResponse,
+
+    -- ** CreateApiMapping
+    CreateApiMapping (CreateApiMapping'),
+    newCreateApiMapping,
+    CreateApiMappingResponse (CreateApiMappingResponse'),
+    newCreateApiMappingResponse,
+
+    -- ** CreateAuthorizer
+    CreateAuthorizer (CreateAuthorizer'),
+    newCreateAuthorizer,
+    CreateAuthorizerResponse (CreateAuthorizerResponse'),
+    newCreateAuthorizerResponse,
+
+    -- ** CreateDeployment
+    CreateDeployment (CreateDeployment'),
+    newCreateDeployment,
+    CreateDeploymentResponse (CreateDeploymentResponse'),
+    newCreateDeploymentResponse,
+
+    -- ** CreateDomainName
+    CreateDomainName (CreateDomainName'),
+    newCreateDomainName,
+    CreateDomainNameResponse (CreateDomainNameResponse'),
+    newCreateDomainNameResponse,
+
+    -- ** CreateIntegration
+    CreateIntegration (CreateIntegration'),
+    newCreateIntegration,
+    CreateIntegrationResponse' (CreateIntegrationResponse''),
+    newCreateIntegrationResponse',
+
+    -- ** CreateIntegrationResponse
+    CreateIntegrationResponse (CreateIntegrationResponse'),
+    newCreateIntegrationResponse,
+    CreateIntegrationResponseResponse (CreateIntegrationResponseResponse'),
+    newCreateIntegrationResponseResponse,
+
+    -- ** CreateModel
+    CreateModel (CreateModel'),
+    newCreateModel,
+    CreateModelResponse (CreateModelResponse'),
+    newCreateModelResponse,
+
+    -- ** CreateRoute
+    CreateRoute (CreateRoute'),
+    newCreateRoute,
+    CreateRouteResponse' (CreateRouteResponse''),
+    newCreateRouteResponse',
+
+    -- ** CreateRouteResponse
+    CreateRouteResponse (CreateRouteResponse'),
+    newCreateRouteResponse,
+    CreateRouteResponseResponse (CreateRouteResponseResponse'),
+    newCreateRouteResponseResponse,
+
+    -- ** CreateStage
+    CreateStage (CreateStage'),
+    newCreateStage,
+    CreateStageResponse (CreateStageResponse'),
+    newCreateStageResponse,
+
+    -- ** CreateVpcLink
+    CreateVpcLink (CreateVpcLink'),
+    newCreateVpcLink,
+    CreateVpcLinkResponse (CreateVpcLinkResponse'),
+    newCreateVpcLinkResponse,
+
+    -- ** DeleteAccessLogSettings
+    DeleteAccessLogSettings (DeleteAccessLogSettings'),
+    newDeleteAccessLogSettings,
+    DeleteAccessLogSettingsResponse (DeleteAccessLogSettingsResponse'),
+    newDeleteAccessLogSettingsResponse,
+
+    -- ** DeleteApi
+    DeleteApi (DeleteApi'),
+    newDeleteApi,
+    DeleteApiResponse (DeleteApiResponse'),
+    newDeleteApiResponse,
+
+    -- ** DeleteApiMapping
+    DeleteApiMapping (DeleteApiMapping'),
+    newDeleteApiMapping,
+    DeleteApiMappingResponse (DeleteApiMappingResponse'),
+    newDeleteApiMappingResponse,
+
+    -- ** DeleteAuthorizer
+    DeleteAuthorizer (DeleteAuthorizer'),
+    newDeleteAuthorizer,
+    DeleteAuthorizerResponse (DeleteAuthorizerResponse'),
+    newDeleteAuthorizerResponse,
+
+    -- ** DeleteCorsConfiguration
+    DeleteCorsConfiguration (DeleteCorsConfiguration'),
+    newDeleteCorsConfiguration,
+    DeleteCorsConfigurationResponse (DeleteCorsConfigurationResponse'),
+    newDeleteCorsConfigurationResponse,
+
+    -- ** DeleteDeployment
+    DeleteDeployment (DeleteDeployment'),
+    newDeleteDeployment,
+    DeleteDeploymentResponse (DeleteDeploymentResponse'),
+    newDeleteDeploymentResponse,
+
+    -- ** DeleteDomainName
+    DeleteDomainName (DeleteDomainName'),
+    newDeleteDomainName,
+    DeleteDomainNameResponse (DeleteDomainNameResponse'),
+    newDeleteDomainNameResponse,
+
+    -- ** DeleteIntegration
+    DeleteIntegration (DeleteIntegration'),
+    newDeleteIntegration,
+    DeleteIntegrationResponse' (DeleteIntegrationResponse''),
+    newDeleteIntegrationResponse',
+
+    -- ** DeleteIntegrationResponse
+    DeleteIntegrationResponse (DeleteIntegrationResponse'),
+    newDeleteIntegrationResponse,
+    DeleteIntegrationResponseResponse (DeleteIntegrationResponseResponse'),
+    newDeleteIntegrationResponseResponse,
+
+    -- ** DeleteModel
+    DeleteModel (DeleteModel'),
+    newDeleteModel,
+    DeleteModelResponse (DeleteModelResponse'),
+    newDeleteModelResponse,
+
+    -- ** DeleteRoute
+    DeleteRoute (DeleteRoute'),
+    newDeleteRoute,
+    DeleteRouteResponse' (DeleteRouteResponse''),
+    newDeleteRouteResponse',
+
+    -- ** DeleteRouteRequestParameter
+    DeleteRouteRequestParameter (DeleteRouteRequestParameter'),
+    newDeleteRouteRequestParameter,
+    DeleteRouteRequestParameterResponse (DeleteRouteRequestParameterResponse'),
+    newDeleteRouteRequestParameterResponse,
+
+    -- ** DeleteRouteResponse
+    DeleteRouteResponse (DeleteRouteResponse'),
+    newDeleteRouteResponse,
+    DeleteRouteResponseResponse (DeleteRouteResponseResponse'),
+    newDeleteRouteResponseResponse,
+
+    -- ** DeleteRouteSettings
+    DeleteRouteSettings (DeleteRouteSettings'),
+    newDeleteRouteSettings,
+    DeleteRouteSettingsResponse (DeleteRouteSettingsResponse'),
+    newDeleteRouteSettingsResponse,
+
+    -- ** DeleteStage
+    DeleteStage (DeleteStage'),
+    newDeleteStage,
+    DeleteStageResponse (DeleteStageResponse'),
+    newDeleteStageResponse,
+
+    -- ** DeleteVpcLink
+    DeleteVpcLink (DeleteVpcLink'),
+    newDeleteVpcLink,
+    DeleteVpcLinkResponse (DeleteVpcLinkResponse'),
+    newDeleteVpcLinkResponse,
+
+    -- ** ExportApi
+    ExportApi (ExportApi'),
+    newExportApi,
+    ExportApiResponse (ExportApiResponse'),
+    newExportApiResponse,
+
+    -- ** GetApi
+    GetApi (GetApi'),
+    newGetApi,
+    GetApiResponse (GetApiResponse'),
+    newGetApiResponse,
+
+    -- ** GetApiMapping
+    GetApiMapping (GetApiMapping'),
+    newGetApiMapping,
+    GetApiMappingResponse (GetApiMappingResponse'),
+    newGetApiMappingResponse,
+
+    -- ** GetApiMappings
+    GetApiMappings (GetApiMappings'),
+    newGetApiMappings,
+    GetApiMappingsResponse (GetApiMappingsResponse'),
+    newGetApiMappingsResponse,
+
+    -- ** GetApis (Paginated)
+    GetApis (GetApis'),
+    newGetApis,
+    GetApisResponse (GetApisResponse'),
+    newGetApisResponse,
+
+    -- ** GetAuthorizer
+    GetAuthorizer (GetAuthorizer'),
+    newGetAuthorizer,
+    GetAuthorizerResponse (GetAuthorizerResponse'),
+    newGetAuthorizerResponse,
+
+    -- ** GetAuthorizers (Paginated)
+    GetAuthorizers (GetAuthorizers'),
+    newGetAuthorizers,
+    GetAuthorizersResponse (GetAuthorizersResponse'),
+    newGetAuthorizersResponse,
+
+    -- ** GetDeployment
+    GetDeployment (GetDeployment'),
+    newGetDeployment,
+    GetDeploymentResponse (GetDeploymentResponse'),
+    newGetDeploymentResponse,
+
+    -- ** GetDeployments (Paginated)
+    GetDeployments (GetDeployments'),
+    newGetDeployments,
+    GetDeploymentsResponse (GetDeploymentsResponse'),
+    newGetDeploymentsResponse,
+
+    -- ** GetDomainName
+    GetDomainName (GetDomainName'),
+    newGetDomainName,
+    GetDomainNameResponse (GetDomainNameResponse'),
+    newGetDomainNameResponse,
+
+    -- ** GetDomainNames (Paginated)
+    GetDomainNames (GetDomainNames'),
+    newGetDomainNames,
+    GetDomainNamesResponse (GetDomainNamesResponse'),
+    newGetDomainNamesResponse,
+
+    -- ** GetIntegration
+    GetIntegration (GetIntegration'),
+    newGetIntegration,
+    GetIntegrationResponse' (GetIntegrationResponse''),
+    newGetIntegrationResponse',
+
+    -- ** GetIntegrationResponse
+    GetIntegrationResponse (GetIntegrationResponse'),
+    newGetIntegrationResponse,
+    GetIntegrationResponseResponse (GetIntegrationResponseResponse'),
+    newGetIntegrationResponseResponse,
+
+    -- ** GetIntegrationResponses (Paginated)
+    GetIntegrationResponses (GetIntegrationResponses'),
+    newGetIntegrationResponses,
+    GetIntegrationResponsesResponse (GetIntegrationResponsesResponse'),
+    newGetIntegrationResponsesResponse,
+
+    -- ** GetIntegrations (Paginated)
+    GetIntegrations (GetIntegrations'),
+    newGetIntegrations,
+    GetIntegrationsResponse (GetIntegrationsResponse'),
+    newGetIntegrationsResponse,
+
+    -- ** GetModel
+    GetModel (GetModel'),
+    newGetModel,
+    GetModelResponse (GetModelResponse'),
+    newGetModelResponse,
+
+    -- ** GetModelTemplate
+    GetModelTemplate (GetModelTemplate'),
+    newGetModelTemplate,
+    GetModelTemplateResponse (GetModelTemplateResponse'),
+    newGetModelTemplateResponse,
+
+    -- ** GetModels (Paginated)
+    GetModels (GetModels'),
+    newGetModels,
+    GetModelsResponse (GetModelsResponse'),
+    newGetModelsResponse,
+
+    -- ** GetRoute
+    GetRoute (GetRoute'),
+    newGetRoute,
+    GetRouteResponse' (GetRouteResponse''),
+    newGetRouteResponse',
+
+    -- ** GetRouteResponse
+    GetRouteResponse (GetRouteResponse'),
+    newGetRouteResponse,
+    GetRouteResponseResponse (GetRouteResponseResponse'),
+    newGetRouteResponseResponse,
+
+    -- ** GetRouteResponses (Paginated)
+    GetRouteResponses (GetRouteResponses'),
+    newGetRouteResponses,
+    GetRouteResponsesResponse (GetRouteResponsesResponse'),
+    newGetRouteResponsesResponse,
+
+    -- ** GetRoutes (Paginated)
+    GetRoutes (GetRoutes'),
+    newGetRoutes,
+    GetRoutesResponse (GetRoutesResponse'),
+    newGetRoutesResponse,
+
+    -- ** GetStage
+    GetStage (GetStage'),
+    newGetStage,
+    GetStageResponse (GetStageResponse'),
+    newGetStageResponse,
+
+    -- ** GetStages (Paginated)
+    GetStages (GetStages'),
+    newGetStages,
+    GetStagesResponse (GetStagesResponse'),
+    newGetStagesResponse,
+
+    -- ** GetTags
+    GetTags (GetTags'),
+    newGetTags,
+    GetTagsResponse (GetTagsResponse'),
+    newGetTagsResponse,
+
+    -- ** GetVpcLink
+    GetVpcLink (GetVpcLink'),
+    newGetVpcLink,
+    GetVpcLinkResponse (GetVpcLinkResponse'),
+    newGetVpcLinkResponse,
+
+    -- ** GetVpcLinks
+    GetVpcLinks (GetVpcLinks'),
+    newGetVpcLinks,
+    GetVpcLinksResponse (GetVpcLinksResponse'),
+    newGetVpcLinksResponse,
+
+    -- ** ImportApi
+    ImportApi (ImportApi'),
+    newImportApi,
+    ImportApiResponse (ImportApiResponse'),
+    newImportApiResponse,
+
+    -- ** ReimportApi
+    ReimportApi (ReimportApi'),
+    newReimportApi,
+    ReimportApiResponse (ReimportApiResponse'),
+    newReimportApiResponse,
+
+    -- ** ResetAuthorizersCache
+    ResetAuthorizersCache (ResetAuthorizersCache'),
+    newResetAuthorizersCache,
+    ResetAuthorizersCacheResponse (ResetAuthorizersCacheResponse'),
+    newResetAuthorizersCacheResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApi
+    UpdateApi (UpdateApi'),
+    newUpdateApi,
+    UpdateApiResponse (UpdateApiResponse'),
+    newUpdateApiResponse,
+
+    -- ** UpdateApiMapping
+    UpdateApiMapping (UpdateApiMapping'),
+    newUpdateApiMapping,
+    UpdateApiMappingResponse (UpdateApiMappingResponse'),
+    newUpdateApiMappingResponse,
+
+    -- ** UpdateAuthorizer
+    UpdateAuthorizer (UpdateAuthorizer'),
+    newUpdateAuthorizer,
+    UpdateAuthorizerResponse (UpdateAuthorizerResponse'),
+    newUpdateAuthorizerResponse,
+
+    -- ** UpdateDeployment
+    UpdateDeployment (UpdateDeployment'),
+    newUpdateDeployment,
+    UpdateDeploymentResponse (UpdateDeploymentResponse'),
+    newUpdateDeploymentResponse,
+
+    -- ** UpdateDomainName
+    UpdateDomainName (UpdateDomainName'),
+    newUpdateDomainName,
+    UpdateDomainNameResponse (UpdateDomainNameResponse'),
+    newUpdateDomainNameResponse,
+
+    -- ** UpdateIntegration
+    UpdateIntegration (UpdateIntegration'),
+    newUpdateIntegration,
+    UpdateIntegrationResponse' (UpdateIntegrationResponse''),
+    newUpdateIntegrationResponse',
+
+    -- ** UpdateIntegrationResponse
+    UpdateIntegrationResponse (UpdateIntegrationResponse'),
+    newUpdateIntegrationResponse,
+    UpdateIntegrationResponseResponse (UpdateIntegrationResponseResponse'),
+    newUpdateIntegrationResponseResponse,
+
+    -- ** UpdateModel
+    UpdateModel (UpdateModel'),
+    newUpdateModel,
+    UpdateModelResponse (UpdateModelResponse'),
+    newUpdateModelResponse,
+
+    -- ** UpdateRoute
+    UpdateRoute (UpdateRoute'),
+    newUpdateRoute,
+    UpdateRouteResponse' (UpdateRouteResponse''),
+    newUpdateRouteResponse',
+
+    -- ** UpdateRouteResponse
+    UpdateRouteResponse (UpdateRouteResponse'),
+    newUpdateRouteResponse,
+    UpdateRouteResponseResponse (UpdateRouteResponseResponse'),
+    newUpdateRouteResponseResponse,
+
+    -- ** UpdateStage
+    UpdateStage (UpdateStage'),
+    newUpdateStage,
+    UpdateStageResponse (UpdateStageResponse'),
+    newUpdateStageResponse,
+
+    -- ** UpdateVpcLink
+    UpdateVpcLink (UpdateVpcLink'),
+    newUpdateVpcLink,
+    UpdateVpcLinkResponse (UpdateVpcLinkResponse'),
+    newUpdateVpcLinkResponse,
+
+    -- * Types
+
+    -- ** AuthorizationType
+    AuthorizationType (..),
+
+    -- ** AuthorizerType
+    AuthorizerType (..),
+
+    -- ** ConnectionType
+    ConnectionType (..),
+
+    -- ** ContentHandlingStrategy
+    ContentHandlingStrategy (..),
+
+    -- ** DeploymentStatus
+    DeploymentStatus (..),
+
+    -- ** DomainNameStatus
+    DomainNameStatus (..),
+
+    -- ** EndpointType
+    EndpointType (..),
+
+    -- ** IntegrationType
+    IntegrationType (..),
+
+    -- ** LoggingLevel
+    LoggingLevel (..),
+
+    -- ** PassthroughBehavior
+    PassthroughBehavior (..),
+
+    -- ** ProtocolType
+    ProtocolType (..),
+
+    -- ** SecurityPolicy
+    SecurityPolicy (..),
+
+    -- ** VpcLinkStatus
+    VpcLinkStatus (..),
+
+    -- ** VpcLinkVersion
+    VpcLinkVersion (..),
+
+    -- ** AccessLogSettings
+    AccessLogSettings (AccessLogSettings'),
+    newAccessLogSettings,
+
+    -- ** Api
+    Api (Api'),
+    newApi,
+
+    -- ** ApiMapping
+    ApiMapping (ApiMapping'),
+    newApiMapping,
+
+    -- ** Authorizer
+    Authorizer (Authorizer'),
+    newAuthorizer,
+
+    -- ** Cors
+    Cors (Cors'),
+    newCors,
+
+    -- ** Deployment
+    Deployment (Deployment'),
+    newDeployment,
+
+    -- ** DomainName
+    DomainName (DomainName'),
+    newDomainName,
+
+    -- ** DomainNameConfiguration
+    DomainNameConfiguration (DomainNameConfiguration'),
+    newDomainNameConfiguration,
+
+    -- ** Integration
+    Integration (Integration'),
+    newIntegration,
+
+    -- ** IntegrationResponse
+    IntegrationResponse (IntegrationResponse'),
+    newIntegrationResponse,
+
+    -- ** JWTConfiguration
+    JWTConfiguration (JWTConfiguration'),
+    newJWTConfiguration,
+
+    -- ** Model
+    Model (Model'),
+    newModel,
+
+    -- ** MutualTlsAuthentication
+    MutualTlsAuthentication (MutualTlsAuthentication'),
+    newMutualTlsAuthentication,
+
+    -- ** MutualTlsAuthenticationInput
+    MutualTlsAuthenticationInput (MutualTlsAuthenticationInput'),
+    newMutualTlsAuthenticationInput,
+
+    -- ** ParameterConstraints
+    ParameterConstraints (ParameterConstraints'),
+    newParameterConstraints,
+
+    -- ** Route
+    Route (Route'),
+    newRoute,
+
+    -- ** RouteResponse
+    RouteResponse (RouteResponse'),
+    newRouteResponse,
+
+    -- ** RouteSettings
+    RouteSettings (RouteSettings'),
+    newRouteSettings,
+
+    -- ** Stage
+    Stage (Stage'),
+    newStage,
+
+    -- ** TlsConfig
+    TlsConfig (TlsConfig'),
+    newTlsConfig,
+
+    -- ** TlsConfigInput
+    TlsConfigInput (TlsConfigInput'),
+    newTlsConfigInput,
+
+    -- ** VpcLink
+    VpcLink (VpcLink'),
+    newVpcLink,
+  )
+where
+
+import Amazonka.ApiGatewayV2.CreateApi
+import Amazonka.ApiGatewayV2.CreateApiMapping
+import Amazonka.ApiGatewayV2.CreateAuthorizer
+import Amazonka.ApiGatewayV2.CreateDeployment
+import Amazonka.ApiGatewayV2.CreateDomainName
+import Amazonka.ApiGatewayV2.CreateIntegration
+import Amazonka.ApiGatewayV2.CreateIntegrationResponse
+import Amazonka.ApiGatewayV2.CreateModel
+import Amazonka.ApiGatewayV2.CreateRoute
+import Amazonka.ApiGatewayV2.CreateRouteResponse
+import Amazonka.ApiGatewayV2.CreateStage
+import Amazonka.ApiGatewayV2.CreateVpcLink
+import Amazonka.ApiGatewayV2.DeleteAccessLogSettings
+import Amazonka.ApiGatewayV2.DeleteApi
+import Amazonka.ApiGatewayV2.DeleteApiMapping
+import Amazonka.ApiGatewayV2.DeleteAuthorizer
+import Amazonka.ApiGatewayV2.DeleteCorsConfiguration
+import Amazonka.ApiGatewayV2.DeleteDeployment
+import Amazonka.ApiGatewayV2.DeleteDomainName
+import Amazonka.ApiGatewayV2.DeleteIntegration
+import Amazonka.ApiGatewayV2.DeleteIntegrationResponse
+import Amazonka.ApiGatewayV2.DeleteModel
+import Amazonka.ApiGatewayV2.DeleteRoute
+import Amazonka.ApiGatewayV2.DeleteRouteRequestParameter
+import Amazonka.ApiGatewayV2.DeleteRouteResponse
+import Amazonka.ApiGatewayV2.DeleteRouteSettings
+import Amazonka.ApiGatewayV2.DeleteStage
+import Amazonka.ApiGatewayV2.DeleteVpcLink
+import Amazonka.ApiGatewayV2.ExportApi
+import Amazonka.ApiGatewayV2.GetApi
+import Amazonka.ApiGatewayV2.GetApiMapping
+import Amazonka.ApiGatewayV2.GetApiMappings
+import Amazonka.ApiGatewayV2.GetApis
+import Amazonka.ApiGatewayV2.GetAuthorizer
+import Amazonka.ApiGatewayV2.GetAuthorizers
+import Amazonka.ApiGatewayV2.GetDeployment
+import Amazonka.ApiGatewayV2.GetDeployments
+import Amazonka.ApiGatewayV2.GetDomainName
+import Amazonka.ApiGatewayV2.GetDomainNames
+import Amazonka.ApiGatewayV2.GetIntegration
+import Amazonka.ApiGatewayV2.GetIntegrationResponse
+import Amazonka.ApiGatewayV2.GetIntegrationResponses
+import Amazonka.ApiGatewayV2.GetIntegrations
+import Amazonka.ApiGatewayV2.GetModel
+import Amazonka.ApiGatewayV2.GetModelTemplate
+import Amazonka.ApiGatewayV2.GetModels
+import Amazonka.ApiGatewayV2.GetRoute
+import Amazonka.ApiGatewayV2.GetRouteResponse
+import Amazonka.ApiGatewayV2.GetRouteResponses
+import Amazonka.ApiGatewayV2.GetRoutes
+import Amazonka.ApiGatewayV2.GetStage
+import Amazonka.ApiGatewayV2.GetStages
+import Amazonka.ApiGatewayV2.GetTags
+import Amazonka.ApiGatewayV2.GetVpcLink
+import Amazonka.ApiGatewayV2.GetVpcLinks
+import Amazonka.ApiGatewayV2.ImportApi
+import Amazonka.ApiGatewayV2.Lens
+import Amazonka.ApiGatewayV2.ReimportApi
+import Amazonka.ApiGatewayV2.ResetAuthorizersCache
+import Amazonka.ApiGatewayV2.TagResource
+import Amazonka.ApiGatewayV2.Types
+import Amazonka.ApiGatewayV2.UntagResource
+import Amazonka.ApiGatewayV2.UpdateApi
+import Amazonka.ApiGatewayV2.UpdateApiMapping
+import Amazonka.ApiGatewayV2.UpdateAuthorizer
+import Amazonka.ApiGatewayV2.UpdateDeployment
+import Amazonka.ApiGatewayV2.UpdateDomainName
+import Amazonka.ApiGatewayV2.UpdateIntegration
+import Amazonka.ApiGatewayV2.UpdateIntegrationResponse
+import Amazonka.ApiGatewayV2.UpdateModel
+import Amazonka.ApiGatewayV2.UpdateRoute
+import Amazonka.ApiGatewayV2.UpdateRouteResponse
+import Amazonka.ApiGatewayV2.UpdateStage
+import Amazonka.ApiGatewayV2.UpdateVpcLink
+import Amazonka.ApiGatewayV2.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 'ApiGatewayV2'.
+
+-- $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/ApiGatewayV2/CreateApi.hs b/gen/Amazonka/ApiGatewayV2/CreateApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateApi.hs
@@ -0,0 +1,648 @@
+{-# 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.ApiGatewayV2.CreateApi
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Api resource.
+module Amazonka.ApiGatewayV2.CreateApi
+  ( -- * Creating a Request
+    CreateApi (..),
+    newCreateApi,
+
+    -- * Request Lenses
+    createApi_apiKeySelectionExpression,
+    createApi_corsConfiguration,
+    createApi_credentialsArn,
+    createApi_description,
+    createApi_disableExecuteApiEndpoint,
+    createApi_disableSchemaValidation,
+    createApi_routeKey,
+    createApi_routeSelectionExpression,
+    createApi_tags,
+    createApi_target,
+    createApi_version,
+    createApi_protocolType,
+    createApi_name,
+
+    -- * Destructuring the Response
+    CreateApiResponse (..),
+    newCreateApiResponse,
+
+    -- * Response Lenses
+    createApiResponse_apiEndpoint,
+    createApiResponse_apiGatewayManaged,
+    createApiResponse_apiId,
+    createApiResponse_apiKeySelectionExpression,
+    createApiResponse_corsConfiguration,
+    createApiResponse_createdDate,
+    createApiResponse_description,
+    createApiResponse_disableExecuteApiEndpoint,
+    createApiResponse_disableSchemaValidation,
+    createApiResponse_importInfo,
+    createApiResponse_name,
+    createApiResponse_protocolType,
+    createApiResponse_routeSelectionExpression,
+    createApiResponse_tags,
+    createApiResponse_version,
+    createApiResponse_warnings,
+    createApiResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Api resource to represent an API.
+--
+-- /See:/ 'newCreateApi' smart constructor.
+data CreateApi = CreateApi'
+  { -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html Configuring CORS>
+    -- for more information.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | This property is part of quick create. It specifies the credentials
+    -- required for the integration, if any. For a Lambda integration, three
+    -- options are available. To specify an IAM Role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To require that the
+    -- caller\'s identity be passed through from the request, specify
+    -- arn:aws:iam::*:user\/*. To use resource-based permissions on supported
+    -- AWS services, specify null. Currently, this property is not used for
+    -- HTTP integrations. Supported only for HTTP APIs.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | This property is part of quick create. If you don\'t specify a routeKey,
+    -- a default route of $default is created. The $default route acts as a
+    -- catch-all for any request made to your API, for a particular stage. The
+    -- \$default route key can\'t be modified. You can add routes after creating
+    -- the API, and you can update the route keys of additional routes.
+    -- Supported only for HTTP APIs.
+    routeKey :: Prelude.Maybe Prelude.Text,
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The collection of tags. Each tag element is associated with a given
+    -- resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | This property is part of quick create. Quick create produces an API with
+    -- an integration, a default catch-all route, and a default stage which is
+    -- configured to automatically deploy changes. For HTTP integrations,
+    -- specify a fully qualified URL. For Lambda integrations, specify a
+    -- function ARN. The type of the integration will be HTTP_PROXY or
+    -- AWS_PROXY, respectively. Supported only for HTTP APIs.
+    target :: Prelude.Maybe Prelude.Text,
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The API protocol.
+    protocolType :: ProtocolType,
+    -- | The name of the API.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApi' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiKeySelectionExpression', 'createApi_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'createApi_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html Configuring CORS>
+-- for more information.
+--
+-- 'credentialsArn', 'createApi_credentialsArn' - This property is part of quick create. It specifies the credentials
+-- required for the integration, if any. For a Lambda integration, three
+-- options are available. To specify an IAM Role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To require that the
+-- caller\'s identity be passed through from the request, specify
+-- arn:aws:iam::*:user\/*. To use resource-based permissions on supported
+-- AWS services, specify null. Currently, this property is not used for
+-- HTTP integrations. Supported only for HTTP APIs.
+--
+-- 'description', 'createApi_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'createApi_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'createApi_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'routeKey', 'createApi_routeKey' - This property is part of quick create. If you don\'t specify a routeKey,
+-- a default route of $default is created. The $default route acts as a
+-- catch-all for any request made to your API, for a particular stage. The
+-- \$default route key can\'t be modified. You can add routes after creating
+-- the API, and you can update the route keys of additional routes.
+-- Supported only for HTTP APIs.
+--
+-- 'routeSelectionExpression', 'createApi_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'tags', 'createApi_tags' - The collection of tags. Each tag element is associated with a given
+-- resource.
+--
+-- 'target', 'createApi_target' - This property is part of quick create. Quick create produces an API with
+-- an integration, a default catch-all route, and a default stage which is
+-- configured to automatically deploy changes. For HTTP integrations,
+-- specify a fully qualified URL. For Lambda integrations, specify a
+-- function ARN. The type of the integration will be HTTP_PROXY or
+-- AWS_PROXY, respectively. Supported only for HTTP APIs.
+--
+-- 'version', 'createApi_version' - A version identifier for the API.
+--
+-- 'protocolType', 'createApi_protocolType' - The API protocol.
+--
+-- 'name', 'createApi_name' - The name of the API.
+newCreateApi ::
+  -- | 'protocolType'
+  ProtocolType ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateApi
+newCreateApi pProtocolType_ pName_ =
+  CreateApi'
+    { apiKeySelectionExpression =
+        Prelude.Nothing,
+      corsConfiguration = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disableExecuteApiEndpoint = Prelude.Nothing,
+      disableSchemaValidation = Prelude.Nothing,
+      routeKey = Prelude.Nothing,
+      routeSelectionExpression = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      target = Prelude.Nothing,
+      version = Prelude.Nothing,
+      protocolType = pProtocolType_,
+      name = pName_
+    }
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+createApi_apiKeySelectionExpression :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Text)
+createApi_apiKeySelectionExpression = Lens.lens (\CreateApi' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@CreateApi' {} a -> s {apiKeySelectionExpression = a} :: CreateApi)
+
+-- | A CORS configuration. Supported only for HTTP APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html Configuring CORS>
+-- for more information.
+createApi_corsConfiguration :: Lens.Lens' CreateApi (Prelude.Maybe Cors)
+createApi_corsConfiguration = Lens.lens (\CreateApi' {corsConfiguration} -> corsConfiguration) (\s@CreateApi' {} a -> s {corsConfiguration = a} :: CreateApi)
+
+-- | This property is part of quick create. It specifies the credentials
+-- required for the integration, if any. For a Lambda integration, three
+-- options are available. To specify an IAM Role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To require that the
+-- caller\'s identity be passed through from the request, specify
+-- arn:aws:iam::*:user\/*. To use resource-based permissions on supported
+-- AWS services, specify null. Currently, this property is not used for
+-- HTTP integrations. Supported only for HTTP APIs.
+createApi_credentialsArn :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Text)
+createApi_credentialsArn = Lens.lens (\CreateApi' {credentialsArn} -> credentialsArn) (\s@CreateApi' {} a -> s {credentialsArn = a} :: CreateApi)
+
+-- | The description of the API.
+createApi_description :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Text)
+createApi_description = Lens.lens (\CreateApi' {description} -> description) (\s@CreateApi' {} a -> s {description = a} :: CreateApi)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+createApi_disableExecuteApiEndpoint :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Bool)
+createApi_disableExecuteApiEndpoint = Lens.lens (\CreateApi' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@CreateApi' {} a -> s {disableExecuteApiEndpoint = a} :: CreateApi)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+createApi_disableSchemaValidation :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Bool)
+createApi_disableSchemaValidation = Lens.lens (\CreateApi' {disableSchemaValidation} -> disableSchemaValidation) (\s@CreateApi' {} a -> s {disableSchemaValidation = a} :: CreateApi)
+
+-- | This property is part of quick create. If you don\'t specify a routeKey,
+-- a default route of $default is created. The $default route acts as a
+-- catch-all for any request made to your API, for a particular stage. The
+-- \$default route key can\'t be modified. You can add routes after creating
+-- the API, and you can update the route keys of additional routes.
+-- Supported only for HTTP APIs.
+createApi_routeKey :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Text)
+createApi_routeKey = Lens.lens (\CreateApi' {routeKey} -> routeKey) (\s@CreateApi' {} a -> s {routeKey = a} :: CreateApi)
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+createApi_routeSelectionExpression :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Text)
+createApi_routeSelectionExpression = Lens.lens (\CreateApi' {routeSelectionExpression} -> routeSelectionExpression) (\s@CreateApi' {} a -> s {routeSelectionExpression = a} :: CreateApi)
+
+-- | The collection of tags. Each tag element is associated with a given
+-- resource.
+createApi_tags :: Lens.Lens' CreateApi (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApi_tags = Lens.lens (\CreateApi' {tags} -> tags) (\s@CreateApi' {} a -> s {tags = a} :: CreateApi) Prelude.. Lens.mapping Lens.coerced
+
+-- | This property is part of quick create. Quick create produces an API with
+-- an integration, a default catch-all route, and a default stage which is
+-- configured to automatically deploy changes. For HTTP integrations,
+-- specify a fully qualified URL. For Lambda integrations, specify a
+-- function ARN. The type of the integration will be HTTP_PROXY or
+-- AWS_PROXY, respectively. Supported only for HTTP APIs.
+createApi_target :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Text)
+createApi_target = Lens.lens (\CreateApi' {target} -> target) (\s@CreateApi' {} a -> s {target = a} :: CreateApi)
+
+-- | A version identifier for the API.
+createApi_version :: Lens.Lens' CreateApi (Prelude.Maybe Prelude.Text)
+createApi_version = Lens.lens (\CreateApi' {version} -> version) (\s@CreateApi' {} a -> s {version = a} :: CreateApi)
+
+-- | The API protocol.
+createApi_protocolType :: Lens.Lens' CreateApi ProtocolType
+createApi_protocolType = Lens.lens (\CreateApi' {protocolType} -> protocolType) (\s@CreateApi' {} a -> s {protocolType = a} :: CreateApi)
+
+-- | The name of the API.
+createApi_name :: Lens.Lens' CreateApi Prelude.Text
+createApi_name = Lens.lens (\CreateApi' {name} -> name) (\s@CreateApi' {} a -> s {name = a} :: CreateApi)
+
+instance Core.AWSRequest CreateApi where
+  type AWSResponse CreateApi = CreateApiResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateApiResponse'
+            Prelude.<$> (x Data..?> "apiEndpoint")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiKeySelectionExpression")
+            Prelude.<*> (x Data..?> "corsConfiguration")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "disableExecuteApiEndpoint")
+            Prelude.<*> (x Data..?> "disableSchemaValidation")
+            Prelude.<*> (x Data..?> "importInfo" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "protocolType")
+            Prelude.<*> (x Data..?> "routeSelectionExpression")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "warnings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateApi where
+  hashWithSalt _salt CreateApi' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiKeySelectionExpression
+      `Prelude.hashWithSalt` corsConfiguration
+      `Prelude.hashWithSalt` credentialsArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` disableExecuteApiEndpoint
+      `Prelude.hashWithSalt` disableSchemaValidation
+      `Prelude.hashWithSalt` routeKey
+      `Prelude.hashWithSalt` routeSelectionExpression
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` target
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` protocolType
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateApi where
+  rnf CreateApi' {..} =
+    Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf routeKey
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateApi where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApi where
+  toJSON CreateApi' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("apiKeySelectionExpression" Data..=)
+              Prelude.<$> apiKeySelectionExpression,
+            ("corsConfiguration" Data..=)
+              Prelude.<$> corsConfiguration,
+            ("credentialsArn" Data..=)
+              Prelude.<$> credentialsArn,
+            ("description" Data..=) Prelude.<$> description,
+            ("disableExecuteApiEndpoint" Data..=)
+              Prelude.<$> disableExecuteApiEndpoint,
+            ("disableSchemaValidation" Data..=)
+              Prelude.<$> disableSchemaValidation,
+            ("routeKey" Data..=) Prelude.<$> routeKey,
+            ("routeSelectionExpression" Data..=)
+              Prelude.<$> routeSelectionExpression,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("target" Data..=) Prelude.<$> target,
+            ("version" Data..=) Prelude.<$> version,
+            Prelude.Just ("protocolType" Data..= protocolType),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateApi where
+  toPath = Prelude.const "/v2/apis"
+
+instance Data.ToQuery CreateApi where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateApiResponse' smart constructor.
+data CreateApiResponse = CreateApiResponse'
+  { -- | The URI of the API, of the form
+    -- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+    -- appended to this URI to form a complete path to a deployed API stage.
+    apiEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether an API is managed by API Gateway. You can\'t update or
+    -- delete a managed API by using API Gateway. A managed API can be deleted
+    -- only through the tooling or service that created it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The API ID.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | The timestamp when the API was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | The validation information during API import. This may include
+    -- particular properties of your OpenAPI definition which are ignored
+    -- during import. Supported only for HTTP APIs.
+    importInfo :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the API.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The API protocol.
+    protocolType :: Prelude.Maybe ProtocolType,
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A collection of tags associated with the API.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The warning messages reported when failonwarnings is turned on during
+    -- API import.
+    warnings :: 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 'CreateApiResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiEndpoint', 'createApiResponse_apiEndpoint' - The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+--
+-- 'apiGatewayManaged', 'createApiResponse_apiGatewayManaged' - Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+--
+-- 'apiId', 'createApiResponse_apiId' - The API ID.
+--
+-- 'apiKeySelectionExpression', 'createApiResponse_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'createApiResponse_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs.
+--
+-- 'createdDate', 'createApiResponse_createdDate' - The timestamp when the API was created.
+--
+-- 'description', 'createApiResponse_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'createApiResponse_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'createApiResponse_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'importInfo', 'createApiResponse_importInfo' - The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+--
+-- 'name', 'createApiResponse_name' - The name of the API.
+--
+-- 'protocolType', 'createApiResponse_protocolType' - The API protocol.
+--
+-- 'routeSelectionExpression', 'createApiResponse_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'tags', 'createApiResponse_tags' - A collection of tags associated with the API.
+--
+-- 'version', 'createApiResponse_version' - A version identifier for the API.
+--
+-- 'warnings', 'createApiResponse_warnings' - The warning messages reported when failonwarnings is turned on during
+-- API import.
+--
+-- 'httpStatus', 'createApiResponse_httpStatus' - The response's http status code.
+newCreateApiResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateApiResponse
+newCreateApiResponse pHttpStatus_ =
+  CreateApiResponse'
+    { apiEndpoint = Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      apiId = Prelude.Nothing,
+      apiKeySelectionExpression = Prelude.Nothing,
+      corsConfiguration = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disableExecuteApiEndpoint = Prelude.Nothing,
+      disableSchemaValidation = Prelude.Nothing,
+      importInfo = Prelude.Nothing,
+      name = Prelude.Nothing,
+      protocolType = Prelude.Nothing,
+      routeSelectionExpression = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      warnings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+createApiResponse_apiEndpoint :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Text)
+createApiResponse_apiEndpoint = Lens.lens (\CreateApiResponse' {apiEndpoint} -> apiEndpoint) (\s@CreateApiResponse' {} a -> s {apiEndpoint = a} :: CreateApiResponse)
+
+-- | Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+createApiResponse_apiGatewayManaged :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Bool)
+createApiResponse_apiGatewayManaged = Lens.lens (\CreateApiResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@CreateApiResponse' {} a -> s {apiGatewayManaged = a} :: CreateApiResponse)
+
+-- | The API ID.
+createApiResponse_apiId :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Text)
+createApiResponse_apiId = Lens.lens (\CreateApiResponse' {apiId} -> apiId) (\s@CreateApiResponse' {} a -> s {apiId = a} :: CreateApiResponse)
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+createApiResponse_apiKeySelectionExpression :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Text)
+createApiResponse_apiKeySelectionExpression = Lens.lens (\CreateApiResponse' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@CreateApiResponse' {} a -> s {apiKeySelectionExpression = a} :: CreateApiResponse)
+
+-- | A CORS configuration. Supported only for HTTP APIs.
+createApiResponse_corsConfiguration :: Lens.Lens' CreateApiResponse (Prelude.Maybe Cors)
+createApiResponse_corsConfiguration = Lens.lens (\CreateApiResponse' {corsConfiguration} -> corsConfiguration) (\s@CreateApiResponse' {} a -> s {corsConfiguration = a} :: CreateApiResponse)
+
+-- | The timestamp when the API was created.
+createApiResponse_createdDate :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.UTCTime)
+createApiResponse_createdDate = Lens.lens (\CreateApiResponse' {createdDate} -> createdDate) (\s@CreateApiResponse' {} a -> s {createdDate = a} :: CreateApiResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the API.
+createApiResponse_description :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Text)
+createApiResponse_description = Lens.lens (\CreateApiResponse' {description} -> description) (\s@CreateApiResponse' {} a -> s {description = a} :: CreateApiResponse)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+createApiResponse_disableExecuteApiEndpoint :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Bool)
+createApiResponse_disableExecuteApiEndpoint = Lens.lens (\CreateApiResponse' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@CreateApiResponse' {} a -> s {disableExecuteApiEndpoint = a} :: CreateApiResponse)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+createApiResponse_disableSchemaValidation :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Bool)
+createApiResponse_disableSchemaValidation = Lens.lens (\CreateApiResponse' {disableSchemaValidation} -> disableSchemaValidation) (\s@CreateApiResponse' {} a -> s {disableSchemaValidation = a} :: CreateApiResponse)
+
+-- | The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+createApiResponse_importInfo :: Lens.Lens' CreateApiResponse (Prelude.Maybe [Prelude.Text])
+createApiResponse_importInfo = Lens.lens (\CreateApiResponse' {importInfo} -> importInfo) (\s@CreateApiResponse' {} a -> s {importInfo = a} :: CreateApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the API.
+createApiResponse_name :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Text)
+createApiResponse_name = Lens.lens (\CreateApiResponse' {name} -> name) (\s@CreateApiResponse' {} a -> s {name = a} :: CreateApiResponse)
+
+-- | The API protocol.
+createApiResponse_protocolType :: Lens.Lens' CreateApiResponse (Prelude.Maybe ProtocolType)
+createApiResponse_protocolType = Lens.lens (\CreateApiResponse' {protocolType} -> protocolType) (\s@CreateApiResponse' {} a -> s {protocolType = a} :: CreateApiResponse)
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+createApiResponse_routeSelectionExpression :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Text)
+createApiResponse_routeSelectionExpression = Lens.lens (\CreateApiResponse' {routeSelectionExpression} -> routeSelectionExpression) (\s@CreateApiResponse' {} a -> s {routeSelectionExpression = a} :: CreateApiResponse)
+
+-- | A collection of tags associated with the API.
+createApiResponse_tags :: Lens.Lens' CreateApiResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApiResponse_tags = Lens.lens (\CreateApiResponse' {tags} -> tags) (\s@CreateApiResponse' {} a -> s {tags = a} :: CreateApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A version identifier for the API.
+createApiResponse_version :: Lens.Lens' CreateApiResponse (Prelude.Maybe Prelude.Text)
+createApiResponse_version = Lens.lens (\CreateApiResponse' {version} -> version) (\s@CreateApiResponse' {} a -> s {version = a} :: CreateApiResponse)
+
+-- | The warning messages reported when failonwarnings is turned on during
+-- API import.
+createApiResponse_warnings :: Lens.Lens' CreateApiResponse (Prelude.Maybe [Prelude.Text])
+createApiResponse_warnings = Lens.lens (\CreateApiResponse' {warnings} -> warnings) (\s@CreateApiResponse' {} a -> s {warnings = a} :: CreateApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createApiResponse_httpStatus :: Lens.Lens' CreateApiResponse Prelude.Int
+createApiResponse_httpStatus = Lens.lens (\CreateApiResponse' {httpStatus} -> httpStatus) (\s@CreateApiResponse' {} a -> s {httpStatus = a} :: CreateApiResponse)
+
+instance Prelude.NFData CreateApiResponse where
+  rnf CreateApiResponse' {..} =
+    Prelude.rnf apiEndpoint
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf importInfo
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf warnings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateApiMapping.hs b/gen/Amazonka/ApiGatewayV2/CreateApiMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateApiMapping.hs
@@ -0,0 +1,253 @@
+{-# 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.ApiGatewayV2.CreateApiMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an API mapping.
+module Amazonka.ApiGatewayV2.CreateApiMapping
+  ( -- * Creating a Request
+    CreateApiMapping (..),
+    newCreateApiMapping,
+
+    -- * Request Lenses
+    createApiMapping_apiMappingKey,
+    createApiMapping_domainName,
+    createApiMapping_stage,
+    createApiMapping_apiId,
+
+    -- * Destructuring the Response
+    CreateApiMappingResponse (..),
+    newCreateApiMappingResponse,
+
+    -- * Response Lenses
+    createApiMappingResponse_apiId,
+    createApiMappingResponse_apiMappingId,
+    createApiMappingResponse_apiMappingKey,
+    createApiMappingResponse_stage,
+    createApiMappingResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new ApiMapping resource to represent an API mapping.
+--
+-- /See:/ 'newCreateApiMapping' smart constructor.
+data CreateApiMapping = CreateApiMapping'
+  { -- | The API mapping key.
+    apiMappingKey :: Prelude.Maybe Prelude.Text,
+    -- | The domain name.
+    domainName :: Prelude.Text,
+    -- | The API stage.
+    stage :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApiMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingKey', 'createApiMapping_apiMappingKey' - The API mapping key.
+--
+-- 'domainName', 'createApiMapping_domainName' - The domain name.
+--
+-- 'stage', 'createApiMapping_stage' - The API stage.
+--
+-- 'apiId', 'createApiMapping_apiId' - The API identifier.
+newCreateApiMapping ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'stage'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  CreateApiMapping
+newCreateApiMapping pDomainName_ pStage_ pApiId_ =
+  CreateApiMapping'
+    { apiMappingKey = Prelude.Nothing,
+      domainName = pDomainName_,
+      stage = pStage_,
+      apiId = pApiId_
+    }
+
+-- | The API mapping key.
+createApiMapping_apiMappingKey :: Lens.Lens' CreateApiMapping (Prelude.Maybe Prelude.Text)
+createApiMapping_apiMappingKey = Lens.lens (\CreateApiMapping' {apiMappingKey} -> apiMappingKey) (\s@CreateApiMapping' {} a -> s {apiMappingKey = a} :: CreateApiMapping)
+
+-- | The domain name.
+createApiMapping_domainName :: Lens.Lens' CreateApiMapping Prelude.Text
+createApiMapping_domainName = Lens.lens (\CreateApiMapping' {domainName} -> domainName) (\s@CreateApiMapping' {} a -> s {domainName = a} :: CreateApiMapping)
+
+-- | The API stage.
+createApiMapping_stage :: Lens.Lens' CreateApiMapping Prelude.Text
+createApiMapping_stage = Lens.lens (\CreateApiMapping' {stage} -> stage) (\s@CreateApiMapping' {} a -> s {stage = a} :: CreateApiMapping)
+
+-- | The API identifier.
+createApiMapping_apiId :: Lens.Lens' CreateApiMapping Prelude.Text
+createApiMapping_apiId = Lens.lens (\CreateApiMapping' {apiId} -> apiId) (\s@CreateApiMapping' {} a -> s {apiId = a} :: CreateApiMapping)
+
+instance Core.AWSRequest CreateApiMapping where
+  type
+    AWSResponse CreateApiMapping =
+      CreateApiMappingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateApiMappingResponse'
+            Prelude.<$> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiMappingId")
+            Prelude.<*> (x Data..?> "apiMappingKey")
+            Prelude.<*> (x Data..?> "stage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateApiMapping where
+  hashWithSalt _salt CreateApiMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiMappingKey
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` stage
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData CreateApiMapping where
+  rnf CreateApiMapping' {..} =
+    Prelude.rnf apiMappingKey
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders CreateApiMapping where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApiMapping where
+  toJSON CreateApiMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("apiMappingKey" Data..=) Prelude.<$> apiMappingKey,
+            Prelude.Just ("stage" Data..= stage),
+            Prelude.Just ("apiId" Data..= apiId)
+          ]
+      )
+
+instance Data.ToPath CreateApiMapping where
+  toPath CreateApiMapping' {..} =
+    Prelude.mconcat
+      [ "/v2/domainnames/",
+        Data.toBS domainName,
+        "/apimappings"
+      ]
+
+instance Data.ToQuery CreateApiMapping where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateApiMappingResponse' smart constructor.
+data CreateApiMappingResponse = CreateApiMappingResponse'
+  { -- | The API identifier.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping identifier.
+    apiMappingId :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping key.
+    apiMappingKey :: Prelude.Maybe Prelude.Text,
+    -- | The API stage.
+    stage :: 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 'CreateApiMappingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'createApiMappingResponse_apiId' - The API identifier.
+--
+-- 'apiMappingId', 'createApiMappingResponse_apiMappingId' - The API mapping identifier.
+--
+-- 'apiMappingKey', 'createApiMappingResponse_apiMappingKey' - The API mapping key.
+--
+-- 'stage', 'createApiMappingResponse_stage' - The API stage.
+--
+-- 'httpStatus', 'createApiMappingResponse_httpStatus' - The response's http status code.
+newCreateApiMappingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateApiMappingResponse
+newCreateApiMappingResponse pHttpStatus_ =
+  CreateApiMappingResponse'
+    { apiId = Prelude.Nothing,
+      apiMappingId = Prelude.Nothing,
+      apiMappingKey = Prelude.Nothing,
+      stage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The API identifier.
+createApiMappingResponse_apiId :: Lens.Lens' CreateApiMappingResponse (Prelude.Maybe Prelude.Text)
+createApiMappingResponse_apiId = Lens.lens (\CreateApiMappingResponse' {apiId} -> apiId) (\s@CreateApiMappingResponse' {} a -> s {apiId = a} :: CreateApiMappingResponse)
+
+-- | The API mapping identifier.
+createApiMappingResponse_apiMappingId :: Lens.Lens' CreateApiMappingResponse (Prelude.Maybe Prelude.Text)
+createApiMappingResponse_apiMappingId = Lens.lens (\CreateApiMappingResponse' {apiMappingId} -> apiMappingId) (\s@CreateApiMappingResponse' {} a -> s {apiMappingId = a} :: CreateApiMappingResponse)
+
+-- | The API mapping key.
+createApiMappingResponse_apiMappingKey :: Lens.Lens' CreateApiMappingResponse (Prelude.Maybe Prelude.Text)
+createApiMappingResponse_apiMappingKey = Lens.lens (\CreateApiMappingResponse' {apiMappingKey} -> apiMappingKey) (\s@CreateApiMappingResponse' {} a -> s {apiMappingKey = a} :: CreateApiMappingResponse)
+
+-- | The API stage.
+createApiMappingResponse_stage :: Lens.Lens' CreateApiMappingResponse (Prelude.Maybe Prelude.Text)
+createApiMappingResponse_stage = Lens.lens (\CreateApiMappingResponse' {stage} -> stage) (\s@CreateApiMappingResponse' {} a -> s {stage = a} :: CreateApiMappingResponse)
+
+-- | The response's http status code.
+createApiMappingResponse_httpStatus :: Lens.Lens' CreateApiMappingResponse Prelude.Int
+createApiMappingResponse_httpStatus = Lens.lens (\CreateApiMappingResponse' {httpStatus} -> httpStatus) (\s@CreateApiMappingResponse' {} a -> s {httpStatus = a} :: CreateApiMappingResponse)
+
+instance Prelude.NFData CreateApiMappingResponse where
+  rnf CreateApiMappingResponse' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiMappingId
+      `Prelude.seq` Prelude.rnf apiMappingKey
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateAuthorizer.hs b/gen/Amazonka/ApiGatewayV2/CreateAuthorizer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateAuthorizer.hs
@@ -0,0 +1,729 @@
+{-# 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.ApiGatewayV2.CreateAuthorizer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Authorizer for an API.
+module Amazonka.ApiGatewayV2.CreateAuthorizer
+  ( -- * Creating a Request
+    CreateAuthorizer (..),
+    newCreateAuthorizer,
+
+    -- * Request Lenses
+    createAuthorizer_authorizerCredentialsArn,
+    createAuthorizer_authorizerPayloadFormatVersion,
+    createAuthorizer_authorizerResultTtlInSeconds,
+    createAuthorizer_authorizerUri,
+    createAuthorizer_enableSimpleResponses,
+    createAuthorizer_identityValidationExpression,
+    createAuthorizer_jwtConfiguration,
+    createAuthorizer_apiId,
+    createAuthorizer_authorizerType,
+    createAuthorizer_identitySource,
+    createAuthorizer_name,
+
+    -- * Destructuring the Response
+    CreateAuthorizerResponse (..),
+    newCreateAuthorizerResponse,
+
+    -- * Response Lenses
+    createAuthorizerResponse_authorizerCredentialsArn,
+    createAuthorizerResponse_authorizerId,
+    createAuthorizerResponse_authorizerPayloadFormatVersion,
+    createAuthorizerResponse_authorizerResultTtlInSeconds,
+    createAuthorizerResponse_authorizerType,
+    createAuthorizerResponse_authorizerUri,
+    createAuthorizerResponse_enableSimpleResponses,
+    createAuthorizerResponse_identitySource,
+    createAuthorizerResponse_identityValidationExpression,
+    createAuthorizerResponse_jwtConfiguration,
+    createAuthorizerResponse_name,
+    createAuthorizerResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Authorizer resource to represent an authorizer.
+--
+-- /See:/ 'newCreateAuthorizer' smart constructor.
+data CreateAuthorizer = CreateAuthorizer'
+  { -- | Specifies the required credentials as an IAM role for API Gateway to
+    -- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To use resource-based
+    -- permissions on the Lambda function, don\'t specify this parameter.
+    -- Supported only for REQUEST authorizers.
+    authorizerCredentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format of the payload sent to an HTTP API Lambda
+    -- authorizer. Required for HTTP API Lambda authorizers. Supported values
+    -- are 1.0 and 2.0. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    authorizerPayloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time to live (TTL) for cached authorizer results, in seconds. If it
+    -- equals 0, authorization caching is disabled. If it is greater than 0,
+    -- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+    -- hour. Supported only for HTTP API Lambda authorizers.
+    authorizerResultTtlInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+    -- authorizers, this must be a well-formed Lambda function URI, for
+    -- example,
+    -- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+    -- In general, the URI has this form:
+    -- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+    -- is the same as the region hosting the Lambda function, path indicates
+    -- that the remaining substring in the URI should be treated as the path to
+    -- the resource, including the initial \/. For Lambda functions, this is
+    -- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+    -- Supported only for REQUEST authorizers.
+    authorizerUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether a Lambda authorizer returns a response in a simple
+    -- format. By default, a Lambda authorizer must return an IAM policy. If
+    -- enabled, the Lambda authorizer can return a boolean value instead of an
+    -- IAM policy. Supported only for HTTP APIs. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+    enableSimpleResponses :: Prelude.Maybe Prelude.Bool,
+    -- | This parameter is not used.
+    identityValidationExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the configuration of a JWT authorizer. Required for the JWT
+    -- authorizer type. Supported only for HTTP APIs.
+    jwtConfiguration :: Prelude.Maybe JWTConfiguration,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The authorizer type. Specify REQUEST for a Lambda function using
+    -- incoming request parameters. Specify JWT to use JSON Web Tokens
+    -- (supported only for HTTP APIs).
+    authorizerType :: AuthorizerType,
+    -- | The identity source for which authorization is requested.
+    --
+    -- For a REQUEST authorizer, this is optional. The value is a set of one or
+    -- more mapping expressions of the specified request parameters. The
+    -- identity source can be headers, query string parameters, stage
+    -- variables, and context parameters. For example, if an Auth header and a
+    -- Name query string parameter are defined as identity sources, this value
+    -- is route.request.header.Auth, route.request.querystring.Name for
+    -- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+    -- \$, for example, $request.header.Auth, $request.querystring.Name. These
+    -- parameters are used to perform runtime validation for Lambda-based
+    -- authorizers by verifying all of the identity-related request parameters
+    -- are present in the request, not null, and non-empty. Only when this is
+    -- true does the authorizer invoke the authorizer Lambda function.
+    -- Otherwise, it returns a 401 Unauthorized response without calling the
+    -- Lambda function. For HTTP APIs, identity sources are also used as the
+    -- cache key when caching is enabled. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    --
+    -- For JWT, a single entry that specifies where to extract the JSON Web
+    -- Token (JWT) from inbound requests. Currently only header-based and query
+    -- parameter-based selections are supported, for example
+    -- \$request.header.Authorization.
+    identitySource :: [Prelude.Text],
+    -- | The name of the authorizer.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAuthorizer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerCredentialsArn', 'createAuthorizer_authorizerCredentialsArn' - Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+--
+-- 'authorizerPayloadFormatVersion', 'createAuthorizer_authorizerPayloadFormatVersion' - Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- 'authorizerResultTtlInSeconds', 'createAuthorizer_authorizerResultTtlInSeconds' - The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+--
+-- 'authorizerUri', 'createAuthorizer_authorizerUri' - The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+--
+-- 'enableSimpleResponses', 'createAuthorizer_enableSimpleResponses' - Specifies whether a Lambda authorizer returns a response in a simple
+-- format. By default, a Lambda authorizer must return an IAM policy. If
+-- enabled, the Lambda authorizer can return a boolean value instead of an
+-- IAM policy. Supported only for HTTP APIs. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+--
+-- 'identityValidationExpression', 'createAuthorizer_identityValidationExpression' - This parameter is not used.
+--
+-- 'jwtConfiguration', 'createAuthorizer_jwtConfiguration' - Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+--
+-- 'apiId', 'createAuthorizer_apiId' - The API identifier.
+--
+-- 'authorizerType', 'createAuthorizer_authorizerType' - The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+--
+-- 'identitySource', 'createAuthorizer_identitySource' - The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+--
+-- 'name', 'createAuthorizer_name' - The name of the authorizer.
+newCreateAuthorizer ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'authorizerType'
+  AuthorizerType ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateAuthorizer
+newCreateAuthorizer pApiId_ pAuthorizerType_ pName_ =
+  CreateAuthorizer'
+    { authorizerCredentialsArn =
+        Prelude.Nothing,
+      authorizerPayloadFormatVersion = Prelude.Nothing,
+      authorizerResultTtlInSeconds = Prelude.Nothing,
+      authorizerUri = Prelude.Nothing,
+      enableSimpleResponses = Prelude.Nothing,
+      identityValidationExpression = Prelude.Nothing,
+      jwtConfiguration = Prelude.Nothing,
+      apiId = pApiId_,
+      authorizerType = pAuthorizerType_,
+      identitySource = Prelude.mempty,
+      name = pName_
+    }
+
+-- | Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+createAuthorizer_authorizerCredentialsArn :: Lens.Lens' CreateAuthorizer (Prelude.Maybe Prelude.Text)
+createAuthorizer_authorizerCredentialsArn = Lens.lens (\CreateAuthorizer' {authorizerCredentialsArn} -> authorizerCredentialsArn) (\s@CreateAuthorizer' {} a -> s {authorizerCredentialsArn = a} :: CreateAuthorizer)
+
+-- | Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+createAuthorizer_authorizerPayloadFormatVersion :: Lens.Lens' CreateAuthorizer (Prelude.Maybe Prelude.Text)
+createAuthorizer_authorizerPayloadFormatVersion = Lens.lens (\CreateAuthorizer' {authorizerPayloadFormatVersion} -> authorizerPayloadFormatVersion) (\s@CreateAuthorizer' {} a -> s {authorizerPayloadFormatVersion = a} :: CreateAuthorizer)
+
+-- | The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+createAuthorizer_authorizerResultTtlInSeconds :: Lens.Lens' CreateAuthorizer (Prelude.Maybe Prelude.Natural)
+createAuthorizer_authorizerResultTtlInSeconds = Lens.lens (\CreateAuthorizer' {authorizerResultTtlInSeconds} -> authorizerResultTtlInSeconds) (\s@CreateAuthorizer' {} a -> s {authorizerResultTtlInSeconds = a} :: CreateAuthorizer)
+
+-- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+createAuthorizer_authorizerUri :: Lens.Lens' CreateAuthorizer (Prelude.Maybe Prelude.Text)
+createAuthorizer_authorizerUri = Lens.lens (\CreateAuthorizer' {authorizerUri} -> authorizerUri) (\s@CreateAuthorizer' {} a -> s {authorizerUri = a} :: CreateAuthorizer)
+
+-- | Specifies whether a Lambda authorizer returns a response in a simple
+-- format. By default, a Lambda authorizer must return an IAM policy. If
+-- enabled, the Lambda authorizer can return a boolean value instead of an
+-- IAM policy. Supported only for HTTP APIs. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+createAuthorizer_enableSimpleResponses :: Lens.Lens' CreateAuthorizer (Prelude.Maybe Prelude.Bool)
+createAuthorizer_enableSimpleResponses = Lens.lens (\CreateAuthorizer' {enableSimpleResponses} -> enableSimpleResponses) (\s@CreateAuthorizer' {} a -> s {enableSimpleResponses = a} :: CreateAuthorizer)
+
+-- | This parameter is not used.
+createAuthorizer_identityValidationExpression :: Lens.Lens' CreateAuthorizer (Prelude.Maybe Prelude.Text)
+createAuthorizer_identityValidationExpression = Lens.lens (\CreateAuthorizer' {identityValidationExpression} -> identityValidationExpression) (\s@CreateAuthorizer' {} a -> s {identityValidationExpression = a} :: CreateAuthorizer)
+
+-- | Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+createAuthorizer_jwtConfiguration :: Lens.Lens' CreateAuthorizer (Prelude.Maybe JWTConfiguration)
+createAuthorizer_jwtConfiguration = Lens.lens (\CreateAuthorizer' {jwtConfiguration} -> jwtConfiguration) (\s@CreateAuthorizer' {} a -> s {jwtConfiguration = a} :: CreateAuthorizer)
+
+-- | The API identifier.
+createAuthorizer_apiId :: Lens.Lens' CreateAuthorizer Prelude.Text
+createAuthorizer_apiId = Lens.lens (\CreateAuthorizer' {apiId} -> apiId) (\s@CreateAuthorizer' {} a -> s {apiId = a} :: CreateAuthorizer)
+
+-- | The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+createAuthorizer_authorizerType :: Lens.Lens' CreateAuthorizer AuthorizerType
+createAuthorizer_authorizerType = Lens.lens (\CreateAuthorizer' {authorizerType} -> authorizerType) (\s@CreateAuthorizer' {} a -> s {authorizerType = a} :: CreateAuthorizer)
+
+-- | The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+createAuthorizer_identitySource :: Lens.Lens' CreateAuthorizer [Prelude.Text]
+createAuthorizer_identitySource = Lens.lens (\CreateAuthorizer' {identitySource} -> identitySource) (\s@CreateAuthorizer' {} a -> s {identitySource = a} :: CreateAuthorizer) Prelude.. Lens.coerced
+
+-- | The name of the authorizer.
+createAuthorizer_name :: Lens.Lens' CreateAuthorizer Prelude.Text
+createAuthorizer_name = Lens.lens (\CreateAuthorizer' {name} -> name) (\s@CreateAuthorizer' {} a -> s {name = a} :: CreateAuthorizer)
+
+instance Core.AWSRequest CreateAuthorizer where
+  type
+    AWSResponse CreateAuthorizer =
+      CreateAuthorizerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAuthorizerResponse'
+            Prelude.<$> (x Data..?> "authorizerCredentialsArn")
+            Prelude.<*> (x Data..?> "authorizerId")
+            Prelude.<*> (x Data..?> "authorizerPayloadFormatVersion")
+            Prelude.<*> (x Data..?> "authorizerResultTtlInSeconds")
+            Prelude.<*> (x Data..?> "authorizerType")
+            Prelude.<*> (x Data..?> "authorizerUri")
+            Prelude.<*> (x Data..?> "enableSimpleResponses")
+            Prelude.<*> (x Data..?> "identitySource" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "identityValidationExpression")
+            Prelude.<*> (x Data..?> "jwtConfiguration")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAuthorizer where
+  hashWithSalt _salt CreateAuthorizer' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorizerCredentialsArn
+      `Prelude.hashWithSalt` authorizerPayloadFormatVersion
+      `Prelude.hashWithSalt` authorizerResultTtlInSeconds
+      `Prelude.hashWithSalt` authorizerUri
+      `Prelude.hashWithSalt` enableSimpleResponses
+      `Prelude.hashWithSalt` identityValidationExpression
+      `Prelude.hashWithSalt` jwtConfiguration
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` authorizerType
+      `Prelude.hashWithSalt` identitySource
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateAuthorizer where
+  rnf CreateAuthorizer' {..} =
+    Prelude.rnf authorizerCredentialsArn
+      `Prelude.seq` Prelude.rnf authorizerPayloadFormatVersion
+      `Prelude.seq` Prelude.rnf authorizerResultTtlInSeconds
+      `Prelude.seq` Prelude.rnf authorizerUri
+      `Prelude.seq` Prelude.rnf enableSimpleResponses
+      `Prelude.seq` Prelude.rnf identityValidationExpression
+      `Prelude.seq` Prelude.rnf jwtConfiguration
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf authorizerType
+      `Prelude.seq` Prelude.rnf identitySource
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateAuthorizer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAuthorizer where
+  toJSON CreateAuthorizer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("authorizerCredentialsArn" Data..=)
+              Prelude.<$> authorizerCredentialsArn,
+            ("authorizerPayloadFormatVersion" Data..=)
+              Prelude.<$> authorizerPayloadFormatVersion,
+            ("authorizerResultTtlInSeconds" Data..=)
+              Prelude.<$> authorizerResultTtlInSeconds,
+            ("authorizerUri" Data..=) Prelude.<$> authorizerUri,
+            ("enableSimpleResponses" Data..=)
+              Prelude.<$> enableSimpleResponses,
+            ("identityValidationExpression" Data..=)
+              Prelude.<$> identityValidationExpression,
+            ("jwtConfiguration" Data..=)
+              Prelude.<$> jwtConfiguration,
+            Prelude.Just
+              ("authorizerType" Data..= authorizerType),
+            Prelude.Just
+              ("identitySource" Data..= identitySource),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateAuthorizer where
+  toPath CreateAuthorizer' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/authorizers"]
+
+instance Data.ToQuery CreateAuthorizer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAuthorizerResponse' smart constructor.
+data CreateAuthorizerResponse = CreateAuthorizerResponse'
+  { -- | Specifies the required credentials as an IAM role for API Gateway to
+    -- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To use resource-based
+    -- permissions on the Lambda function, don\'t specify this parameter.
+    -- Supported only for REQUEST authorizers.
+    authorizerCredentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The authorizer identifier.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format of the payload sent to an HTTP API Lambda
+    -- authorizer. Required for HTTP API Lambda authorizers. Supported values
+    -- are 1.0 and 2.0. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    authorizerPayloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time to live (TTL) for cached authorizer results, in seconds. If it
+    -- equals 0, authorization caching is disabled. If it is greater than 0,
+    -- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+    -- hour. Supported only for HTTP API Lambda authorizers.
+    authorizerResultTtlInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The authorizer type. Specify REQUEST for a Lambda function using
+    -- incoming request parameters. Specify JWT to use JSON Web Tokens
+    -- (supported only for HTTP APIs).
+    authorizerType :: Prelude.Maybe AuthorizerType,
+    -- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+    -- authorizers, this must be a well-formed Lambda function URI, for
+    -- example,
+    -- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+    -- In general, the URI has this form:
+    -- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+    -- is the same as the region hosting the Lambda function, path indicates
+    -- that the remaining substring in the URI should be treated as the path to
+    -- the resource, including the initial \/. For Lambda functions, this is
+    -- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+    -- Supported only for REQUEST authorizers.
+    authorizerUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether a Lambda authorizer returns a response in a simple
+    -- format. If enabled, the Lambda authorizer can return a boolean value
+    -- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+    -- see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+    enableSimpleResponses :: Prelude.Maybe Prelude.Bool,
+    -- | The identity source for which authorization is requested.
+    --
+    -- For a REQUEST authorizer, this is optional. The value is a set of one or
+    -- more mapping expressions of the specified request parameters. The
+    -- identity source can be headers, query string parameters, stage
+    -- variables, and context parameters. For example, if an Auth header and a
+    -- Name query string parameter are defined as identity sources, this value
+    -- is route.request.header.Auth, route.request.querystring.Name for
+    -- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+    -- \$, for example, $request.header.Auth, $request.querystring.Name. These
+    -- parameters are used to perform runtime validation for Lambda-based
+    -- authorizers by verifying all of the identity-related request parameters
+    -- are present in the request, not null, and non-empty. Only when this is
+    -- true does the authorizer invoke the authorizer Lambda function.
+    -- Otherwise, it returns a 401 Unauthorized response without calling the
+    -- Lambda function. For HTTP APIs, identity sources are also used as the
+    -- cache key when caching is enabled. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    --
+    -- For JWT, a single entry that specifies where to extract the JSON Web
+    -- Token (JWT) from inbound requests. Currently only header-based and query
+    -- parameter-based selections are supported, for example
+    -- \$request.header.Authorization.
+    identitySource :: Prelude.Maybe [Prelude.Text],
+    -- | The validation expression does not apply to the REQUEST authorizer.
+    identityValidationExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the configuration of a JWT authorizer. Required for the JWT
+    -- authorizer type. Supported only for HTTP APIs.
+    jwtConfiguration :: Prelude.Maybe JWTConfiguration,
+    -- | The name of the authorizer.
+    name :: 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 'CreateAuthorizerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerCredentialsArn', 'createAuthorizerResponse_authorizerCredentialsArn' - Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+--
+-- 'authorizerId', 'createAuthorizerResponse_authorizerId' - The authorizer identifier.
+--
+-- 'authorizerPayloadFormatVersion', 'createAuthorizerResponse_authorizerPayloadFormatVersion' - Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- 'authorizerResultTtlInSeconds', 'createAuthorizerResponse_authorizerResultTtlInSeconds' - The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+--
+-- 'authorizerType', 'createAuthorizerResponse_authorizerType' - The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+--
+-- 'authorizerUri', 'createAuthorizerResponse_authorizerUri' - The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+--
+-- 'enableSimpleResponses', 'createAuthorizerResponse_enableSimpleResponses' - Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+--
+-- 'identitySource', 'createAuthorizerResponse_identitySource' - The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+--
+-- 'identityValidationExpression', 'createAuthorizerResponse_identityValidationExpression' - The validation expression does not apply to the REQUEST authorizer.
+--
+-- 'jwtConfiguration', 'createAuthorizerResponse_jwtConfiguration' - Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+--
+-- 'name', 'createAuthorizerResponse_name' - The name of the authorizer.
+--
+-- 'httpStatus', 'createAuthorizerResponse_httpStatus' - The response's http status code.
+newCreateAuthorizerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAuthorizerResponse
+newCreateAuthorizerResponse pHttpStatus_ =
+  CreateAuthorizerResponse'
+    { authorizerCredentialsArn =
+        Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      authorizerPayloadFormatVersion = Prelude.Nothing,
+      authorizerResultTtlInSeconds = Prelude.Nothing,
+      authorizerType = Prelude.Nothing,
+      authorizerUri = Prelude.Nothing,
+      enableSimpleResponses = Prelude.Nothing,
+      identitySource = Prelude.Nothing,
+      identityValidationExpression = Prelude.Nothing,
+      jwtConfiguration = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+createAuthorizerResponse_authorizerCredentialsArn :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+createAuthorizerResponse_authorizerCredentialsArn = Lens.lens (\CreateAuthorizerResponse' {authorizerCredentialsArn} -> authorizerCredentialsArn) (\s@CreateAuthorizerResponse' {} a -> s {authorizerCredentialsArn = a} :: CreateAuthorizerResponse)
+
+-- | The authorizer identifier.
+createAuthorizerResponse_authorizerId :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+createAuthorizerResponse_authorizerId = Lens.lens (\CreateAuthorizerResponse' {authorizerId} -> authorizerId) (\s@CreateAuthorizerResponse' {} a -> s {authorizerId = a} :: CreateAuthorizerResponse)
+
+-- | Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+createAuthorizerResponse_authorizerPayloadFormatVersion :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+createAuthorizerResponse_authorizerPayloadFormatVersion = Lens.lens (\CreateAuthorizerResponse' {authorizerPayloadFormatVersion} -> authorizerPayloadFormatVersion) (\s@CreateAuthorizerResponse' {} a -> s {authorizerPayloadFormatVersion = a} :: CreateAuthorizerResponse)
+
+-- | The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+createAuthorizerResponse_authorizerResultTtlInSeconds :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Natural)
+createAuthorizerResponse_authorizerResultTtlInSeconds = Lens.lens (\CreateAuthorizerResponse' {authorizerResultTtlInSeconds} -> authorizerResultTtlInSeconds) (\s@CreateAuthorizerResponse' {} a -> s {authorizerResultTtlInSeconds = a} :: CreateAuthorizerResponse)
+
+-- | The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+createAuthorizerResponse_authorizerType :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe AuthorizerType)
+createAuthorizerResponse_authorizerType = Lens.lens (\CreateAuthorizerResponse' {authorizerType} -> authorizerType) (\s@CreateAuthorizerResponse' {} a -> s {authorizerType = a} :: CreateAuthorizerResponse)
+
+-- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+createAuthorizerResponse_authorizerUri :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+createAuthorizerResponse_authorizerUri = Lens.lens (\CreateAuthorizerResponse' {authorizerUri} -> authorizerUri) (\s@CreateAuthorizerResponse' {} a -> s {authorizerUri = a} :: CreateAuthorizerResponse)
+
+-- | Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+createAuthorizerResponse_enableSimpleResponses :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Bool)
+createAuthorizerResponse_enableSimpleResponses = Lens.lens (\CreateAuthorizerResponse' {enableSimpleResponses} -> enableSimpleResponses) (\s@CreateAuthorizerResponse' {} a -> s {enableSimpleResponses = a} :: CreateAuthorizerResponse)
+
+-- | The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+createAuthorizerResponse_identitySource :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe [Prelude.Text])
+createAuthorizerResponse_identitySource = Lens.lens (\CreateAuthorizerResponse' {identitySource} -> identitySource) (\s@CreateAuthorizerResponse' {} a -> s {identitySource = a} :: CreateAuthorizerResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The validation expression does not apply to the REQUEST authorizer.
+createAuthorizerResponse_identityValidationExpression :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+createAuthorizerResponse_identityValidationExpression = Lens.lens (\CreateAuthorizerResponse' {identityValidationExpression} -> identityValidationExpression) (\s@CreateAuthorizerResponse' {} a -> s {identityValidationExpression = a} :: CreateAuthorizerResponse)
+
+-- | Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+createAuthorizerResponse_jwtConfiguration :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe JWTConfiguration)
+createAuthorizerResponse_jwtConfiguration = Lens.lens (\CreateAuthorizerResponse' {jwtConfiguration} -> jwtConfiguration) (\s@CreateAuthorizerResponse' {} a -> s {jwtConfiguration = a} :: CreateAuthorizerResponse)
+
+-- | The name of the authorizer.
+createAuthorizerResponse_name :: Lens.Lens' CreateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+createAuthorizerResponse_name = Lens.lens (\CreateAuthorizerResponse' {name} -> name) (\s@CreateAuthorizerResponse' {} a -> s {name = a} :: CreateAuthorizerResponse)
+
+-- | The response's http status code.
+createAuthorizerResponse_httpStatus :: Lens.Lens' CreateAuthorizerResponse Prelude.Int
+createAuthorizerResponse_httpStatus = Lens.lens (\CreateAuthorizerResponse' {httpStatus} -> httpStatus) (\s@CreateAuthorizerResponse' {} a -> s {httpStatus = a} :: CreateAuthorizerResponse)
+
+instance Prelude.NFData CreateAuthorizerResponse where
+  rnf CreateAuthorizerResponse' {..} =
+    Prelude.rnf authorizerCredentialsArn
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf authorizerPayloadFormatVersion
+      `Prelude.seq` Prelude.rnf authorizerResultTtlInSeconds
+      `Prelude.seq` Prelude.rnf authorizerType
+      `Prelude.seq` Prelude.rnf authorizerUri
+      `Prelude.seq` Prelude.rnf enableSimpleResponses
+      `Prelude.seq` Prelude.rnf identitySource
+      `Prelude.seq` Prelude.rnf identityValidationExpression
+      `Prelude.seq` Prelude.rnf jwtConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateDeployment.hs b/gen/Amazonka/ApiGatewayV2/CreateDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateDeployment.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.CreateDeployment
+-- 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 Deployment for an API.
+module Amazonka.ApiGatewayV2.CreateDeployment
+  ( -- * Creating a Request
+    CreateDeployment (..),
+    newCreateDeployment,
+
+    -- * Request Lenses
+    createDeployment_description,
+    createDeployment_stageName,
+    createDeployment_apiId,
+
+    -- * Destructuring the Response
+    CreateDeploymentResponse (..),
+    newCreateDeploymentResponse,
+
+    -- * Response Lenses
+    createDeploymentResponse_autoDeployed,
+    createDeploymentResponse_createdDate,
+    createDeploymentResponse_deploymentId,
+    createDeploymentResponse_deploymentStatus,
+    createDeploymentResponse_deploymentStatusMessage,
+    createDeploymentResponse_description,
+    createDeploymentResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Deployment resource to represent a deployment.
+--
+-- /See:/ 'newCreateDeployment' smart constructor.
+data CreateDeployment = CreateDeployment'
+  { -- | The description for the deployment resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Stage resource for the Deployment resource to create.
+    stageName :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDeployment_description' - The description for the deployment resource.
+--
+-- 'stageName', 'createDeployment_stageName' - The name of the Stage resource for the Deployment resource to create.
+--
+-- 'apiId', 'createDeployment_apiId' - The API identifier.
+newCreateDeployment ::
+  -- | 'apiId'
+  Prelude.Text ->
+  CreateDeployment
+newCreateDeployment pApiId_ =
+  CreateDeployment'
+    { description = Prelude.Nothing,
+      stageName = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | The description for the deployment resource.
+createDeployment_description :: Lens.Lens' CreateDeployment (Prelude.Maybe Prelude.Text)
+createDeployment_description = Lens.lens (\CreateDeployment' {description} -> description) (\s@CreateDeployment' {} a -> s {description = a} :: CreateDeployment)
+
+-- | The name of the Stage resource for the Deployment resource to create.
+createDeployment_stageName :: Lens.Lens' CreateDeployment (Prelude.Maybe Prelude.Text)
+createDeployment_stageName = Lens.lens (\CreateDeployment' {stageName} -> stageName) (\s@CreateDeployment' {} a -> s {stageName = a} :: CreateDeployment)
+
+-- | The API identifier.
+createDeployment_apiId :: Lens.Lens' CreateDeployment Prelude.Text
+createDeployment_apiId = Lens.lens (\CreateDeployment' {apiId} -> apiId) (\s@CreateDeployment' {} a -> s {apiId = a} :: CreateDeployment)
+
+instance Core.AWSRequest CreateDeployment where
+  type
+    AWSResponse CreateDeployment =
+      CreateDeploymentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDeploymentResponse'
+            Prelude.<$> (x Data..?> "autoDeployed")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "deploymentId")
+            Prelude.<*> (x Data..?> "deploymentStatus")
+            Prelude.<*> (x Data..?> "deploymentStatusMessage")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDeployment where
+  hashWithSalt _salt CreateDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData CreateDeployment where
+  rnf CreateDeployment' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders CreateDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDeployment where
+  toJSON CreateDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("stageName" Data..=) Prelude.<$> stageName
+          ]
+      )
+
+instance Data.ToPath CreateDeployment where
+  toPath CreateDeployment' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/deployments"]
+
+instance Data.ToQuery CreateDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDeploymentResponse' smart constructor.
+data CreateDeploymentResponse = CreateDeploymentResponse'
+  { -- | Specifies whether a deployment was automatically released.
+    autoDeployed :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time when the Deployment resource was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier for the deployment.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+    deploymentStatus :: Prelude.Maybe DeploymentStatus,
+    -- | May contain additional feedback on the status of an API deployment.
+    deploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The description for the deployment.
+    description :: 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 'CreateDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoDeployed', 'createDeploymentResponse_autoDeployed' - Specifies whether a deployment was automatically released.
+--
+-- 'createdDate', 'createDeploymentResponse_createdDate' - The date and time when the Deployment resource was created.
+--
+-- 'deploymentId', 'createDeploymentResponse_deploymentId' - The identifier for the deployment.
+--
+-- 'deploymentStatus', 'createDeploymentResponse_deploymentStatus' - The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+--
+-- 'deploymentStatusMessage', 'createDeploymentResponse_deploymentStatusMessage' - May contain additional feedback on the status of an API deployment.
+--
+-- 'description', 'createDeploymentResponse_description' - The description for the deployment.
+--
+-- 'httpStatus', 'createDeploymentResponse_httpStatus' - The response's http status code.
+newCreateDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDeploymentResponse
+newCreateDeploymentResponse pHttpStatus_ =
+  CreateDeploymentResponse'
+    { autoDeployed =
+        Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      deploymentStatus = Prelude.Nothing,
+      deploymentStatusMessage = Prelude.Nothing,
+      description = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether a deployment was automatically released.
+createDeploymentResponse_autoDeployed :: Lens.Lens' CreateDeploymentResponse (Prelude.Maybe Prelude.Bool)
+createDeploymentResponse_autoDeployed = Lens.lens (\CreateDeploymentResponse' {autoDeployed} -> autoDeployed) (\s@CreateDeploymentResponse' {} a -> s {autoDeployed = a} :: CreateDeploymentResponse)
+
+-- | The date and time when the Deployment resource was created.
+createDeploymentResponse_createdDate :: Lens.Lens' CreateDeploymentResponse (Prelude.Maybe Prelude.UTCTime)
+createDeploymentResponse_createdDate = Lens.lens (\CreateDeploymentResponse' {createdDate} -> createdDate) (\s@CreateDeploymentResponse' {} a -> s {createdDate = a} :: CreateDeploymentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier for the deployment.
+createDeploymentResponse_deploymentId :: Lens.Lens' CreateDeploymentResponse (Prelude.Maybe Prelude.Text)
+createDeploymentResponse_deploymentId = Lens.lens (\CreateDeploymentResponse' {deploymentId} -> deploymentId) (\s@CreateDeploymentResponse' {} a -> s {deploymentId = a} :: CreateDeploymentResponse)
+
+-- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+createDeploymentResponse_deploymentStatus :: Lens.Lens' CreateDeploymentResponse (Prelude.Maybe DeploymentStatus)
+createDeploymentResponse_deploymentStatus = Lens.lens (\CreateDeploymentResponse' {deploymentStatus} -> deploymentStatus) (\s@CreateDeploymentResponse' {} a -> s {deploymentStatus = a} :: CreateDeploymentResponse)
+
+-- | May contain additional feedback on the status of an API deployment.
+createDeploymentResponse_deploymentStatusMessage :: Lens.Lens' CreateDeploymentResponse (Prelude.Maybe Prelude.Text)
+createDeploymentResponse_deploymentStatusMessage = Lens.lens (\CreateDeploymentResponse' {deploymentStatusMessage} -> deploymentStatusMessage) (\s@CreateDeploymentResponse' {} a -> s {deploymentStatusMessage = a} :: CreateDeploymentResponse)
+
+-- | The description for the deployment.
+createDeploymentResponse_description :: Lens.Lens' CreateDeploymentResponse (Prelude.Maybe Prelude.Text)
+createDeploymentResponse_description = Lens.lens (\CreateDeploymentResponse' {description} -> description) (\s@CreateDeploymentResponse' {} a -> s {description = a} :: CreateDeploymentResponse)
+
+-- | The response's http status code.
+createDeploymentResponse_httpStatus :: Lens.Lens' CreateDeploymentResponse Prelude.Int
+createDeploymentResponse_httpStatus = Lens.lens (\CreateDeploymentResponse' {httpStatus} -> httpStatus) (\s@CreateDeploymentResponse' {} a -> s {httpStatus = a} :: CreateDeploymentResponse)
+
+instance Prelude.NFData CreateDeploymentResponse where
+  rnf CreateDeploymentResponse' {..} =
+    Prelude.rnf autoDeployed
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf deploymentStatus
+      `Prelude.seq` Prelude.rnf deploymentStatusMessage
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateDomainName.hs b/gen/Amazonka/ApiGatewayV2/CreateDomainName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateDomainName.hs
@@ -0,0 +1,264 @@
+{-# 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.ApiGatewayV2.CreateDomainName
+-- 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 domain name.
+module Amazonka.ApiGatewayV2.CreateDomainName
+  ( -- * Creating a Request
+    CreateDomainName (..),
+    newCreateDomainName,
+
+    -- * Request Lenses
+    createDomainName_domainNameConfigurations,
+    createDomainName_mutualTlsAuthentication,
+    createDomainName_tags,
+    createDomainName_domainName,
+
+    -- * Destructuring the Response
+    CreateDomainNameResponse (..),
+    newCreateDomainNameResponse,
+
+    -- * Response Lenses
+    createDomainNameResponse_apiMappingSelectionExpression,
+    createDomainNameResponse_domainName,
+    createDomainNameResponse_domainNameConfigurations,
+    createDomainNameResponse_mutualTlsAuthentication,
+    createDomainNameResponse_tags,
+    createDomainNameResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new DomainName resource to represent a domain name.
+--
+-- /See:/ 'newCreateDomainName' smart constructor.
+data CreateDomainName = CreateDomainName'
+  { -- | The domain name configurations.
+    domainNameConfigurations :: Prelude.Maybe [DomainNameConfiguration],
+    -- | The mutual TLS authentication configuration for a custom domain name.
+    mutualTlsAuthentication :: Prelude.Maybe MutualTlsAuthenticationInput,
+    -- | The collection of tags associated with a domain name.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomainName' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainNameConfigurations', 'createDomainName_domainNameConfigurations' - The domain name configurations.
+--
+-- 'mutualTlsAuthentication', 'createDomainName_mutualTlsAuthentication' - The mutual TLS authentication configuration for a custom domain name.
+--
+-- 'tags', 'createDomainName_tags' - The collection of tags associated with a domain name.
+--
+-- 'domainName', 'createDomainName_domainName' - The domain name.
+newCreateDomainName ::
+  -- | 'domainName'
+  Prelude.Text ->
+  CreateDomainName
+newCreateDomainName pDomainName_ =
+  CreateDomainName'
+    { domainNameConfigurations =
+        Prelude.Nothing,
+      mutualTlsAuthentication = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The domain name configurations.
+createDomainName_domainNameConfigurations :: Lens.Lens' CreateDomainName (Prelude.Maybe [DomainNameConfiguration])
+createDomainName_domainNameConfigurations = Lens.lens (\CreateDomainName' {domainNameConfigurations} -> domainNameConfigurations) (\s@CreateDomainName' {} a -> s {domainNameConfigurations = a} :: CreateDomainName) Prelude.. Lens.mapping Lens.coerced
+
+-- | The mutual TLS authentication configuration for a custom domain name.
+createDomainName_mutualTlsAuthentication :: Lens.Lens' CreateDomainName (Prelude.Maybe MutualTlsAuthenticationInput)
+createDomainName_mutualTlsAuthentication = Lens.lens (\CreateDomainName' {mutualTlsAuthentication} -> mutualTlsAuthentication) (\s@CreateDomainName' {} a -> s {mutualTlsAuthentication = a} :: CreateDomainName)
+
+-- | The collection of tags associated with a domain name.
+createDomainName_tags :: Lens.Lens' CreateDomainName (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDomainName_tags = Lens.lens (\CreateDomainName' {tags} -> tags) (\s@CreateDomainName' {} a -> s {tags = a} :: CreateDomainName) Prelude.. Lens.mapping Lens.coerced
+
+-- | The domain name.
+createDomainName_domainName :: Lens.Lens' CreateDomainName Prelude.Text
+createDomainName_domainName = Lens.lens (\CreateDomainName' {domainName} -> domainName) (\s@CreateDomainName' {} a -> s {domainName = a} :: CreateDomainName)
+
+instance Core.AWSRequest CreateDomainName where
+  type
+    AWSResponse CreateDomainName =
+      CreateDomainNameResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDomainNameResponse'
+            Prelude.<$> (x Data..?> "apiMappingSelectionExpression")
+            Prelude.<*> (x Data..?> "domainName")
+            Prelude.<*> ( x
+                            Data..?> "domainNameConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "mutualTlsAuthentication")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDomainName where
+  hashWithSalt _salt CreateDomainName' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainNameConfigurations
+      `Prelude.hashWithSalt` mutualTlsAuthentication
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData CreateDomainName where
+  rnf CreateDomainName' {..} =
+    Prelude.rnf domainNameConfigurations
+      `Prelude.seq` Prelude.rnf mutualTlsAuthentication
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders CreateDomainName where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDomainName where
+  toJSON CreateDomainName' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("domainNameConfigurations" Data..=)
+              Prelude.<$> domainNameConfigurations,
+            ("mutualTlsAuthentication" Data..=)
+              Prelude.<$> mutualTlsAuthentication,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("domainName" Data..= domainName)
+          ]
+      )
+
+instance Data.ToPath CreateDomainName where
+  toPath = Prelude.const "/v2/domainnames"
+
+instance Data.ToQuery CreateDomainName where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDomainNameResponse' smart constructor.
+data CreateDomainNameResponse = CreateDomainNameResponse'
+  { -- | The API mapping selection expression.
+    apiMappingSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The name of the DomainName resource.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The domain name configurations.
+    domainNameConfigurations :: Prelude.Maybe [DomainNameConfiguration],
+    -- | The mutual TLS authentication configuration for a custom domain name.
+    mutualTlsAuthentication :: Prelude.Maybe MutualTlsAuthentication,
+    -- | The collection of tags associated with a domain name.
+    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 'CreateDomainNameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingSelectionExpression', 'createDomainNameResponse_apiMappingSelectionExpression' - The API mapping selection expression.
+--
+-- 'domainName', 'createDomainNameResponse_domainName' - The name of the DomainName resource.
+--
+-- 'domainNameConfigurations', 'createDomainNameResponse_domainNameConfigurations' - The domain name configurations.
+--
+-- 'mutualTlsAuthentication', 'createDomainNameResponse_mutualTlsAuthentication' - The mutual TLS authentication configuration for a custom domain name.
+--
+-- 'tags', 'createDomainNameResponse_tags' - The collection of tags associated with a domain name.
+--
+-- 'httpStatus', 'createDomainNameResponse_httpStatus' - The response's http status code.
+newCreateDomainNameResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDomainNameResponse
+newCreateDomainNameResponse pHttpStatus_ =
+  CreateDomainNameResponse'
+    { apiMappingSelectionExpression =
+        Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      domainNameConfigurations = Prelude.Nothing,
+      mutualTlsAuthentication = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The API mapping selection expression.
+createDomainNameResponse_apiMappingSelectionExpression :: Lens.Lens' CreateDomainNameResponse (Prelude.Maybe Prelude.Text)
+createDomainNameResponse_apiMappingSelectionExpression = Lens.lens (\CreateDomainNameResponse' {apiMappingSelectionExpression} -> apiMappingSelectionExpression) (\s@CreateDomainNameResponse' {} a -> s {apiMappingSelectionExpression = a} :: CreateDomainNameResponse)
+
+-- | The name of the DomainName resource.
+createDomainNameResponse_domainName :: Lens.Lens' CreateDomainNameResponse (Prelude.Maybe Prelude.Text)
+createDomainNameResponse_domainName = Lens.lens (\CreateDomainNameResponse' {domainName} -> domainName) (\s@CreateDomainNameResponse' {} a -> s {domainName = a} :: CreateDomainNameResponse)
+
+-- | The domain name configurations.
+createDomainNameResponse_domainNameConfigurations :: Lens.Lens' CreateDomainNameResponse (Prelude.Maybe [DomainNameConfiguration])
+createDomainNameResponse_domainNameConfigurations = Lens.lens (\CreateDomainNameResponse' {domainNameConfigurations} -> domainNameConfigurations) (\s@CreateDomainNameResponse' {} a -> s {domainNameConfigurations = a} :: CreateDomainNameResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The mutual TLS authentication configuration for a custom domain name.
+createDomainNameResponse_mutualTlsAuthentication :: Lens.Lens' CreateDomainNameResponse (Prelude.Maybe MutualTlsAuthentication)
+createDomainNameResponse_mutualTlsAuthentication = Lens.lens (\CreateDomainNameResponse' {mutualTlsAuthentication} -> mutualTlsAuthentication) (\s@CreateDomainNameResponse' {} a -> s {mutualTlsAuthentication = a} :: CreateDomainNameResponse)
+
+-- | The collection of tags associated with a domain name.
+createDomainNameResponse_tags :: Lens.Lens' CreateDomainNameResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDomainNameResponse_tags = Lens.lens (\CreateDomainNameResponse' {tags} -> tags) (\s@CreateDomainNameResponse' {} a -> s {tags = a} :: CreateDomainNameResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createDomainNameResponse_httpStatus :: Lens.Lens' CreateDomainNameResponse Prelude.Int
+createDomainNameResponse_httpStatus = Lens.lens (\CreateDomainNameResponse' {httpStatus} -> httpStatus) (\s@CreateDomainNameResponse' {} a -> s {httpStatus = a} :: CreateDomainNameResponse)
+
+instance Prelude.NFData CreateDomainNameResponse where
+  rnf CreateDomainNameResponse' {..} =
+    Prelude.rnf apiMappingSelectionExpression
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf domainNameConfigurations
+      `Prelude.seq` Prelude.rnf mutualTlsAuthentication
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateIntegration.hs b/gen/Amazonka/ApiGatewayV2/CreateIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateIntegration.hs
@@ -0,0 +1,1341 @@
+{-# 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.ApiGatewayV2.CreateIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Integration.
+module Amazonka.ApiGatewayV2.CreateIntegration
+  ( -- * Creating a Request
+    CreateIntegration (..),
+    newCreateIntegration,
+
+    -- * Request Lenses
+    createIntegration_connectionId,
+    createIntegration_connectionType,
+    createIntegration_contentHandlingStrategy,
+    createIntegration_credentialsArn,
+    createIntegration_description,
+    createIntegration_integrationMethod,
+    createIntegration_integrationSubtype,
+    createIntegration_integrationUri,
+    createIntegration_passthroughBehavior,
+    createIntegration_payloadFormatVersion,
+    createIntegration_requestParameters,
+    createIntegration_requestTemplates,
+    createIntegration_responseParameters,
+    createIntegration_templateSelectionExpression,
+    createIntegration_timeoutInMillis,
+    createIntegration_tlsConfig,
+    createIntegration_apiId,
+    createIntegration_integrationType,
+
+    -- * Destructuring the Response
+    CreateIntegrationResponse' (..),
+    newCreateIntegrationResponse',
+
+    -- * Response Lenses
+    createIntegrationResponse'_apiGatewayManaged,
+    createIntegrationResponse'_connectionId,
+    createIntegrationResponse'_connectionType,
+    createIntegrationResponse'_contentHandlingStrategy,
+    createIntegrationResponse'_credentialsArn,
+    createIntegrationResponse'_description,
+    createIntegrationResponse'_integrationId,
+    createIntegrationResponse'_integrationMethod,
+    createIntegrationResponse'_integrationResponseSelectionExpression,
+    createIntegrationResponse'_integrationSubtype,
+    createIntegrationResponse'_integrationType,
+    createIntegrationResponse'_integrationUri,
+    createIntegrationResponse'_passthroughBehavior,
+    createIntegrationResponse'_payloadFormatVersion,
+    createIntegrationResponse'_requestParameters,
+    createIntegrationResponse'_requestTemplates,
+    createIntegrationResponse'_responseParameters,
+    createIntegrationResponse'_templateSelectionExpression,
+    createIntegrationResponse'_timeoutInMillis,
+    createIntegrationResponse'_tlsConfig,
+    createIntegrationResponse'_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Integration resource to represent an integration.
+--
+-- /See:/ 'newCreateIntegration' smart constructor.
+data CreateIntegration = CreateIntegration'
+  { -- | The ID of the VPC link for a private integration. Supported only for
+    -- HTTP APIs.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the network connection to the integration endpoint. Specify
+    -- INTERNET for connections through the public routable internet or
+    -- VPC_LINK for private connections between API Gateway and resources in a
+    -- VPC. The default value is INTERNET.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | Specifies the credentials required for the integration, if any. For AWS
+    -- integrations, three options are available. To specify an IAM Role for
+    -- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+    -- require that the caller\'s identity be passed through from the request,
+    -- specify the string arn:aws:iam::*:user\/*. To use resource-based
+    -- permissions on supported AWS services, specify null.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the integration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the integration\'s HTTP method type.
+    integrationMethod :: Prelude.Maybe Prelude.Text,
+    -- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+    -- service action to invoke. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+    integrationSubtype :: Prelude.Maybe Prelude.Text,
+    -- | For a Lambda integration, specify the URI of a Lambda function.
+    --
+    -- For an HTTP integration, specify a fully-qualified URL.
+    --
+    -- For an HTTP API private integration, specify the ARN of an Application
+    -- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+    -- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+    -- uses DiscoverInstances to identify resources. You can use query
+    -- parameters to target specific resources. To learn more, see
+    -- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+    -- For private integrations, all resources must be owned by the same AWS
+    -- account.
+    integrationUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the pass-through behavior for incoming requests based on the
+    -- Content-Type header in the request, and the available mapping templates
+    -- specified as the requestTemplates property on the Integration resource.
+    -- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+    -- NEVER. Supported only for WebSocket APIs.
+    --
+    -- WHEN_NO_MATCH passes the request body for unmapped content types through
+    -- to the integration backend without transformation.
+    --
+    -- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+    -- Type response.
+    --
+    -- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+    -- content types mapped to templates. However, if there is at least one
+    -- content type defined, unmapped content types will be rejected with the
+    -- same HTTP 415 Unsupported Media Type response.
+    passthroughBehavior :: Prelude.Maybe PassthroughBehavior,
+    -- | Specifies the format of the payload sent to an integration. Required for
+    -- HTTP APIs.
+    payloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | For WebSocket APIs, a key-value map specifying request parameters that
+    -- are passed from the method request to the backend. The key is an
+    -- integration request parameter name and the associated value is a method
+    -- request parameter value or static value that must be enclosed within
+    -- single quotes and pre-encoded as required by the backend. The method
+    -- request parameter value must match the pattern of
+    -- method.request.{location}.{name} , where {location} is querystring,
+    -- path, or header; and {name} must be a valid and unique method request
+    -- parameter name.
+    --
+    -- For HTTP API integrations with a specified integrationSubtype, request
+    -- parameters are a key-value map specifying parameters that are passed to
+    -- AWS_PROXY integrations. You can provide static values, or map request
+    -- data, stage variables, or context variables that are evaluated at
+    -- runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+    --
+    -- For HTTP API integrations without a specified integrationSubtype request
+    -- parameters are a key-value map specifying how to transform HTTP requests
+    -- before sending them to the backend. The key should follow the pattern
+    -- \<action>:\<header|querystring|path>.\<location> where action can be
+    -- append, overwrite or remove. For values, you can provide static values,
+    -- or map request data, stage variables, or context variables that are
+    -- evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents a map of Velocity templates that are applied on the request
+    -- payload based on the value of the Content-Type header sent by the
+    -- client. The content type value is the key in this map, and the template
+    -- (as a String) is the value. Supported only for WebSocket APIs.
+    requestTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Supported only for HTTP APIs. You use response parameters to transform
+    -- the HTTP response from a backend integration before returning the
+    -- response to clients. Specify a key-value map from a selection key to
+    -- response parameters. The selection key must be a valid HTTP status code
+    -- within the range of 200-599. Response parameters are a key-value map.
+    -- The key must match pattern \<action>:\<header>.\<location> or
+    -- overwrite.statuscode. The action can be append, overwrite or remove. The
+    -- value can be a static value, or map to response data, stage variables,
+    -- or context variables that are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The template selection expression for the integration.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+    -- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+    -- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+    timeoutInMillis :: Prelude.Maybe Prelude.Natural,
+    -- | The TLS configuration for a private integration. If you specify a TLS
+    -- configuration, private integration traffic uses the HTTPS protocol.
+    -- Supported only for HTTP APIs.
+    tlsConfig :: Prelude.Maybe TlsConfigInput,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration type of an integration. One of the following:
+    --
+    -- AWS: for integrating the route or method request with an AWS service
+    -- action, including the Lambda function-invoking action. With the Lambda
+    -- function-invoking action, this is referred to as the Lambda custom
+    -- integration. With any other AWS service action, this is known as AWS
+    -- integration. Supported only for WebSocket APIs.
+    --
+    -- AWS_PROXY: for integrating the route or method request with a Lambda
+    -- function or other AWS service action. This integration is also referred
+    -- to as a Lambda proxy integration.
+    --
+    -- HTTP: for integrating the route or method request with an HTTP endpoint.
+    -- This integration is also referred to as the HTTP custom integration.
+    -- Supported only for WebSocket APIs.
+    --
+    -- HTTP_PROXY: for integrating the route or method request with an HTTP
+    -- endpoint, with the client request passed through as-is. This is also
+    -- referred to as HTTP proxy integration. For HTTP API private
+    -- integrations, use an HTTP_PROXY integration.
+    --
+    -- MOCK: for integrating the route or method request with API Gateway as a
+    -- \"loopback\" endpoint without invoking any backend. Supported only for
+    -- WebSocket APIs.
+    integrationType :: IntegrationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionId', 'createIntegration_connectionId' - The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+--
+-- 'connectionType', 'createIntegration_connectionType' - The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+--
+-- 'contentHandlingStrategy', 'createIntegration_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'credentialsArn', 'createIntegration_credentialsArn' - Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+--
+-- 'description', 'createIntegration_description' - The description of the integration.
+--
+-- 'integrationMethod', 'createIntegration_integrationMethod' - Specifies the integration\'s HTTP method type.
+--
+-- 'integrationSubtype', 'createIntegration_integrationSubtype' - Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+--
+-- 'integrationUri', 'createIntegration_integrationUri' - For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+--
+-- 'passthroughBehavior', 'createIntegration_passthroughBehavior' - Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+--
+-- 'payloadFormatVersion', 'createIntegration_payloadFormatVersion' - Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+--
+-- 'requestParameters', 'createIntegration_requestParameters' - For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API integrations without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to the backend. The key should follow the pattern
+-- \<action>:\<header|querystring|path>.\<location> where action can be
+-- append, overwrite or remove. For values, you can provide static values,
+-- or map request data, stage variables, or context variables that are
+-- evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'requestTemplates', 'createIntegration_requestTemplates' - Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+--
+-- 'responseParameters', 'createIntegration_responseParameters' - Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'templateSelectionExpression', 'createIntegration_templateSelectionExpression' - The template selection expression for the integration.
+--
+-- 'timeoutInMillis', 'createIntegration_timeoutInMillis' - Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+--
+-- 'tlsConfig', 'createIntegration_tlsConfig' - The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+--
+-- 'apiId', 'createIntegration_apiId' - The API identifier.
+--
+-- 'integrationType', 'createIntegration_integrationType' - The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration. For HTTP API private
+-- integrations, use an HTTP_PROXY integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+newCreateIntegration ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationType'
+  IntegrationType ->
+  CreateIntegration
+newCreateIntegration pApiId_ pIntegrationType_ =
+  CreateIntegration'
+    { connectionId = Prelude.Nothing,
+      connectionType = Prelude.Nothing,
+      contentHandlingStrategy = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      integrationMethod = Prelude.Nothing,
+      integrationSubtype = Prelude.Nothing,
+      integrationUri = Prelude.Nothing,
+      passthroughBehavior = Prelude.Nothing,
+      payloadFormatVersion = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      requestTemplates = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      templateSelectionExpression = Prelude.Nothing,
+      timeoutInMillis = Prelude.Nothing,
+      tlsConfig = Prelude.Nothing,
+      apiId = pApiId_,
+      integrationType = pIntegrationType_
+    }
+
+-- | The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+createIntegration_connectionId :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_connectionId = Lens.lens (\CreateIntegration' {connectionId} -> connectionId) (\s@CreateIntegration' {} a -> s {connectionId = a} :: CreateIntegration)
+
+-- | The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+createIntegration_connectionType :: Lens.Lens' CreateIntegration (Prelude.Maybe ConnectionType)
+createIntegration_connectionType = Lens.lens (\CreateIntegration' {connectionType} -> connectionType) (\s@CreateIntegration' {} a -> s {connectionType = a} :: CreateIntegration)
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+createIntegration_contentHandlingStrategy :: Lens.Lens' CreateIntegration (Prelude.Maybe ContentHandlingStrategy)
+createIntegration_contentHandlingStrategy = Lens.lens (\CreateIntegration' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@CreateIntegration' {} a -> s {contentHandlingStrategy = a} :: CreateIntegration)
+
+-- | Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+createIntegration_credentialsArn :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_credentialsArn = Lens.lens (\CreateIntegration' {credentialsArn} -> credentialsArn) (\s@CreateIntegration' {} a -> s {credentialsArn = a} :: CreateIntegration)
+
+-- | The description of the integration.
+createIntegration_description :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_description = Lens.lens (\CreateIntegration' {description} -> description) (\s@CreateIntegration' {} a -> s {description = a} :: CreateIntegration)
+
+-- | Specifies the integration\'s HTTP method type.
+createIntegration_integrationMethod :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_integrationMethod = Lens.lens (\CreateIntegration' {integrationMethod} -> integrationMethod) (\s@CreateIntegration' {} a -> s {integrationMethod = a} :: CreateIntegration)
+
+-- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+createIntegration_integrationSubtype :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_integrationSubtype = Lens.lens (\CreateIntegration' {integrationSubtype} -> integrationSubtype) (\s@CreateIntegration' {} a -> s {integrationSubtype = a} :: CreateIntegration)
+
+-- | For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+createIntegration_integrationUri :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_integrationUri = Lens.lens (\CreateIntegration' {integrationUri} -> integrationUri) (\s@CreateIntegration' {} a -> s {integrationUri = a} :: CreateIntegration)
+
+-- | Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+createIntegration_passthroughBehavior :: Lens.Lens' CreateIntegration (Prelude.Maybe PassthroughBehavior)
+createIntegration_passthroughBehavior = Lens.lens (\CreateIntegration' {passthroughBehavior} -> passthroughBehavior) (\s@CreateIntegration' {} a -> s {passthroughBehavior = a} :: CreateIntegration)
+
+-- | Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+createIntegration_payloadFormatVersion :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_payloadFormatVersion = Lens.lens (\CreateIntegration' {payloadFormatVersion} -> payloadFormatVersion) (\s@CreateIntegration' {} a -> s {payloadFormatVersion = a} :: CreateIntegration)
+
+-- | For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API integrations without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to the backend. The key should follow the pattern
+-- \<action>:\<header|querystring|path>.\<location> where action can be
+-- append, overwrite or remove. For values, you can provide static values,
+-- or map request data, stage variables, or context variables that are
+-- evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+createIntegration_requestParameters :: Lens.Lens' CreateIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegration_requestParameters = Lens.lens (\CreateIntegration' {requestParameters} -> requestParameters) (\s@CreateIntegration' {} a -> s {requestParameters = a} :: CreateIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+createIntegration_requestTemplates :: Lens.Lens' CreateIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegration_requestTemplates = Lens.lens (\CreateIntegration' {requestTemplates} -> requestTemplates) (\s@CreateIntegration' {} a -> s {requestTemplates = a} :: CreateIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+createIntegration_responseParameters :: Lens.Lens' CreateIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+createIntegration_responseParameters = Lens.lens (\CreateIntegration' {responseParameters} -> responseParameters) (\s@CreateIntegration' {} a -> s {responseParameters = a} :: CreateIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration.
+createIntegration_templateSelectionExpression :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Text)
+createIntegration_templateSelectionExpression = Lens.lens (\CreateIntegration' {templateSelectionExpression} -> templateSelectionExpression) (\s@CreateIntegration' {} a -> s {templateSelectionExpression = a} :: CreateIntegration)
+
+-- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+createIntegration_timeoutInMillis :: Lens.Lens' CreateIntegration (Prelude.Maybe Prelude.Natural)
+createIntegration_timeoutInMillis = Lens.lens (\CreateIntegration' {timeoutInMillis} -> timeoutInMillis) (\s@CreateIntegration' {} a -> s {timeoutInMillis = a} :: CreateIntegration)
+
+-- | The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+createIntegration_tlsConfig :: Lens.Lens' CreateIntegration (Prelude.Maybe TlsConfigInput)
+createIntegration_tlsConfig = Lens.lens (\CreateIntegration' {tlsConfig} -> tlsConfig) (\s@CreateIntegration' {} a -> s {tlsConfig = a} :: CreateIntegration)
+
+-- | The API identifier.
+createIntegration_apiId :: Lens.Lens' CreateIntegration Prelude.Text
+createIntegration_apiId = Lens.lens (\CreateIntegration' {apiId} -> apiId) (\s@CreateIntegration' {} a -> s {apiId = a} :: CreateIntegration)
+
+-- | The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration. For HTTP API private
+-- integrations, use an HTTP_PROXY integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+createIntegration_integrationType :: Lens.Lens' CreateIntegration IntegrationType
+createIntegration_integrationType = Lens.lens (\CreateIntegration' {integrationType} -> integrationType) (\s@CreateIntegration' {} a -> s {integrationType = a} :: CreateIntegration)
+
+instance Core.AWSRequest CreateIntegration where
+  type
+    AWSResponse CreateIntegration =
+      CreateIntegrationResponse'
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateIntegrationResponse''
+            Prelude.<$> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "connectionId")
+            Prelude.<*> (x Data..?> "connectionType")
+            Prelude.<*> (x Data..?> "contentHandlingStrategy")
+            Prelude.<*> (x Data..?> "credentialsArn")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "integrationId")
+            Prelude.<*> (x Data..?> "integrationMethod")
+            Prelude.<*> (x Data..?> "integrationResponseSelectionExpression")
+            Prelude.<*> (x Data..?> "integrationSubtype")
+            Prelude.<*> (x Data..?> "integrationType")
+            Prelude.<*> (x Data..?> "integrationUri")
+            Prelude.<*> (x Data..?> "passthroughBehavior")
+            Prelude.<*> (x Data..?> "payloadFormatVersion")
+            Prelude.<*> ( x
+                            Data..?> "requestParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "requestTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "templateSelectionExpression")
+            Prelude.<*> (x Data..?> "timeoutInMillis")
+            Prelude.<*> (x Data..?> "tlsConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIntegration where
+  hashWithSalt _salt CreateIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionId
+      `Prelude.hashWithSalt` connectionType
+      `Prelude.hashWithSalt` contentHandlingStrategy
+      `Prelude.hashWithSalt` credentialsArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` integrationMethod
+      `Prelude.hashWithSalt` integrationSubtype
+      `Prelude.hashWithSalt` integrationUri
+      `Prelude.hashWithSalt` passthroughBehavior
+      `Prelude.hashWithSalt` payloadFormatVersion
+      `Prelude.hashWithSalt` requestParameters
+      `Prelude.hashWithSalt` requestTemplates
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` templateSelectionExpression
+      `Prelude.hashWithSalt` timeoutInMillis
+      `Prelude.hashWithSalt` tlsConfig
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationType
+
+instance Prelude.NFData CreateIntegration where
+  rnf CreateIntegration' {..} =
+    Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf integrationMethod
+      `Prelude.seq` Prelude.rnf integrationSubtype
+      `Prelude.seq` Prelude.rnf integrationUri
+      `Prelude.seq` Prelude.rnf passthroughBehavior
+      `Prelude.seq` Prelude.rnf payloadFormatVersion
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf requestTemplates
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf timeoutInMillis
+      `Prelude.seq` Prelude.rnf tlsConfig
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationType
+
+instance Data.ToHeaders CreateIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateIntegration where
+  toJSON CreateIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("connectionId" Data..=) Prelude.<$> connectionId,
+            ("connectionType" Data..=)
+              Prelude.<$> connectionType,
+            ("contentHandlingStrategy" Data..=)
+              Prelude.<$> contentHandlingStrategy,
+            ("credentialsArn" Data..=)
+              Prelude.<$> credentialsArn,
+            ("description" Data..=) Prelude.<$> description,
+            ("integrationMethod" Data..=)
+              Prelude.<$> integrationMethod,
+            ("integrationSubtype" Data..=)
+              Prelude.<$> integrationSubtype,
+            ("integrationUri" Data..=)
+              Prelude.<$> integrationUri,
+            ("passthroughBehavior" Data..=)
+              Prelude.<$> passthroughBehavior,
+            ("payloadFormatVersion" Data..=)
+              Prelude.<$> payloadFormatVersion,
+            ("requestParameters" Data..=)
+              Prelude.<$> requestParameters,
+            ("requestTemplates" Data..=)
+              Prelude.<$> requestTemplates,
+            ("responseParameters" Data..=)
+              Prelude.<$> responseParameters,
+            ("templateSelectionExpression" Data..=)
+              Prelude.<$> templateSelectionExpression,
+            ("timeoutInMillis" Data..=)
+              Prelude.<$> timeoutInMillis,
+            ("tlsConfig" Data..=) Prelude.<$> tlsConfig,
+            Prelude.Just
+              ("integrationType" Data..= integrationType)
+          ]
+      )
+
+instance Data.ToPath CreateIntegration where
+  toPath CreateIntegration' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/integrations"]
+
+instance Data.ToQuery CreateIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateIntegrationResponse'' smart constructor.
+data CreateIntegrationResponse' = CreateIntegrationResponse''
+  { -- | Specifies whether an integration is managed by API Gateway. If you
+    -- created an API using using quick create, the resulting integration is
+    -- managed by API Gateway. You can update a managed integration, but you
+    -- can\'t delete it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC link for a private integration. Supported only for
+    -- HTTP APIs.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the network connection to the integration endpoint. Specify
+    -- INTERNET for connections through the public routable internet or
+    -- VPC_LINK for private connections between API Gateway and resources in a
+    -- VPC. The default value is INTERNET.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | Specifies the credentials required for the integration, if any. For AWS
+    -- integrations, three options are available. To specify an IAM Role for
+    -- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+    -- require that the caller\'s identity be passed through from the request,
+    -- specify the string arn:aws:iam::*:user\/*. To use resource-based
+    -- permissions on supported AWS services, specify null.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | Represents the description of an integration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Represents the identifier of an integration.
+    integrationId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the integration\'s HTTP method type.
+    integrationMethod :: Prelude.Maybe Prelude.Text,
+    -- | The integration response selection expression for the integration.
+    -- Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+    integrationResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+    -- service action to invoke. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+    integrationSubtype :: Prelude.Maybe Prelude.Text,
+    -- | The integration type of an integration. One of the following:
+    --
+    -- AWS: for integrating the route or method request with an AWS service
+    -- action, including the Lambda function-invoking action. With the Lambda
+    -- function-invoking action, this is referred to as the Lambda custom
+    -- integration. With any other AWS service action, this is known as AWS
+    -- integration. Supported only for WebSocket APIs.
+    --
+    -- AWS_PROXY: for integrating the route or method request with a Lambda
+    -- function or other AWS service action. This integration is also referred
+    -- to as a Lambda proxy integration.
+    --
+    -- HTTP: for integrating the route or method request with an HTTP endpoint.
+    -- This integration is also referred to as the HTTP custom integration.
+    -- Supported only for WebSocket APIs.
+    --
+    -- HTTP_PROXY: for integrating the route or method request with an HTTP
+    -- endpoint, with the client request passed through as-is. This is also
+    -- referred to as HTTP proxy integration.
+    --
+    -- MOCK: for integrating the route or method request with API Gateway as a
+    -- \"loopback\" endpoint without invoking any backend. Supported only for
+    -- WebSocket APIs.
+    integrationType :: Prelude.Maybe IntegrationType,
+    -- | For a Lambda integration, specify the URI of a Lambda function.
+    --
+    -- For an HTTP integration, specify a fully-qualified URL.
+    --
+    -- For an HTTP API private integration, specify the ARN of an Application
+    -- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+    -- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+    -- uses DiscoverInstances to identify resources. You can use query
+    -- parameters to target specific resources. To learn more, see
+    -- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+    -- For private integrations, all resources must be owned by the same AWS
+    -- account.
+    integrationUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the pass-through behavior for incoming requests based on the
+    -- Content-Type header in the request, and the available mapping templates
+    -- specified as the requestTemplates property on the Integration resource.
+    -- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+    -- NEVER. Supported only for WebSocket APIs.
+    --
+    -- WHEN_NO_MATCH passes the request body for unmapped content types through
+    -- to the integration backend without transformation.
+    --
+    -- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+    -- Type response.
+    --
+    -- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+    -- content types mapped to templates. However, if there is at least one
+    -- content type defined, unmapped content types will be rejected with the
+    -- same HTTP 415 Unsupported Media Type response.
+    passthroughBehavior :: Prelude.Maybe PassthroughBehavior,
+    -- | Specifies the format of the payload sent to an integration. Required for
+    -- HTTP APIs.
+    payloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | For WebSocket APIs, a key-value map specifying request parameters that
+    -- are passed from the method request to the backend. The key is an
+    -- integration request parameter name and the associated value is a method
+    -- request parameter value or static value that must be enclosed within
+    -- single quotes and pre-encoded as required by the backend. The method
+    -- request parameter value must match the pattern of
+    -- method.request.{location}.{name} , where {location} is querystring,
+    -- path, or header; and {name} must be a valid and unique method request
+    -- parameter name.
+    --
+    -- For HTTP API integrations with a specified integrationSubtype, request
+    -- parameters are a key-value map specifying parameters that are passed to
+    -- AWS_PROXY integrations. You can provide static values, or map request
+    -- data, stage variables, or context variables that are evaluated at
+    -- runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+    --
+    -- For HTTP API itegrations, without a specified integrationSubtype request
+    -- parameters are a key-value map specifying how to transform HTTP requests
+    -- before sending them to backend integrations. The key should follow the
+    -- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+    -- be append, overwrite or remove. For values, you can provide static
+    -- values, or map request data, stage variables, or context variables that
+    -- are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents a map of Velocity templates that are applied on the request
+    -- payload based on the value of the Content-Type header sent by the
+    -- client. The content type value is the key in this map, and the template
+    -- (as a String) is the value. Supported only for WebSocket APIs.
+    requestTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Supported only for HTTP APIs. You use response parameters to transform
+    -- the HTTP response from a backend integration before returning the
+    -- response to clients. Specify a key-value map from a selection key to
+    -- response parameters. The selection key must be a valid HTTP status code
+    -- within the range of 200-599. Response parameters are a key-value map.
+    -- The key must match pattern \<action>:\<header>.\<location> or
+    -- overwrite.statuscode. The action can be append, overwrite or remove. The
+    -- value can be a static value, or map to response data, stage variables,
+    -- or context variables that are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The template selection expression for the integration. Supported only
+    -- for WebSocket APIs.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+    -- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+    -- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+    timeoutInMillis :: Prelude.Maybe Prelude.Natural,
+    -- | The TLS configuration for a private integration. If you specify a TLS
+    -- configuration, private integration traffic uses the HTTPS protocol.
+    -- Supported only for HTTP APIs.
+    tlsConfig :: Prelude.Maybe TlsConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIntegrationResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'createIntegrationResponse'_apiGatewayManaged' - Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+--
+-- 'connectionId', 'createIntegrationResponse'_connectionId' - The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+--
+-- 'connectionType', 'createIntegrationResponse'_connectionType' - The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+--
+-- 'contentHandlingStrategy', 'createIntegrationResponse'_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'credentialsArn', 'createIntegrationResponse'_credentialsArn' - Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+--
+-- 'description', 'createIntegrationResponse'_description' - Represents the description of an integration.
+--
+-- 'integrationId', 'createIntegrationResponse'_integrationId' - Represents the identifier of an integration.
+--
+-- 'integrationMethod', 'createIntegrationResponse'_integrationMethod' - Specifies the integration\'s HTTP method type.
+--
+-- 'integrationResponseSelectionExpression', 'createIntegrationResponse'_integrationResponseSelectionExpression' - The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+--
+-- 'integrationSubtype', 'createIntegrationResponse'_integrationSubtype' - Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+--
+-- 'integrationType', 'createIntegrationResponse'_integrationType' - The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+--
+-- 'integrationUri', 'createIntegrationResponse'_integrationUri' - For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+--
+-- 'passthroughBehavior', 'createIntegrationResponse'_passthroughBehavior' - Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+--
+-- 'payloadFormatVersion', 'createIntegrationResponse'_payloadFormatVersion' - Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+--
+-- 'requestParameters', 'createIntegrationResponse'_requestParameters' - For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'requestTemplates', 'createIntegrationResponse'_requestTemplates' - Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+--
+-- 'responseParameters', 'createIntegrationResponse'_responseParameters' - Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'templateSelectionExpression', 'createIntegrationResponse'_templateSelectionExpression' - The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+--
+-- 'timeoutInMillis', 'createIntegrationResponse'_timeoutInMillis' - Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+--
+-- 'tlsConfig', 'createIntegrationResponse'_tlsConfig' - The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+--
+-- 'httpStatus', 'createIntegrationResponse'_httpStatus' - The response's http status code.
+newCreateIntegrationResponse' ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIntegrationResponse'
+newCreateIntegrationResponse' pHttpStatus_ =
+  CreateIntegrationResponse''
+    { apiGatewayManaged =
+        Prelude.Nothing,
+      connectionId = Prelude.Nothing,
+      connectionType = Prelude.Nothing,
+      contentHandlingStrategy = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      integrationId = Prelude.Nothing,
+      integrationMethod = Prelude.Nothing,
+      integrationResponseSelectionExpression =
+        Prelude.Nothing,
+      integrationSubtype = Prelude.Nothing,
+      integrationType = Prelude.Nothing,
+      integrationUri = Prelude.Nothing,
+      passthroughBehavior = Prelude.Nothing,
+      payloadFormatVersion = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      requestTemplates = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      templateSelectionExpression = Prelude.Nothing,
+      timeoutInMillis = Prelude.Nothing,
+      tlsConfig = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+createIntegrationResponse'_apiGatewayManaged :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Bool)
+createIntegrationResponse'_apiGatewayManaged = Lens.lens (\CreateIntegrationResponse'' {apiGatewayManaged} -> apiGatewayManaged) (\s@CreateIntegrationResponse'' {} a -> s {apiGatewayManaged = a} :: CreateIntegrationResponse')
+
+-- | The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+createIntegrationResponse'_connectionId :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_connectionId = Lens.lens (\CreateIntegrationResponse'' {connectionId} -> connectionId) (\s@CreateIntegrationResponse'' {} a -> s {connectionId = a} :: CreateIntegrationResponse')
+
+-- | The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+createIntegrationResponse'_connectionType :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe ConnectionType)
+createIntegrationResponse'_connectionType = Lens.lens (\CreateIntegrationResponse'' {connectionType} -> connectionType) (\s@CreateIntegrationResponse'' {} a -> s {connectionType = a} :: CreateIntegrationResponse')
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+createIntegrationResponse'_contentHandlingStrategy :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe ContentHandlingStrategy)
+createIntegrationResponse'_contentHandlingStrategy = Lens.lens (\CreateIntegrationResponse'' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@CreateIntegrationResponse'' {} a -> s {contentHandlingStrategy = a} :: CreateIntegrationResponse')
+
+-- | Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+createIntegrationResponse'_credentialsArn :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_credentialsArn = Lens.lens (\CreateIntegrationResponse'' {credentialsArn} -> credentialsArn) (\s@CreateIntegrationResponse'' {} a -> s {credentialsArn = a} :: CreateIntegrationResponse')
+
+-- | Represents the description of an integration.
+createIntegrationResponse'_description :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_description = Lens.lens (\CreateIntegrationResponse'' {description} -> description) (\s@CreateIntegrationResponse'' {} a -> s {description = a} :: CreateIntegrationResponse')
+
+-- | Represents the identifier of an integration.
+createIntegrationResponse'_integrationId :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_integrationId = Lens.lens (\CreateIntegrationResponse'' {integrationId} -> integrationId) (\s@CreateIntegrationResponse'' {} a -> s {integrationId = a} :: CreateIntegrationResponse')
+
+-- | Specifies the integration\'s HTTP method type.
+createIntegrationResponse'_integrationMethod :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_integrationMethod = Lens.lens (\CreateIntegrationResponse'' {integrationMethod} -> integrationMethod) (\s@CreateIntegrationResponse'' {} a -> s {integrationMethod = a} :: CreateIntegrationResponse')
+
+-- | The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+createIntegrationResponse'_integrationResponseSelectionExpression :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_integrationResponseSelectionExpression = Lens.lens (\CreateIntegrationResponse'' {integrationResponseSelectionExpression} -> integrationResponseSelectionExpression) (\s@CreateIntegrationResponse'' {} a -> s {integrationResponseSelectionExpression = a} :: CreateIntegrationResponse')
+
+-- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+createIntegrationResponse'_integrationSubtype :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_integrationSubtype = Lens.lens (\CreateIntegrationResponse'' {integrationSubtype} -> integrationSubtype) (\s@CreateIntegrationResponse'' {} a -> s {integrationSubtype = a} :: CreateIntegrationResponse')
+
+-- | The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+createIntegrationResponse'_integrationType :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe IntegrationType)
+createIntegrationResponse'_integrationType = Lens.lens (\CreateIntegrationResponse'' {integrationType} -> integrationType) (\s@CreateIntegrationResponse'' {} a -> s {integrationType = a} :: CreateIntegrationResponse')
+
+-- | For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+createIntegrationResponse'_integrationUri :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_integrationUri = Lens.lens (\CreateIntegrationResponse'' {integrationUri} -> integrationUri) (\s@CreateIntegrationResponse'' {} a -> s {integrationUri = a} :: CreateIntegrationResponse')
+
+-- | Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+createIntegrationResponse'_passthroughBehavior :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe PassthroughBehavior)
+createIntegrationResponse'_passthroughBehavior = Lens.lens (\CreateIntegrationResponse'' {passthroughBehavior} -> passthroughBehavior) (\s@CreateIntegrationResponse'' {} a -> s {passthroughBehavior = a} :: CreateIntegrationResponse')
+
+-- | Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+createIntegrationResponse'_payloadFormatVersion :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_payloadFormatVersion = Lens.lens (\CreateIntegrationResponse'' {payloadFormatVersion} -> payloadFormatVersion) (\s@CreateIntegrationResponse'' {} a -> s {payloadFormatVersion = a} :: CreateIntegrationResponse')
+
+-- | For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+createIntegrationResponse'_requestParameters :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegrationResponse'_requestParameters = Lens.lens (\CreateIntegrationResponse'' {requestParameters} -> requestParameters) (\s@CreateIntegrationResponse'' {} a -> s {requestParameters = a} :: CreateIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+createIntegrationResponse'_requestTemplates :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegrationResponse'_requestTemplates = Lens.lens (\CreateIntegrationResponse'' {requestTemplates} -> requestTemplates) (\s@CreateIntegrationResponse'' {} a -> s {requestTemplates = a} :: CreateIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+createIntegrationResponse'_responseParameters :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+createIntegrationResponse'_responseParameters = Lens.lens (\CreateIntegrationResponse'' {responseParameters} -> responseParameters) (\s@CreateIntegrationResponse'' {} a -> s {responseParameters = a} :: CreateIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+createIntegrationResponse'_templateSelectionExpression :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+createIntegrationResponse'_templateSelectionExpression = Lens.lens (\CreateIntegrationResponse'' {templateSelectionExpression} -> templateSelectionExpression) (\s@CreateIntegrationResponse'' {} a -> s {templateSelectionExpression = a} :: CreateIntegrationResponse')
+
+-- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+createIntegrationResponse'_timeoutInMillis :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe Prelude.Natural)
+createIntegrationResponse'_timeoutInMillis = Lens.lens (\CreateIntegrationResponse'' {timeoutInMillis} -> timeoutInMillis) (\s@CreateIntegrationResponse'' {} a -> s {timeoutInMillis = a} :: CreateIntegrationResponse')
+
+-- | The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+createIntegrationResponse'_tlsConfig :: Lens.Lens' CreateIntegrationResponse' (Prelude.Maybe TlsConfig)
+createIntegrationResponse'_tlsConfig = Lens.lens (\CreateIntegrationResponse'' {tlsConfig} -> tlsConfig) (\s@CreateIntegrationResponse'' {} a -> s {tlsConfig = a} :: CreateIntegrationResponse')
+
+-- | The response's http status code.
+createIntegrationResponse'_httpStatus :: Lens.Lens' CreateIntegrationResponse' Prelude.Int
+createIntegrationResponse'_httpStatus = Lens.lens (\CreateIntegrationResponse'' {httpStatus} -> httpStatus) (\s@CreateIntegrationResponse'' {} a -> s {httpStatus = a} :: CreateIntegrationResponse')
+
+instance Prelude.NFData CreateIntegrationResponse' where
+  rnf CreateIntegrationResponse'' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf integrationId
+      `Prelude.seq` Prelude.rnf integrationMethod
+      `Prelude.seq` Prelude.rnf integrationResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf integrationSubtype
+      `Prelude.seq` Prelude.rnf integrationType
+      `Prelude.seq` Prelude.rnf integrationUri
+      `Prelude.seq` Prelude.rnf passthroughBehavior
+      `Prelude.seq` Prelude.rnf payloadFormatVersion
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf requestTemplates
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf
+        templateSelectionExpression
+      `Prelude.seq` Prelude.rnf timeoutInMillis
+      `Prelude.seq` Prelude.rnf tlsConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateIntegrationResponse.hs b/gen/Amazonka/ApiGatewayV2/CreateIntegrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateIntegrationResponse.hs
@@ -0,0 +1,494 @@
+{-# 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.ApiGatewayV2.CreateIntegrationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an IntegrationResponses.
+module Amazonka.ApiGatewayV2.CreateIntegrationResponse
+  ( -- * Creating a Request
+    CreateIntegrationResponse (..),
+    newCreateIntegrationResponse,
+
+    -- * Request Lenses
+    createIntegrationResponse_contentHandlingStrategy,
+    createIntegrationResponse_responseParameters,
+    createIntegrationResponse_responseTemplates,
+    createIntegrationResponse_templateSelectionExpression,
+    createIntegrationResponse_apiId,
+    createIntegrationResponse_integrationId,
+    createIntegrationResponse_integrationResponseKey,
+
+    -- * Destructuring the Response
+    CreateIntegrationResponseResponse (..),
+    newCreateIntegrationResponseResponse,
+
+    -- * Response Lenses
+    createIntegrationResponseResponse_contentHandlingStrategy,
+    createIntegrationResponseResponse_integrationResponseId,
+    createIntegrationResponseResponse_integrationResponseKey,
+    createIntegrationResponseResponse_responseParameters,
+    createIntegrationResponseResponse_responseTemplates,
+    createIntegrationResponseResponse_templateSelectionExpression,
+    createIntegrationResponseResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new IntegrationResponse resource to represent an integration
+-- response.
+--
+-- /See:/ 'newCreateIntegrationResponse' smart constructor.
+data CreateIntegrationResponse = CreateIntegrationResponse'
+  { -- | Specifies how to handle response payload content type conversions.
+    -- Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the
+    -- following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | A key-value map specifying response parameters that are passed to the
+    -- method response from the backend. The key is a method response header
+    -- parameter name and the mapped value is an integration response header
+    -- value, a static value enclosed within a pair of single quotes, or a JSON
+    -- expression from the integration response body. The mapping key must
+    -- match the pattern of method.response.header.{name}, where {name} is a
+    -- valid and unique header name. The mapped non-static value must match the
+    -- pattern of integration.response.header.{name} or
+    -- integration.response.body.{JSON-expression}, where {name} is a valid and
+    -- unique response header name and {JSON-expression} is a valid JSON
+    -- expression without the $ prefix.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of response templates for the integration response as a
+    -- string-to-string map of key-value pairs. Response templates are
+    -- represented as a key\/value map, with a content-type as the key and a
+    -- template as the value.
+    responseTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The template selection expression for the integration response.
+    -- Supported only for WebSocket APIs.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text,
+    -- | The integration response key.
+    integrationResponseKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentHandlingStrategy', 'createIntegrationResponse_contentHandlingStrategy' - Specifies how to handle response payload content type conversions.
+-- Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the
+-- following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'responseParameters', 'createIntegrationResponse_responseParameters' - A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where {name} is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where {name} is a valid and
+-- unique response header name and {JSON-expression} is a valid JSON
+-- expression without the $ prefix.
+--
+-- 'responseTemplates', 'createIntegrationResponse_responseTemplates' - The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+--
+-- 'templateSelectionExpression', 'createIntegrationResponse_templateSelectionExpression' - The template selection expression for the integration response.
+-- Supported only for WebSocket APIs.
+--
+-- 'apiId', 'createIntegrationResponse_apiId' - The API identifier.
+--
+-- 'integrationId', 'createIntegrationResponse_integrationId' - The integration ID.
+--
+-- 'integrationResponseKey', 'createIntegrationResponse_integrationResponseKey' - The integration response key.
+newCreateIntegrationResponse ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationId'
+  Prelude.Text ->
+  -- | 'integrationResponseKey'
+  Prelude.Text ->
+  CreateIntegrationResponse
+newCreateIntegrationResponse
+  pApiId_
+  pIntegrationId_
+  pIntegrationResponseKey_ =
+    CreateIntegrationResponse'
+      { contentHandlingStrategy =
+          Prelude.Nothing,
+        responseParameters = Prelude.Nothing,
+        responseTemplates = Prelude.Nothing,
+        templateSelectionExpression = Prelude.Nothing,
+        apiId = pApiId_,
+        integrationId = pIntegrationId_,
+        integrationResponseKey =
+          pIntegrationResponseKey_
+      }
+
+-- | Specifies how to handle response payload content type conversions.
+-- Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the
+-- following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+createIntegrationResponse_contentHandlingStrategy :: Lens.Lens' CreateIntegrationResponse (Prelude.Maybe ContentHandlingStrategy)
+createIntegrationResponse_contentHandlingStrategy = Lens.lens (\CreateIntegrationResponse' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@CreateIntegrationResponse' {} a -> s {contentHandlingStrategy = a} :: CreateIntegrationResponse)
+
+-- | A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where {name} is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where {name} is a valid and
+-- unique response header name and {JSON-expression} is a valid JSON
+-- expression without the $ prefix.
+createIntegrationResponse_responseParameters :: Lens.Lens' CreateIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegrationResponse_responseParameters = Lens.lens (\CreateIntegrationResponse' {responseParameters} -> responseParameters) (\s@CreateIntegrationResponse' {} a -> s {responseParameters = a} :: CreateIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+createIntegrationResponse_responseTemplates :: Lens.Lens' CreateIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegrationResponse_responseTemplates = Lens.lens (\CreateIntegrationResponse' {responseTemplates} -> responseTemplates) (\s@CreateIntegrationResponse' {} a -> s {responseTemplates = a} :: CreateIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration response.
+-- Supported only for WebSocket APIs.
+createIntegrationResponse_templateSelectionExpression :: Lens.Lens' CreateIntegrationResponse (Prelude.Maybe Prelude.Text)
+createIntegrationResponse_templateSelectionExpression = Lens.lens (\CreateIntegrationResponse' {templateSelectionExpression} -> templateSelectionExpression) (\s@CreateIntegrationResponse' {} a -> s {templateSelectionExpression = a} :: CreateIntegrationResponse)
+
+-- | The API identifier.
+createIntegrationResponse_apiId :: Lens.Lens' CreateIntegrationResponse Prelude.Text
+createIntegrationResponse_apiId = Lens.lens (\CreateIntegrationResponse' {apiId} -> apiId) (\s@CreateIntegrationResponse' {} a -> s {apiId = a} :: CreateIntegrationResponse)
+
+-- | The integration ID.
+createIntegrationResponse_integrationId :: Lens.Lens' CreateIntegrationResponse Prelude.Text
+createIntegrationResponse_integrationId = Lens.lens (\CreateIntegrationResponse' {integrationId} -> integrationId) (\s@CreateIntegrationResponse' {} a -> s {integrationId = a} :: CreateIntegrationResponse)
+
+-- | The integration response key.
+createIntegrationResponse_integrationResponseKey :: Lens.Lens' CreateIntegrationResponse Prelude.Text
+createIntegrationResponse_integrationResponseKey = Lens.lens (\CreateIntegrationResponse' {integrationResponseKey} -> integrationResponseKey) (\s@CreateIntegrationResponse' {} a -> s {integrationResponseKey = a} :: CreateIntegrationResponse)
+
+instance Core.AWSRequest CreateIntegrationResponse where
+  type
+    AWSResponse CreateIntegrationResponse =
+      CreateIntegrationResponseResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateIntegrationResponseResponse'
+            Prelude.<$> (x Data..?> "contentHandlingStrategy")
+            Prelude.<*> (x Data..?> "integrationResponseId")
+            Prelude.<*> (x Data..?> "integrationResponseKey")
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "responseTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "templateSelectionExpression")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIntegrationResponse where
+  hashWithSalt _salt CreateIntegrationResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentHandlingStrategy
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` responseTemplates
+      `Prelude.hashWithSalt` templateSelectionExpression
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationId
+      `Prelude.hashWithSalt` integrationResponseKey
+
+instance Prelude.NFData CreateIntegrationResponse where
+  rnf CreateIntegrationResponse' {..} =
+    Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf responseTemplates
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationId
+      `Prelude.seq` Prelude.rnf integrationResponseKey
+
+instance Data.ToHeaders CreateIntegrationResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateIntegrationResponse where
+  toJSON CreateIntegrationResponse' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("contentHandlingStrategy" Data..=)
+              Prelude.<$> contentHandlingStrategy,
+            ("responseParameters" Data..=)
+              Prelude.<$> responseParameters,
+            ("responseTemplates" Data..=)
+              Prelude.<$> responseTemplates,
+            ("templateSelectionExpression" Data..=)
+              Prelude.<$> templateSelectionExpression,
+            Prelude.Just
+              ( "integrationResponseKey"
+                  Data..= integrationResponseKey
+              )
+          ]
+      )
+
+instance Data.ToPath CreateIntegrationResponse where
+  toPath CreateIntegrationResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId,
+        "/integrationresponses"
+      ]
+
+instance Data.ToQuery CreateIntegrationResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateIntegrationResponseResponse' smart constructor.
+data CreateIntegrationResponseResponse = CreateIntegrationResponseResponse'
+  { -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | The integration response ID.
+    integrationResponseId :: Prelude.Maybe Prelude.Text,
+    -- | The integration response key.
+    integrationResponseKey :: Prelude.Maybe Prelude.Text,
+    -- | A key-value map specifying response parameters that are passed to the
+    -- method response from the backend. The key is a method response header
+    -- parameter name and the mapped value is an integration response header
+    -- value, a static value enclosed within a pair of single quotes, or a JSON
+    -- expression from the integration response body. The mapping key must
+    -- match the pattern of method.response.header.{name}, where name is a
+    -- valid and unique header name. The mapped non-static value must match the
+    -- pattern of integration.response.header.{name} or
+    -- integration.response.body.{JSON-expression}, where name is a valid and
+    -- unique response header name and JSON-expression is a valid JSON
+    -- expression without the $ prefix.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of response templates for the integration response as a
+    -- string-to-string map of key-value pairs. Response templates are
+    -- represented as a key\/value map, with a content-type as the key and a
+    -- template as the value.
+    responseTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The template selection expressions for the integration response.
+    templateSelectionExpression :: 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 'CreateIntegrationResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentHandlingStrategy', 'createIntegrationResponseResponse_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'integrationResponseId', 'createIntegrationResponseResponse_integrationResponseId' - The integration response ID.
+--
+-- 'integrationResponseKey', 'createIntegrationResponseResponse_integrationResponseKey' - The integration response key.
+--
+-- 'responseParameters', 'createIntegrationResponseResponse_responseParameters' - A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+--
+-- 'responseTemplates', 'createIntegrationResponseResponse_responseTemplates' - The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+--
+-- 'templateSelectionExpression', 'createIntegrationResponseResponse_templateSelectionExpression' - The template selection expressions for the integration response.
+--
+-- 'httpStatus', 'createIntegrationResponseResponse_httpStatus' - The response's http status code.
+newCreateIntegrationResponseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIntegrationResponseResponse
+newCreateIntegrationResponseResponse pHttpStatus_ =
+  CreateIntegrationResponseResponse'
+    { contentHandlingStrategy =
+        Prelude.Nothing,
+      integrationResponseId = Prelude.Nothing,
+      integrationResponseKey = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      responseTemplates = Prelude.Nothing,
+      templateSelectionExpression =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+createIntegrationResponseResponse_contentHandlingStrategy :: Lens.Lens' CreateIntegrationResponseResponse (Prelude.Maybe ContentHandlingStrategy)
+createIntegrationResponseResponse_contentHandlingStrategy = Lens.lens (\CreateIntegrationResponseResponse' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@CreateIntegrationResponseResponse' {} a -> s {contentHandlingStrategy = a} :: CreateIntegrationResponseResponse)
+
+-- | The integration response ID.
+createIntegrationResponseResponse_integrationResponseId :: Lens.Lens' CreateIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+createIntegrationResponseResponse_integrationResponseId = Lens.lens (\CreateIntegrationResponseResponse' {integrationResponseId} -> integrationResponseId) (\s@CreateIntegrationResponseResponse' {} a -> s {integrationResponseId = a} :: CreateIntegrationResponseResponse)
+
+-- | The integration response key.
+createIntegrationResponseResponse_integrationResponseKey :: Lens.Lens' CreateIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+createIntegrationResponseResponse_integrationResponseKey = Lens.lens (\CreateIntegrationResponseResponse' {integrationResponseKey} -> integrationResponseKey) (\s@CreateIntegrationResponseResponse' {} a -> s {integrationResponseKey = a} :: CreateIntegrationResponseResponse)
+
+-- | A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+createIntegrationResponseResponse_responseParameters :: Lens.Lens' CreateIntegrationResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegrationResponseResponse_responseParameters = Lens.lens (\CreateIntegrationResponseResponse' {responseParameters} -> responseParameters) (\s@CreateIntegrationResponseResponse' {} a -> s {responseParameters = a} :: CreateIntegrationResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+createIntegrationResponseResponse_responseTemplates :: Lens.Lens' CreateIntegrationResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createIntegrationResponseResponse_responseTemplates = Lens.lens (\CreateIntegrationResponseResponse' {responseTemplates} -> responseTemplates) (\s@CreateIntegrationResponseResponse' {} a -> s {responseTemplates = a} :: CreateIntegrationResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expressions for the integration response.
+createIntegrationResponseResponse_templateSelectionExpression :: Lens.Lens' CreateIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+createIntegrationResponseResponse_templateSelectionExpression = Lens.lens (\CreateIntegrationResponseResponse' {templateSelectionExpression} -> templateSelectionExpression) (\s@CreateIntegrationResponseResponse' {} a -> s {templateSelectionExpression = a} :: CreateIntegrationResponseResponse)
+
+-- | The response's http status code.
+createIntegrationResponseResponse_httpStatus :: Lens.Lens' CreateIntegrationResponseResponse Prelude.Int
+createIntegrationResponseResponse_httpStatus = Lens.lens (\CreateIntegrationResponseResponse' {httpStatus} -> httpStatus) (\s@CreateIntegrationResponseResponse' {} a -> s {httpStatus = a} :: CreateIntegrationResponseResponse)
+
+instance
+  Prelude.NFData
+    CreateIntegrationResponseResponse
+  where
+  rnf CreateIntegrationResponseResponse' {..} =
+    Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf integrationResponseId
+      `Prelude.seq` Prelude.rnf integrationResponseKey
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf responseTemplates
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateModel.hs b/gen/Amazonka/ApiGatewayV2/CreateModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateModel.hs
@@ -0,0 +1,279 @@
+{-# 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.ApiGatewayV2.CreateModel
+-- 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 Model for an API.
+module Amazonka.ApiGatewayV2.CreateModel
+  ( -- * Creating a Request
+    CreateModel (..),
+    newCreateModel,
+
+    -- * Request Lenses
+    createModel_contentType,
+    createModel_description,
+    createModel_apiId,
+    createModel_schema,
+    createModel_name,
+
+    -- * Destructuring the Response
+    CreateModelResponse (..),
+    newCreateModelResponse,
+
+    -- * Response Lenses
+    createModelResponse_contentType,
+    createModelResponse_description,
+    createModelResponse_modelId,
+    createModelResponse_name,
+    createModelResponse_schema,
+    createModelResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Model.
+--
+-- /See:/ 'newCreateModel' smart constructor.
+data CreateModel = CreateModel'
+  { -- | The content-type for the model, for example, \"application\/json\".
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The description of the model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The schema for the model. For application\/json models, this should be
+    -- JSON schema draft 4 model.
+    schema :: Prelude.Text,
+    -- | The name of the model. Must be alphanumeric.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'createModel_contentType' - The content-type for the model, for example, \"application\/json\".
+--
+-- 'description', 'createModel_description' - The description of the model.
+--
+-- 'apiId', 'createModel_apiId' - The API identifier.
+--
+-- 'schema', 'createModel_schema' - The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+--
+-- 'name', 'createModel_name' - The name of the model. Must be alphanumeric.
+newCreateModel ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'schema'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateModel
+newCreateModel pApiId_ pSchema_ pName_ =
+  CreateModel'
+    { contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      apiId = pApiId_,
+      schema = pSchema_,
+      name = pName_
+    }
+
+-- | The content-type for the model, for example, \"application\/json\".
+createModel_contentType :: Lens.Lens' CreateModel (Prelude.Maybe Prelude.Text)
+createModel_contentType = Lens.lens (\CreateModel' {contentType} -> contentType) (\s@CreateModel' {} a -> s {contentType = a} :: CreateModel)
+
+-- | The description of the model.
+createModel_description :: Lens.Lens' CreateModel (Prelude.Maybe Prelude.Text)
+createModel_description = Lens.lens (\CreateModel' {description} -> description) (\s@CreateModel' {} a -> s {description = a} :: CreateModel)
+
+-- | The API identifier.
+createModel_apiId :: Lens.Lens' CreateModel Prelude.Text
+createModel_apiId = Lens.lens (\CreateModel' {apiId} -> apiId) (\s@CreateModel' {} a -> s {apiId = a} :: CreateModel)
+
+-- | The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+createModel_schema :: Lens.Lens' CreateModel Prelude.Text
+createModel_schema = Lens.lens (\CreateModel' {schema} -> schema) (\s@CreateModel' {} a -> s {schema = a} :: CreateModel)
+
+-- | The name of the model. Must be alphanumeric.
+createModel_name :: Lens.Lens' CreateModel Prelude.Text
+createModel_name = Lens.lens (\CreateModel' {name} -> name) (\s@CreateModel' {} a -> s {name = a} :: CreateModel)
+
+instance Core.AWSRequest CreateModel where
+  type AWSResponse CreateModel = CreateModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateModelResponse'
+            Prelude.<$> (x Data..?> "contentType")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "modelId")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "schema")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateModel where
+  hashWithSalt _salt CreateModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` schema
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateModel where
+  rnf CreateModel' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateModel where
+  toJSON CreateModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("contentType" Data..=) Prelude.<$> contentType,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("schema" Data..= schema),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateModel where
+  toPath CreateModel' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/models"]
+
+instance Data.ToQuery CreateModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateModelResponse' smart constructor.
+data CreateModelResponse = CreateModelResponse'
+  { -- | The content-type for the model, for example, \"application\/json\".
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The description of the model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The model identifier.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the model. Must be alphanumeric.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The schema for the model. For application\/json models, this should be
+    -- JSON schema draft 4 model.
+    schema :: 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 'CreateModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'createModelResponse_contentType' - The content-type for the model, for example, \"application\/json\".
+--
+-- 'description', 'createModelResponse_description' - The description of the model.
+--
+-- 'modelId', 'createModelResponse_modelId' - The model identifier.
+--
+-- 'name', 'createModelResponse_name' - The name of the model. Must be alphanumeric.
+--
+-- 'schema', 'createModelResponse_schema' - The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+--
+-- 'httpStatus', 'createModelResponse_httpStatus' - The response's http status code.
+newCreateModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateModelResponse
+newCreateModelResponse pHttpStatus_ =
+  CreateModelResponse'
+    { contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The content-type for the model, for example, \"application\/json\".
+createModelResponse_contentType :: Lens.Lens' CreateModelResponse (Prelude.Maybe Prelude.Text)
+createModelResponse_contentType = Lens.lens (\CreateModelResponse' {contentType} -> contentType) (\s@CreateModelResponse' {} a -> s {contentType = a} :: CreateModelResponse)
+
+-- | The description of the model.
+createModelResponse_description :: Lens.Lens' CreateModelResponse (Prelude.Maybe Prelude.Text)
+createModelResponse_description = Lens.lens (\CreateModelResponse' {description} -> description) (\s@CreateModelResponse' {} a -> s {description = a} :: CreateModelResponse)
+
+-- | The model identifier.
+createModelResponse_modelId :: Lens.Lens' CreateModelResponse (Prelude.Maybe Prelude.Text)
+createModelResponse_modelId = Lens.lens (\CreateModelResponse' {modelId} -> modelId) (\s@CreateModelResponse' {} a -> s {modelId = a} :: CreateModelResponse)
+
+-- | The name of the model. Must be alphanumeric.
+createModelResponse_name :: Lens.Lens' CreateModelResponse (Prelude.Maybe Prelude.Text)
+createModelResponse_name = Lens.lens (\CreateModelResponse' {name} -> name) (\s@CreateModelResponse' {} a -> s {name = a} :: CreateModelResponse)
+
+-- | The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+createModelResponse_schema :: Lens.Lens' CreateModelResponse (Prelude.Maybe Prelude.Text)
+createModelResponse_schema = Lens.lens (\CreateModelResponse' {schema} -> schema) (\s@CreateModelResponse' {} a -> s {schema = a} :: CreateModelResponse)
+
+-- | The response's http status code.
+createModelResponse_httpStatus :: Lens.Lens' CreateModelResponse Prelude.Int
+createModelResponse_httpStatus = Lens.lens (\CreateModelResponse' {httpStatus} -> httpStatus) (\s@CreateModelResponse' {} a -> s {httpStatus = a} :: CreateModelResponse)
+
+instance Prelude.NFData CreateModelResponse where
+  rnf CreateModelResponse' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateRoute.hs b/gen/Amazonka/ApiGatewayV2/CreateRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateRoute.hs
@@ -0,0 +1,552 @@
+{-# 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.ApiGatewayV2.CreateRoute
+-- 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 Route for an API.
+module Amazonka.ApiGatewayV2.CreateRoute
+  ( -- * Creating a Request
+    CreateRoute (..),
+    newCreateRoute,
+
+    -- * Request Lenses
+    createRoute_apiKeyRequired,
+    createRoute_authorizationScopes,
+    createRoute_authorizationType,
+    createRoute_authorizerId,
+    createRoute_modelSelectionExpression,
+    createRoute_operationName,
+    createRoute_requestModels,
+    createRoute_requestParameters,
+    createRoute_routeResponseSelectionExpression,
+    createRoute_target,
+    createRoute_apiId,
+    createRoute_routeKey,
+
+    -- * Destructuring the Response
+    CreateRouteResponse' (..),
+    newCreateRouteResponse',
+
+    -- * Response Lenses
+    createRouteResponse'_apiGatewayManaged,
+    createRouteResponse'_apiKeyRequired,
+    createRouteResponse'_authorizationScopes,
+    createRouteResponse'_authorizationType,
+    createRouteResponse'_authorizerId,
+    createRouteResponse'_modelSelectionExpression,
+    createRouteResponse'_operationName,
+    createRouteResponse'_requestModels,
+    createRouteResponse'_requestParameters,
+    createRouteResponse'_routeId,
+    createRouteResponse'_routeKey,
+    createRouteResponse'_routeResponseSelectionExpression,
+    createRouteResponse'_target,
+    createRouteResponse'_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Route resource to represent a route.
+--
+-- /See:/ 'newCreateRoute' smart constructor.
+data CreateRoute = CreateRoute'
+  { -- | Specifies whether an API key is required for the route. Supported only
+    -- for WebSocket APIs.
+    apiKeyRequired :: Prelude.Maybe Prelude.Bool,
+    -- | The authorization scopes supported by this route.
+    authorizationScopes :: Prelude.Maybe [Prelude.Text],
+    -- | The authorization type for the route. For WebSocket APIs, valid values
+    -- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+    -- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+    -- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+    -- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+    authorizationType :: Prelude.Maybe AuthorizationType,
+    -- | The identifier of the Authorizer resource to be associated with this
+    -- route. The authorizer identifier is generated by API Gateway when you
+    -- created the authorizer.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | The model selection expression for the route. Supported only for
+    -- WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The operation name for the route.
+    operationName :: Prelude.Maybe Prelude.Text,
+    -- | The request models for the route. Supported only for WebSocket APIs.
+    requestModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The request parameters for the route. Supported only for WebSocket APIs.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The route response selection expression for the route. Supported only
+    -- for WebSocket APIs.
+    routeResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The target for the route.
+    target :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route key for the route.
+    routeKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiKeyRequired', 'createRoute_apiKeyRequired' - Specifies whether an API key is required for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'authorizationScopes', 'createRoute_authorizationScopes' - The authorization scopes supported by this route.
+--
+-- 'authorizationType', 'createRoute_authorizationType' - The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+--
+-- 'authorizerId', 'createRoute_authorizerId' - The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+--
+-- 'modelSelectionExpression', 'createRoute_modelSelectionExpression' - The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+--
+-- 'operationName', 'createRoute_operationName' - The operation name for the route.
+--
+-- 'requestModels', 'createRoute_requestModels' - The request models for the route. Supported only for WebSocket APIs.
+--
+-- 'requestParameters', 'createRoute_requestParameters' - The request parameters for the route. Supported only for WebSocket APIs.
+--
+-- 'routeResponseSelectionExpression', 'createRoute_routeResponseSelectionExpression' - The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'target', 'createRoute_target' - The target for the route.
+--
+-- 'apiId', 'createRoute_apiId' - The API identifier.
+--
+-- 'routeKey', 'createRoute_routeKey' - The route key for the route.
+newCreateRoute ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeKey'
+  Prelude.Text ->
+  CreateRoute
+newCreateRoute pApiId_ pRouteKey_ =
+  CreateRoute'
+    { apiKeyRequired = Prelude.Nothing,
+      authorizationScopes = Prelude.Nothing,
+      authorizationType = Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      modelSelectionExpression = Prelude.Nothing,
+      operationName = Prelude.Nothing,
+      requestModels = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      routeResponseSelectionExpression = Prelude.Nothing,
+      target = Prelude.Nothing,
+      apiId = pApiId_,
+      routeKey = pRouteKey_
+    }
+
+-- | Specifies whether an API key is required for the route. Supported only
+-- for WebSocket APIs.
+createRoute_apiKeyRequired :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Bool)
+createRoute_apiKeyRequired = Lens.lens (\CreateRoute' {apiKeyRequired} -> apiKeyRequired) (\s@CreateRoute' {} a -> s {apiKeyRequired = a} :: CreateRoute)
+
+-- | The authorization scopes supported by this route.
+createRoute_authorizationScopes :: Lens.Lens' CreateRoute (Prelude.Maybe [Prelude.Text])
+createRoute_authorizationScopes = Lens.lens (\CreateRoute' {authorizationScopes} -> authorizationScopes) (\s@CreateRoute' {} a -> s {authorizationScopes = a} :: CreateRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+createRoute_authorizationType :: Lens.Lens' CreateRoute (Prelude.Maybe AuthorizationType)
+createRoute_authorizationType = Lens.lens (\CreateRoute' {authorizationType} -> authorizationType) (\s@CreateRoute' {} a -> s {authorizationType = a} :: CreateRoute)
+
+-- | The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+createRoute_authorizerId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_authorizerId = Lens.lens (\CreateRoute' {authorizerId} -> authorizerId) (\s@CreateRoute' {} a -> s {authorizerId = a} :: CreateRoute)
+
+-- | The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+createRoute_modelSelectionExpression :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_modelSelectionExpression = Lens.lens (\CreateRoute' {modelSelectionExpression} -> modelSelectionExpression) (\s@CreateRoute' {} a -> s {modelSelectionExpression = a} :: CreateRoute)
+
+-- | The operation name for the route.
+createRoute_operationName :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_operationName = Lens.lens (\CreateRoute' {operationName} -> operationName) (\s@CreateRoute' {} a -> s {operationName = a} :: CreateRoute)
+
+-- | The request models for the route. Supported only for WebSocket APIs.
+createRoute_requestModels :: Lens.Lens' CreateRoute (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRoute_requestModels = Lens.lens (\CreateRoute' {requestModels} -> requestModels) (\s@CreateRoute' {} a -> s {requestModels = a} :: CreateRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The request parameters for the route. Supported only for WebSocket APIs.
+createRoute_requestParameters :: Lens.Lens' CreateRoute (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+createRoute_requestParameters = Lens.lens (\CreateRoute' {requestParameters} -> requestParameters) (\s@CreateRoute' {} a -> s {requestParameters = a} :: CreateRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+createRoute_routeResponseSelectionExpression :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_routeResponseSelectionExpression = Lens.lens (\CreateRoute' {routeResponseSelectionExpression} -> routeResponseSelectionExpression) (\s@CreateRoute' {} a -> s {routeResponseSelectionExpression = a} :: CreateRoute)
+
+-- | The target for the route.
+createRoute_target :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_target = Lens.lens (\CreateRoute' {target} -> target) (\s@CreateRoute' {} a -> s {target = a} :: CreateRoute)
+
+-- | The API identifier.
+createRoute_apiId :: Lens.Lens' CreateRoute Prelude.Text
+createRoute_apiId = Lens.lens (\CreateRoute' {apiId} -> apiId) (\s@CreateRoute' {} a -> s {apiId = a} :: CreateRoute)
+
+-- | The route key for the route.
+createRoute_routeKey :: Lens.Lens' CreateRoute Prelude.Text
+createRoute_routeKey = Lens.lens (\CreateRoute' {routeKey} -> routeKey) (\s@CreateRoute' {} a -> s {routeKey = a} :: CreateRoute)
+
+instance Core.AWSRequest CreateRoute where
+  type AWSResponse CreateRoute = CreateRouteResponse'
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRouteResponse''
+            Prelude.<$> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiKeyRequired")
+            Prelude.<*> ( x
+                            Data..?> "authorizationScopes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "authorizationType")
+            Prelude.<*> (x Data..?> "authorizerId")
+            Prelude.<*> (x Data..?> "modelSelectionExpression")
+            Prelude.<*> (x Data..?> "operationName")
+            Prelude.<*> (x Data..?> "requestModels" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "requestParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "routeId")
+            Prelude.<*> (x Data..?> "routeKey")
+            Prelude.<*> (x Data..?> "routeResponseSelectionExpression")
+            Prelude.<*> (x Data..?> "target")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRoute where
+  hashWithSalt _salt CreateRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiKeyRequired
+      `Prelude.hashWithSalt` authorizationScopes
+      `Prelude.hashWithSalt` authorizationType
+      `Prelude.hashWithSalt` authorizerId
+      `Prelude.hashWithSalt` modelSelectionExpression
+      `Prelude.hashWithSalt` operationName
+      `Prelude.hashWithSalt` requestModels
+      `Prelude.hashWithSalt` requestParameters
+      `Prelude.hashWithSalt` routeResponseSelectionExpression
+      `Prelude.hashWithSalt` target
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeKey
+
+instance Prelude.NFData CreateRoute where
+  rnf CreateRoute' {..} =
+    Prelude.rnf apiKeyRequired
+      `Prelude.seq` Prelude.rnf authorizationScopes
+      `Prelude.seq` Prelude.rnf authorizationType
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf operationName
+      `Prelude.seq` Prelude.rnf requestModels
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf routeResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf routeKey
+
+instance Data.ToHeaders CreateRoute where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRoute where
+  toJSON CreateRoute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("apiKeyRequired" Data..=)
+              Prelude.<$> apiKeyRequired,
+            ("authorizationScopes" Data..=)
+              Prelude.<$> authorizationScopes,
+            ("authorizationType" Data..=)
+              Prelude.<$> authorizationType,
+            ("authorizerId" Data..=) Prelude.<$> authorizerId,
+            ("modelSelectionExpression" Data..=)
+              Prelude.<$> modelSelectionExpression,
+            ("operationName" Data..=) Prelude.<$> operationName,
+            ("requestModels" Data..=) Prelude.<$> requestModels,
+            ("requestParameters" Data..=)
+              Prelude.<$> requestParameters,
+            ("routeResponseSelectionExpression" Data..=)
+              Prelude.<$> routeResponseSelectionExpression,
+            ("target" Data..=) Prelude.<$> target,
+            Prelude.Just ("routeKey" Data..= routeKey)
+          ]
+      )
+
+instance Data.ToPath CreateRoute where
+  toPath CreateRoute' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/routes"]
+
+instance Data.ToQuery CreateRoute where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRouteResponse'' smart constructor.
+data CreateRouteResponse' = CreateRouteResponse''
+  { -- | Specifies whether a route is managed by API Gateway. If you created an
+    -- API using quick create, the $default route is managed by API Gateway.
+    -- You can\'t modify the $default route key.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether an API key is required for this route. Supported only
+    -- for WebSocket APIs.
+    apiKeyRequired :: Prelude.Maybe Prelude.Bool,
+    -- | A list of authorization scopes configured on a route. The scopes are
+    -- used with a JWT authorizer to authorize the method invocation. The
+    -- authorization works by matching the route scopes against the scopes
+    -- parsed from the access token in the incoming request. The method
+    -- invocation is authorized if any route scope matches a claimed scope in
+    -- the access token. Otherwise, the invocation is not authorized. When the
+    -- route scope is configured, the client must provide an access token
+    -- instead of an identity token for authorization purposes.
+    authorizationScopes :: Prelude.Maybe [Prelude.Text],
+    -- | The authorization type for the route. For WebSocket APIs, valid values
+    -- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+    -- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+    -- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+    -- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+    authorizationType :: Prelude.Maybe AuthorizationType,
+    -- | The identifier of the Authorizer resource to be associated with this
+    -- route. The authorizer identifier is generated by API Gateway when you
+    -- created the authorizer.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | The model selection expression for the route. Supported only for
+    -- WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The operation name for the route.
+    operationName :: Prelude.Maybe Prelude.Text,
+    -- | The request models for the route. Supported only for WebSocket APIs.
+    requestModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The request parameters for the route. Supported only for WebSocket APIs.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The route ID.
+    routeId :: Prelude.Maybe Prelude.Text,
+    -- | The route key for the route.
+    routeKey :: Prelude.Maybe Prelude.Text,
+    -- | The route response selection expression for the route. Supported only
+    -- for WebSocket APIs.
+    routeResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The target for the route.
+    target :: 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 'CreateRouteResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'createRouteResponse'_apiGatewayManaged' - Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+--
+-- 'apiKeyRequired', 'createRouteResponse'_apiKeyRequired' - Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+--
+-- 'authorizationScopes', 'createRouteResponse'_authorizationScopes' - A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+--
+-- 'authorizationType', 'createRouteResponse'_authorizationType' - The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+--
+-- 'authorizerId', 'createRouteResponse'_authorizerId' - The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+--
+-- 'modelSelectionExpression', 'createRouteResponse'_modelSelectionExpression' - The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+--
+-- 'operationName', 'createRouteResponse'_operationName' - The operation name for the route.
+--
+-- 'requestModels', 'createRouteResponse'_requestModels' - The request models for the route. Supported only for WebSocket APIs.
+--
+-- 'requestParameters', 'createRouteResponse'_requestParameters' - The request parameters for the route. Supported only for WebSocket APIs.
+--
+-- 'routeId', 'createRouteResponse'_routeId' - The route ID.
+--
+-- 'routeKey', 'createRouteResponse'_routeKey' - The route key for the route.
+--
+-- 'routeResponseSelectionExpression', 'createRouteResponse'_routeResponseSelectionExpression' - The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'target', 'createRouteResponse'_target' - The target for the route.
+--
+-- 'httpStatus', 'createRouteResponse'_httpStatus' - The response's http status code.
+newCreateRouteResponse' ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRouteResponse'
+newCreateRouteResponse' pHttpStatus_ =
+  CreateRouteResponse''
+    { apiGatewayManaged =
+        Prelude.Nothing,
+      apiKeyRequired = Prelude.Nothing,
+      authorizationScopes = Prelude.Nothing,
+      authorizationType = Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      modelSelectionExpression = Prelude.Nothing,
+      operationName = Prelude.Nothing,
+      requestModels = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      routeId = Prelude.Nothing,
+      routeKey = Prelude.Nothing,
+      routeResponseSelectionExpression = Prelude.Nothing,
+      target = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+createRouteResponse'_apiGatewayManaged :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Bool)
+createRouteResponse'_apiGatewayManaged = Lens.lens (\CreateRouteResponse'' {apiGatewayManaged} -> apiGatewayManaged) (\s@CreateRouteResponse'' {} a -> s {apiGatewayManaged = a} :: CreateRouteResponse')
+
+-- | Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+createRouteResponse'_apiKeyRequired :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Bool)
+createRouteResponse'_apiKeyRequired = Lens.lens (\CreateRouteResponse'' {apiKeyRequired} -> apiKeyRequired) (\s@CreateRouteResponse'' {} a -> s {apiKeyRequired = a} :: CreateRouteResponse')
+
+-- | A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+createRouteResponse'_authorizationScopes :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe [Prelude.Text])
+createRouteResponse'_authorizationScopes = Lens.lens (\CreateRouteResponse'' {authorizationScopes} -> authorizationScopes) (\s@CreateRouteResponse'' {} a -> s {authorizationScopes = a} :: CreateRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+createRouteResponse'_authorizationType :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe AuthorizationType)
+createRouteResponse'_authorizationType = Lens.lens (\CreateRouteResponse'' {authorizationType} -> authorizationType) (\s@CreateRouteResponse'' {} a -> s {authorizationType = a} :: CreateRouteResponse')
+
+-- | The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+createRouteResponse'_authorizerId :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Text)
+createRouteResponse'_authorizerId = Lens.lens (\CreateRouteResponse'' {authorizerId} -> authorizerId) (\s@CreateRouteResponse'' {} a -> s {authorizerId = a} :: CreateRouteResponse')
+
+-- | The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+createRouteResponse'_modelSelectionExpression :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Text)
+createRouteResponse'_modelSelectionExpression = Lens.lens (\CreateRouteResponse'' {modelSelectionExpression} -> modelSelectionExpression) (\s@CreateRouteResponse'' {} a -> s {modelSelectionExpression = a} :: CreateRouteResponse')
+
+-- | The operation name for the route.
+createRouteResponse'_operationName :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Text)
+createRouteResponse'_operationName = Lens.lens (\CreateRouteResponse'' {operationName} -> operationName) (\s@CreateRouteResponse'' {} a -> s {operationName = a} :: CreateRouteResponse')
+
+-- | The request models for the route. Supported only for WebSocket APIs.
+createRouteResponse'_requestModels :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRouteResponse'_requestModels = Lens.lens (\CreateRouteResponse'' {requestModels} -> requestModels) (\s@CreateRouteResponse'' {} a -> s {requestModels = a} :: CreateRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The request parameters for the route. Supported only for WebSocket APIs.
+createRouteResponse'_requestParameters :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+createRouteResponse'_requestParameters = Lens.lens (\CreateRouteResponse'' {requestParameters} -> requestParameters) (\s@CreateRouteResponse'' {} a -> s {requestParameters = a} :: CreateRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The route ID.
+createRouteResponse'_routeId :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Text)
+createRouteResponse'_routeId = Lens.lens (\CreateRouteResponse'' {routeId} -> routeId) (\s@CreateRouteResponse'' {} a -> s {routeId = a} :: CreateRouteResponse')
+
+-- | The route key for the route.
+createRouteResponse'_routeKey :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Text)
+createRouteResponse'_routeKey = Lens.lens (\CreateRouteResponse'' {routeKey} -> routeKey) (\s@CreateRouteResponse'' {} a -> s {routeKey = a} :: CreateRouteResponse')
+
+-- | The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+createRouteResponse'_routeResponseSelectionExpression :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Text)
+createRouteResponse'_routeResponseSelectionExpression = Lens.lens (\CreateRouteResponse'' {routeResponseSelectionExpression} -> routeResponseSelectionExpression) (\s@CreateRouteResponse'' {} a -> s {routeResponseSelectionExpression = a} :: CreateRouteResponse')
+
+-- | The target for the route.
+createRouteResponse'_target :: Lens.Lens' CreateRouteResponse' (Prelude.Maybe Prelude.Text)
+createRouteResponse'_target = Lens.lens (\CreateRouteResponse'' {target} -> target) (\s@CreateRouteResponse'' {} a -> s {target = a} :: CreateRouteResponse')
+
+-- | The response's http status code.
+createRouteResponse'_httpStatus :: Lens.Lens' CreateRouteResponse' Prelude.Int
+createRouteResponse'_httpStatus = Lens.lens (\CreateRouteResponse'' {httpStatus} -> httpStatus) (\s@CreateRouteResponse'' {} a -> s {httpStatus = a} :: CreateRouteResponse')
+
+instance Prelude.NFData CreateRouteResponse' where
+  rnf CreateRouteResponse'' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiKeyRequired
+      `Prelude.seq` Prelude.rnf authorizationScopes
+      `Prelude.seq` Prelude.rnf authorizationType
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf operationName
+      `Prelude.seq` Prelude.rnf requestModels
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf routeId
+      `Prelude.seq` Prelude.rnf routeKey
+      `Prelude.seq` Prelude.rnf routeResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateRouteResponse.hs b/gen/Amazonka/ApiGatewayV2/CreateRouteResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateRouteResponse.hs
@@ -0,0 +1,310 @@
+{-# 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.ApiGatewayV2.CreateRouteResponse
+-- 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 RouteResponse for a Route.
+module Amazonka.ApiGatewayV2.CreateRouteResponse
+  ( -- * Creating a Request
+    CreateRouteResponse (..),
+    newCreateRouteResponse,
+
+    -- * Request Lenses
+    createRouteResponse_modelSelectionExpression,
+    createRouteResponse_responseModels,
+    createRouteResponse_responseParameters,
+    createRouteResponse_apiId,
+    createRouteResponse_routeId,
+    createRouteResponse_routeResponseKey,
+
+    -- * Destructuring the Response
+    CreateRouteResponseResponse (..),
+    newCreateRouteResponseResponse,
+
+    -- * Response Lenses
+    createRouteResponseResponse_modelSelectionExpression,
+    createRouteResponseResponse_responseModels,
+    createRouteResponseResponse_responseParameters,
+    createRouteResponseResponse_routeResponseId,
+    createRouteResponseResponse_routeResponseKey,
+    createRouteResponseResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new RouteResponse resource to represent a route response.
+--
+-- /See:/ 'newCreateRouteResponse' smart constructor.
+data CreateRouteResponse = CreateRouteResponse'
+  { -- | The model selection expression for the route response. Supported only
+    -- for WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The response models for the route response.
+    responseModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The route response parameters.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text,
+    -- | The route response key.
+    routeResponseKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelSelectionExpression', 'createRouteResponse_modelSelectionExpression' - The model selection expression for the route response. Supported only
+-- for WebSocket APIs.
+--
+-- 'responseModels', 'createRouteResponse_responseModels' - The response models for the route response.
+--
+-- 'responseParameters', 'createRouteResponse_responseParameters' - The route response parameters.
+--
+-- 'apiId', 'createRouteResponse_apiId' - The API identifier.
+--
+-- 'routeId', 'createRouteResponse_routeId' - The route ID.
+--
+-- 'routeResponseKey', 'createRouteResponse_routeResponseKey' - The route response key.
+newCreateRouteResponse ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  -- | 'routeResponseKey'
+  Prelude.Text ->
+  CreateRouteResponse
+newCreateRouteResponse
+  pApiId_
+  pRouteId_
+  pRouteResponseKey_ =
+    CreateRouteResponse'
+      { modelSelectionExpression =
+          Prelude.Nothing,
+        responseModels = Prelude.Nothing,
+        responseParameters = Prelude.Nothing,
+        apiId = pApiId_,
+        routeId = pRouteId_,
+        routeResponseKey = pRouteResponseKey_
+      }
+
+-- | The model selection expression for the route response. Supported only
+-- for WebSocket APIs.
+createRouteResponse_modelSelectionExpression :: Lens.Lens' CreateRouteResponse (Prelude.Maybe Prelude.Text)
+createRouteResponse_modelSelectionExpression = Lens.lens (\CreateRouteResponse' {modelSelectionExpression} -> modelSelectionExpression) (\s@CreateRouteResponse' {} a -> s {modelSelectionExpression = a} :: CreateRouteResponse)
+
+-- | The response models for the route response.
+createRouteResponse_responseModels :: Lens.Lens' CreateRouteResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRouteResponse_responseModels = Lens.lens (\CreateRouteResponse' {responseModels} -> responseModels) (\s@CreateRouteResponse' {} a -> s {responseModels = a} :: CreateRouteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route response parameters.
+createRouteResponse_responseParameters :: Lens.Lens' CreateRouteResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+createRouteResponse_responseParameters = Lens.lens (\CreateRouteResponse' {responseParameters} -> responseParameters) (\s@CreateRouteResponse' {} a -> s {responseParameters = a} :: CreateRouteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The API identifier.
+createRouteResponse_apiId :: Lens.Lens' CreateRouteResponse Prelude.Text
+createRouteResponse_apiId = Lens.lens (\CreateRouteResponse' {apiId} -> apiId) (\s@CreateRouteResponse' {} a -> s {apiId = a} :: CreateRouteResponse)
+
+-- | The route ID.
+createRouteResponse_routeId :: Lens.Lens' CreateRouteResponse Prelude.Text
+createRouteResponse_routeId = Lens.lens (\CreateRouteResponse' {routeId} -> routeId) (\s@CreateRouteResponse' {} a -> s {routeId = a} :: CreateRouteResponse)
+
+-- | The route response key.
+createRouteResponse_routeResponseKey :: Lens.Lens' CreateRouteResponse Prelude.Text
+createRouteResponse_routeResponseKey = Lens.lens (\CreateRouteResponse' {routeResponseKey} -> routeResponseKey) (\s@CreateRouteResponse' {} a -> s {routeResponseKey = a} :: CreateRouteResponse)
+
+instance Core.AWSRequest CreateRouteResponse where
+  type
+    AWSResponse CreateRouteResponse =
+      CreateRouteResponseResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRouteResponseResponse'
+            Prelude.<$> (x Data..?> "modelSelectionExpression")
+            Prelude.<*> (x Data..?> "responseModels" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "routeResponseId")
+            Prelude.<*> (x Data..?> "routeResponseKey")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRouteResponse where
+  hashWithSalt _salt CreateRouteResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelSelectionExpression
+      `Prelude.hashWithSalt` responseModels
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+      `Prelude.hashWithSalt` routeResponseKey
+
+instance Prelude.NFData CreateRouteResponse where
+  rnf CreateRouteResponse' {..} =
+    Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf responseModels
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf routeId
+      `Prelude.seq` Prelude.rnf routeResponseKey
+
+instance Data.ToHeaders CreateRouteResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRouteResponse where
+  toJSON CreateRouteResponse' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("modelSelectionExpression" Data..=)
+              Prelude.<$> modelSelectionExpression,
+            ("responseModels" Data..=)
+              Prelude.<$> responseModels,
+            ("responseParameters" Data..=)
+              Prelude.<$> responseParameters,
+            Prelude.Just
+              ("routeResponseKey" Data..= routeResponseKey)
+          ]
+      )
+
+instance Data.ToPath CreateRouteResponse where
+  toPath CreateRouteResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId,
+        "/routeresponses"
+      ]
+
+instance Data.ToQuery CreateRouteResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRouteResponseResponse' smart constructor.
+data CreateRouteResponseResponse = CreateRouteResponseResponse'
+  { -- | Represents the model selection expression of a route response. Supported
+    -- only for WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the response models of a route response.
+    responseModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents the response parameters of a route response.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | Represents the identifier of a route response.
+    routeResponseId :: Prelude.Maybe Prelude.Text,
+    -- | Represents the route response key of a route response.
+    routeResponseKey :: 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 'CreateRouteResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelSelectionExpression', 'createRouteResponseResponse_modelSelectionExpression' - Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+--
+-- 'responseModels', 'createRouteResponseResponse_responseModels' - Represents the response models of a route response.
+--
+-- 'responseParameters', 'createRouteResponseResponse_responseParameters' - Represents the response parameters of a route response.
+--
+-- 'routeResponseId', 'createRouteResponseResponse_routeResponseId' - Represents the identifier of a route response.
+--
+-- 'routeResponseKey', 'createRouteResponseResponse_routeResponseKey' - Represents the route response key of a route response.
+--
+-- 'httpStatus', 'createRouteResponseResponse_httpStatus' - The response's http status code.
+newCreateRouteResponseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRouteResponseResponse
+newCreateRouteResponseResponse pHttpStatus_ =
+  CreateRouteResponseResponse'
+    { modelSelectionExpression =
+        Prelude.Nothing,
+      responseModels = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      routeResponseId = Prelude.Nothing,
+      routeResponseKey = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+createRouteResponseResponse_modelSelectionExpression :: Lens.Lens' CreateRouteResponseResponse (Prelude.Maybe Prelude.Text)
+createRouteResponseResponse_modelSelectionExpression = Lens.lens (\CreateRouteResponseResponse' {modelSelectionExpression} -> modelSelectionExpression) (\s@CreateRouteResponseResponse' {} a -> s {modelSelectionExpression = a} :: CreateRouteResponseResponse)
+
+-- | Represents the response models of a route response.
+createRouteResponseResponse_responseModels :: Lens.Lens' CreateRouteResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRouteResponseResponse_responseModels = Lens.lens (\CreateRouteResponseResponse' {responseModels} -> responseModels) (\s@CreateRouteResponseResponse' {} a -> s {responseModels = a} :: CreateRouteResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the response parameters of a route response.
+createRouteResponseResponse_responseParameters :: Lens.Lens' CreateRouteResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+createRouteResponseResponse_responseParameters = Lens.lens (\CreateRouteResponseResponse' {responseParameters} -> responseParameters) (\s@CreateRouteResponseResponse' {} a -> s {responseParameters = a} :: CreateRouteResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the identifier of a route response.
+createRouteResponseResponse_routeResponseId :: Lens.Lens' CreateRouteResponseResponse (Prelude.Maybe Prelude.Text)
+createRouteResponseResponse_routeResponseId = Lens.lens (\CreateRouteResponseResponse' {routeResponseId} -> routeResponseId) (\s@CreateRouteResponseResponse' {} a -> s {routeResponseId = a} :: CreateRouteResponseResponse)
+
+-- | Represents the route response key of a route response.
+createRouteResponseResponse_routeResponseKey :: Lens.Lens' CreateRouteResponseResponse (Prelude.Maybe Prelude.Text)
+createRouteResponseResponse_routeResponseKey = Lens.lens (\CreateRouteResponseResponse' {routeResponseKey} -> routeResponseKey) (\s@CreateRouteResponseResponse' {} a -> s {routeResponseKey = a} :: CreateRouteResponseResponse)
+
+-- | The response's http status code.
+createRouteResponseResponse_httpStatus :: Lens.Lens' CreateRouteResponseResponse Prelude.Int
+createRouteResponseResponse_httpStatus = Lens.lens (\CreateRouteResponseResponse' {httpStatus} -> httpStatus) (\s@CreateRouteResponseResponse' {} a -> s {httpStatus = a} :: CreateRouteResponseResponse)
+
+instance Prelude.NFData CreateRouteResponseResponse where
+  rnf CreateRouteResponseResponse' {..} =
+    Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf responseModels
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf routeResponseId
+      `Prelude.seq` Prelude.rnf routeResponseKey
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateStage.hs b/gen/Amazonka/ApiGatewayV2/CreateStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateStage.hs
@@ -0,0 +1,504 @@
+{-# 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.ApiGatewayV2.CreateStage
+-- 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 Stage for an API.
+module Amazonka.ApiGatewayV2.CreateStage
+  ( -- * Creating a Request
+    CreateStage (..),
+    newCreateStage,
+
+    -- * Request Lenses
+    createStage_accessLogSettings,
+    createStage_autoDeploy,
+    createStage_clientCertificateId,
+    createStage_defaultRouteSettings,
+    createStage_deploymentId,
+    createStage_description,
+    createStage_routeSettings,
+    createStage_stageVariables,
+    createStage_tags,
+    createStage_apiId,
+    createStage_stageName,
+
+    -- * Destructuring the Response
+    CreateStageResponse (..),
+    newCreateStageResponse,
+
+    -- * Response Lenses
+    createStageResponse_accessLogSettings,
+    createStageResponse_apiGatewayManaged,
+    createStageResponse_autoDeploy,
+    createStageResponse_clientCertificateId,
+    createStageResponse_createdDate,
+    createStageResponse_defaultRouteSettings,
+    createStageResponse_deploymentId,
+    createStageResponse_description,
+    createStageResponse_lastDeploymentStatusMessage,
+    createStageResponse_lastUpdatedDate,
+    createStageResponse_routeSettings,
+    createStageResponse_stageName,
+    createStageResponse_stageVariables,
+    createStageResponse_tags,
+    createStageResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Stage resource to represent a stage.
+--
+-- /See:/ 'newCreateStage' smart constructor.
+data CreateStage = CreateStage'
+  { -- | Settings for logging access in this stage.
+    accessLogSettings :: Prelude.Maybe AccessLogSettings,
+    -- | Specifies whether updates to an API automatically trigger a new
+    -- deployment. The default value is false.
+    autoDeploy :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of a client certificate for a Stage. Supported only for
+    -- WebSocket APIs.
+    clientCertificateId :: Prelude.Maybe Prelude.Text,
+    -- | The default route settings for the stage.
+    defaultRouteSettings :: Prelude.Maybe RouteSettings,
+    -- | The deployment identifier of the API stage.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The description for the API stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Route settings for the stage, by routeKey.
+    routeSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings),
+    -- | A map that defines the stage variables for a Stage. Variable names can
+    -- have alphanumeric and underscore characters, and the values must match
+    -- [A-Za-z0-9-._~:\/?#&=,]+.
+    stageVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of tags. Each tag element is associated with a given
+    -- resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The name of the stage.
+    stageName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessLogSettings', 'createStage_accessLogSettings' - Settings for logging access in this stage.
+--
+-- 'autoDeploy', 'createStage_autoDeploy' - Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+--
+-- 'clientCertificateId', 'createStage_clientCertificateId' - The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+--
+-- 'defaultRouteSettings', 'createStage_defaultRouteSettings' - The default route settings for the stage.
+--
+-- 'deploymentId', 'createStage_deploymentId' - The deployment identifier of the API stage.
+--
+-- 'description', 'createStage_description' - The description for the API stage.
+--
+-- 'routeSettings', 'createStage_routeSettings' - Route settings for the stage, by routeKey.
+--
+-- 'stageVariables', 'createStage_stageVariables' - A map that defines the stage variables for a Stage. Variable names can
+-- have alphanumeric and underscore characters, and the values must match
+-- [A-Za-z0-9-._~:\/?#&=,]+.
+--
+-- 'tags', 'createStage_tags' - The collection of tags. Each tag element is associated with a given
+-- resource.
+--
+-- 'apiId', 'createStage_apiId' - The API identifier.
+--
+-- 'stageName', 'createStage_stageName' - The name of the stage.
+newCreateStage ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  CreateStage
+newCreateStage pApiId_ pStageName_ =
+  CreateStage'
+    { accessLogSettings = Prelude.Nothing,
+      autoDeploy = Prelude.Nothing,
+      clientCertificateId = Prelude.Nothing,
+      defaultRouteSettings = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      routeSettings = Prelude.Nothing,
+      stageVariables = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      apiId = pApiId_,
+      stageName = pStageName_
+    }
+
+-- | Settings for logging access in this stage.
+createStage_accessLogSettings :: Lens.Lens' CreateStage (Prelude.Maybe AccessLogSettings)
+createStage_accessLogSettings = Lens.lens (\CreateStage' {accessLogSettings} -> accessLogSettings) (\s@CreateStage' {} a -> s {accessLogSettings = a} :: CreateStage)
+
+-- | Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+createStage_autoDeploy :: Lens.Lens' CreateStage (Prelude.Maybe Prelude.Bool)
+createStage_autoDeploy = Lens.lens (\CreateStage' {autoDeploy} -> autoDeploy) (\s@CreateStage' {} a -> s {autoDeploy = a} :: CreateStage)
+
+-- | The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+createStage_clientCertificateId :: Lens.Lens' CreateStage (Prelude.Maybe Prelude.Text)
+createStage_clientCertificateId = Lens.lens (\CreateStage' {clientCertificateId} -> clientCertificateId) (\s@CreateStage' {} a -> s {clientCertificateId = a} :: CreateStage)
+
+-- | The default route settings for the stage.
+createStage_defaultRouteSettings :: Lens.Lens' CreateStage (Prelude.Maybe RouteSettings)
+createStage_defaultRouteSettings = Lens.lens (\CreateStage' {defaultRouteSettings} -> defaultRouteSettings) (\s@CreateStage' {} a -> s {defaultRouteSettings = a} :: CreateStage)
+
+-- | The deployment identifier of the API stage.
+createStage_deploymentId :: Lens.Lens' CreateStage (Prelude.Maybe Prelude.Text)
+createStage_deploymentId = Lens.lens (\CreateStage' {deploymentId} -> deploymentId) (\s@CreateStage' {} a -> s {deploymentId = a} :: CreateStage)
+
+-- | The description for the API stage.
+createStage_description :: Lens.Lens' CreateStage (Prelude.Maybe Prelude.Text)
+createStage_description = Lens.lens (\CreateStage' {description} -> description) (\s@CreateStage' {} a -> s {description = a} :: CreateStage)
+
+-- | Route settings for the stage, by routeKey.
+createStage_routeSettings :: Lens.Lens' CreateStage (Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings))
+createStage_routeSettings = Lens.lens (\CreateStage' {routeSettings} -> routeSettings) (\s@CreateStage' {} a -> s {routeSettings = a} :: CreateStage) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that defines the stage variables for a Stage. Variable names can
+-- have alphanumeric and underscore characters, and the values must match
+-- [A-Za-z0-9-._~:\/?#&=,]+.
+createStage_stageVariables :: Lens.Lens' CreateStage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStage_stageVariables = Lens.lens (\CreateStage' {stageVariables} -> stageVariables) (\s@CreateStage' {} a -> s {stageVariables = a} :: CreateStage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of tags. Each tag element is associated with a given
+-- resource.
+createStage_tags :: Lens.Lens' CreateStage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStage_tags = Lens.lens (\CreateStage' {tags} -> tags) (\s@CreateStage' {} a -> s {tags = a} :: CreateStage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The API identifier.
+createStage_apiId :: Lens.Lens' CreateStage Prelude.Text
+createStage_apiId = Lens.lens (\CreateStage' {apiId} -> apiId) (\s@CreateStage' {} a -> s {apiId = a} :: CreateStage)
+
+-- | The name of the stage.
+createStage_stageName :: Lens.Lens' CreateStage Prelude.Text
+createStage_stageName = Lens.lens (\CreateStage' {stageName} -> stageName) (\s@CreateStage' {} a -> s {stageName = a} :: CreateStage)
+
+instance Core.AWSRequest CreateStage where
+  type AWSResponse CreateStage = CreateStageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStageResponse'
+            Prelude.<$> (x Data..?> "accessLogSettings")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "autoDeploy")
+            Prelude.<*> (x Data..?> "clientCertificateId")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "defaultRouteSettings")
+            Prelude.<*> (x Data..?> "deploymentId")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "lastDeploymentStatusMessage")
+            Prelude.<*> (x Data..?> "lastUpdatedDate")
+            Prelude.<*> (x Data..?> "routeSettings" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "stageName")
+            Prelude.<*> (x Data..?> "stageVariables" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStage where
+  hashWithSalt _salt CreateStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessLogSettings
+      `Prelude.hashWithSalt` autoDeploy
+      `Prelude.hashWithSalt` clientCertificateId
+      `Prelude.hashWithSalt` defaultRouteSettings
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` routeSettings
+      `Prelude.hashWithSalt` stageVariables
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData CreateStage where
+  rnf CreateStage' {..} =
+    Prelude.rnf accessLogSettings
+      `Prelude.seq` Prelude.rnf autoDeploy
+      `Prelude.seq` Prelude.rnf clientCertificateId
+      `Prelude.seq` Prelude.rnf defaultRouteSettings
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf routeSettings
+      `Prelude.seq` Prelude.rnf stageVariables
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf stageName
+
+instance Data.ToHeaders CreateStage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateStage where
+  toJSON CreateStage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("accessLogSettings" Data..=)
+              Prelude.<$> accessLogSettings,
+            ("autoDeploy" Data..=) Prelude.<$> autoDeploy,
+            ("clientCertificateId" Data..=)
+              Prelude.<$> clientCertificateId,
+            ("defaultRouteSettings" Data..=)
+              Prelude.<$> defaultRouteSettings,
+            ("deploymentId" Data..=) Prelude.<$> deploymentId,
+            ("description" Data..=) Prelude.<$> description,
+            ("routeSettings" Data..=) Prelude.<$> routeSettings,
+            ("stageVariables" Data..=)
+              Prelude.<$> stageVariables,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("stageName" Data..= stageName)
+          ]
+      )
+
+instance Data.ToPath CreateStage where
+  toPath CreateStage' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/stages"]
+
+instance Data.ToQuery CreateStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStageResponse' smart constructor.
+data CreateStageResponse = CreateStageResponse'
+  { -- | Settings for logging access in this stage.
+    accessLogSettings :: Prelude.Maybe AccessLogSettings,
+    -- | Specifies whether a stage is managed by API Gateway. If you created an
+    -- API using quick create, the $default stage is managed by API Gateway.
+    -- You can\'t modify the $default stage.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether updates to an API automatically trigger a new
+    -- deployment. The default value is false.
+    autoDeploy :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of a client certificate for a Stage. Supported only for
+    -- WebSocket APIs.
+    clientCertificateId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | Default route settings for the stage.
+    defaultRouteSettings :: Prelude.Maybe RouteSettings,
+    -- | The identifier of the Deployment that the Stage is associated with.
+    -- Can\'t be updated if autoDeploy is enabled.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Describes the status of the last deployment of a stage. Supported only
+    -- for stages with autoDeploy enabled.
+    lastDeploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was last updated.
+    lastUpdatedDate :: Prelude.Maybe Data.ISO8601,
+    -- | Route settings for the stage, by routeKey.
+    routeSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings),
+    -- | The name of the stage.
+    stageName :: Prelude.Maybe Prelude.Text,
+    -- | A map that defines the stage variables for a stage resource. Variable
+    -- names can have alphanumeric and underscore characters, and the values
+    -- must match [A-Za-z0-9-._~:\/?#&=,]+.
+    stageVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of tags. Each tag element is associated with a given
+    -- resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessLogSettings', 'createStageResponse_accessLogSettings' - Settings for logging access in this stage.
+--
+-- 'apiGatewayManaged', 'createStageResponse_apiGatewayManaged' - Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+--
+-- 'autoDeploy', 'createStageResponse_autoDeploy' - Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+--
+-- 'clientCertificateId', 'createStageResponse_clientCertificateId' - The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+--
+-- 'createdDate', 'createStageResponse_createdDate' - The timestamp when the stage was created.
+--
+-- 'defaultRouteSettings', 'createStageResponse_defaultRouteSettings' - Default route settings for the stage.
+--
+-- 'deploymentId', 'createStageResponse_deploymentId' - The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+--
+-- 'description', 'createStageResponse_description' - The description of the stage.
+--
+-- 'lastDeploymentStatusMessage', 'createStageResponse_lastDeploymentStatusMessage' - Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+--
+-- 'lastUpdatedDate', 'createStageResponse_lastUpdatedDate' - The timestamp when the stage was last updated.
+--
+-- 'routeSettings', 'createStageResponse_routeSettings' - Route settings for the stage, by routeKey.
+--
+-- 'stageName', 'createStageResponse_stageName' - The name of the stage.
+--
+-- 'stageVariables', 'createStageResponse_stageVariables' - A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+--
+-- 'tags', 'createStageResponse_tags' - The collection of tags. Each tag element is associated with a given
+-- resource.
+--
+-- 'httpStatus', 'createStageResponse_httpStatus' - The response's http status code.
+newCreateStageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStageResponse
+newCreateStageResponse pHttpStatus_ =
+  CreateStageResponse'
+    { accessLogSettings =
+        Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      autoDeploy = Prelude.Nothing,
+      clientCertificateId = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      defaultRouteSettings = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastDeploymentStatusMessage = Prelude.Nothing,
+      lastUpdatedDate = Prelude.Nothing,
+      routeSettings = Prelude.Nothing,
+      stageName = Prelude.Nothing,
+      stageVariables = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Settings for logging access in this stage.
+createStageResponse_accessLogSettings :: Lens.Lens' CreateStageResponse (Prelude.Maybe AccessLogSettings)
+createStageResponse_accessLogSettings = Lens.lens (\CreateStageResponse' {accessLogSettings} -> accessLogSettings) (\s@CreateStageResponse' {} a -> s {accessLogSettings = a} :: CreateStageResponse)
+
+-- | Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+createStageResponse_apiGatewayManaged :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.Bool)
+createStageResponse_apiGatewayManaged = Lens.lens (\CreateStageResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@CreateStageResponse' {} a -> s {apiGatewayManaged = a} :: CreateStageResponse)
+
+-- | Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+createStageResponse_autoDeploy :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.Bool)
+createStageResponse_autoDeploy = Lens.lens (\CreateStageResponse' {autoDeploy} -> autoDeploy) (\s@CreateStageResponse' {} a -> s {autoDeploy = a} :: CreateStageResponse)
+
+-- | The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+createStageResponse_clientCertificateId :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.Text)
+createStageResponse_clientCertificateId = Lens.lens (\CreateStageResponse' {clientCertificateId} -> clientCertificateId) (\s@CreateStageResponse' {} a -> s {clientCertificateId = a} :: CreateStageResponse)
+
+-- | The timestamp when the stage was created.
+createStageResponse_createdDate :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.UTCTime)
+createStageResponse_createdDate = Lens.lens (\CreateStageResponse' {createdDate} -> createdDate) (\s@CreateStageResponse' {} a -> s {createdDate = a} :: CreateStageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Default route settings for the stage.
+createStageResponse_defaultRouteSettings :: Lens.Lens' CreateStageResponse (Prelude.Maybe RouteSettings)
+createStageResponse_defaultRouteSettings = Lens.lens (\CreateStageResponse' {defaultRouteSettings} -> defaultRouteSettings) (\s@CreateStageResponse' {} a -> s {defaultRouteSettings = a} :: CreateStageResponse)
+
+-- | The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+createStageResponse_deploymentId :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.Text)
+createStageResponse_deploymentId = Lens.lens (\CreateStageResponse' {deploymentId} -> deploymentId) (\s@CreateStageResponse' {} a -> s {deploymentId = a} :: CreateStageResponse)
+
+-- | The description of the stage.
+createStageResponse_description :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.Text)
+createStageResponse_description = Lens.lens (\CreateStageResponse' {description} -> description) (\s@CreateStageResponse' {} a -> s {description = a} :: CreateStageResponse)
+
+-- | Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+createStageResponse_lastDeploymentStatusMessage :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.Text)
+createStageResponse_lastDeploymentStatusMessage = Lens.lens (\CreateStageResponse' {lastDeploymentStatusMessage} -> lastDeploymentStatusMessage) (\s@CreateStageResponse' {} a -> s {lastDeploymentStatusMessage = a} :: CreateStageResponse)
+
+-- | The timestamp when the stage was last updated.
+createStageResponse_lastUpdatedDate :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.UTCTime)
+createStageResponse_lastUpdatedDate = Lens.lens (\CreateStageResponse' {lastUpdatedDate} -> lastUpdatedDate) (\s@CreateStageResponse' {} a -> s {lastUpdatedDate = a} :: CreateStageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Route settings for the stage, by routeKey.
+createStageResponse_routeSettings :: Lens.Lens' CreateStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings))
+createStageResponse_routeSettings = Lens.lens (\CreateStageResponse' {routeSettings} -> routeSettings) (\s@CreateStageResponse' {} a -> s {routeSettings = a} :: CreateStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the stage.
+createStageResponse_stageName :: Lens.Lens' CreateStageResponse (Prelude.Maybe Prelude.Text)
+createStageResponse_stageName = Lens.lens (\CreateStageResponse' {stageName} -> stageName) (\s@CreateStageResponse' {} a -> s {stageName = a} :: CreateStageResponse)
+
+-- | A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+createStageResponse_stageVariables :: Lens.Lens' CreateStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStageResponse_stageVariables = Lens.lens (\CreateStageResponse' {stageVariables} -> stageVariables) (\s@CreateStageResponse' {} a -> s {stageVariables = a} :: CreateStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of tags. Each tag element is associated with a given
+-- resource.
+createStageResponse_tags :: Lens.Lens' CreateStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStageResponse_tags = Lens.lens (\CreateStageResponse' {tags} -> tags) (\s@CreateStageResponse' {} a -> s {tags = a} :: CreateStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createStageResponse_httpStatus :: Lens.Lens' CreateStageResponse Prelude.Int
+createStageResponse_httpStatus = Lens.lens (\CreateStageResponse' {httpStatus} -> httpStatus) (\s@CreateStageResponse' {} a -> s {httpStatus = a} :: CreateStageResponse)
+
+instance Prelude.NFData CreateStageResponse where
+  rnf CreateStageResponse' {..} =
+    Prelude.rnf accessLogSettings
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf autoDeploy
+      `Prelude.seq` Prelude.rnf clientCertificateId
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf defaultRouteSettings
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastDeploymentStatusMessage
+      `Prelude.seq` Prelude.rnf lastUpdatedDate
+      `Prelude.seq` Prelude.rnf routeSettings
+      `Prelude.seq` Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf stageVariables
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/CreateVpcLink.hs b/gen/Amazonka/ApiGatewayV2/CreateVpcLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/CreateVpcLink.hs
@@ -0,0 +1,310 @@
+{-# 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.ApiGatewayV2.CreateVpcLink
+-- 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 VPC link.
+module Amazonka.ApiGatewayV2.CreateVpcLink
+  ( -- * Creating a Request
+    CreateVpcLink (..),
+    newCreateVpcLink,
+
+    -- * Request Lenses
+    createVpcLink_securityGroupIds,
+    createVpcLink_tags,
+    createVpcLink_subnetIds,
+    createVpcLink_name,
+
+    -- * Destructuring the Response
+    CreateVpcLinkResponse (..),
+    newCreateVpcLinkResponse,
+
+    -- * Response Lenses
+    createVpcLinkResponse_createdDate,
+    createVpcLinkResponse_name,
+    createVpcLinkResponse_securityGroupIds,
+    createVpcLinkResponse_subnetIds,
+    createVpcLinkResponse_tags,
+    createVpcLinkResponse_vpcLinkId,
+    createVpcLinkResponse_vpcLinkStatus,
+    createVpcLinkResponse_vpcLinkStatusMessage,
+    createVpcLinkResponse_vpcLinkVersion,
+    createVpcLinkResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a VPC link
+--
+-- /See:/ 'newCreateVpcLink' smart constructor.
+data CreateVpcLink = CreateVpcLink'
+  { -- | A list of security group IDs for the VPC link.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | A list of tags.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A list of subnet IDs to include in the VPC link.
+    subnetIds :: [Prelude.Text],
+    -- | The name of the VPC link.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityGroupIds', 'createVpcLink_securityGroupIds' - A list of security group IDs for the VPC link.
+--
+-- 'tags', 'createVpcLink_tags' - A list of tags.
+--
+-- 'subnetIds', 'createVpcLink_subnetIds' - A list of subnet IDs to include in the VPC link.
+--
+-- 'name', 'createVpcLink_name' - The name of the VPC link.
+newCreateVpcLink ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateVpcLink
+newCreateVpcLink pName_ =
+  CreateVpcLink'
+    { securityGroupIds = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      subnetIds = Prelude.mempty,
+      name = pName_
+    }
+
+-- | A list of security group IDs for the VPC link.
+createVpcLink_securityGroupIds :: Lens.Lens' CreateVpcLink (Prelude.Maybe [Prelude.Text])
+createVpcLink_securityGroupIds = Lens.lens (\CreateVpcLink' {securityGroupIds} -> securityGroupIds) (\s@CreateVpcLink' {} a -> s {securityGroupIds = a} :: CreateVpcLink) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of tags.
+createVpcLink_tags :: Lens.Lens' CreateVpcLink (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createVpcLink_tags = Lens.lens (\CreateVpcLink' {tags} -> tags) (\s@CreateVpcLink' {} a -> s {tags = a} :: CreateVpcLink) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of subnet IDs to include in the VPC link.
+createVpcLink_subnetIds :: Lens.Lens' CreateVpcLink [Prelude.Text]
+createVpcLink_subnetIds = Lens.lens (\CreateVpcLink' {subnetIds} -> subnetIds) (\s@CreateVpcLink' {} a -> s {subnetIds = a} :: CreateVpcLink) Prelude.. Lens.coerced
+
+-- | The name of the VPC link.
+createVpcLink_name :: Lens.Lens' CreateVpcLink Prelude.Text
+createVpcLink_name = Lens.lens (\CreateVpcLink' {name} -> name) (\s@CreateVpcLink' {} a -> s {name = a} :: CreateVpcLink)
+
+instance Core.AWSRequest CreateVpcLink where
+  type
+    AWSResponse CreateVpcLink =
+      CreateVpcLinkResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateVpcLinkResponse'
+            Prelude.<$> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> ( x
+                            Data..?> "securityGroupIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "subnetIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "vpcLinkId")
+            Prelude.<*> (x Data..?> "vpcLinkStatus")
+            Prelude.<*> (x Data..?> "vpcLinkStatusMessage")
+            Prelude.<*> (x Data..?> "vpcLinkVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVpcLink where
+  hashWithSalt _salt CreateVpcLink' {..} =
+    _salt
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateVpcLink where
+  rnf CreateVpcLink' {..} =
+    Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateVpcLink where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateVpcLink where
+  toJSON CreateVpcLink' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("securityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("subnetIds" Data..= subnetIds),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateVpcLink where
+  toPath = Prelude.const "/v2/vpclinks"
+
+instance Data.ToQuery CreateVpcLink where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateVpcLinkResponse' smart constructor.
+data CreateVpcLinkResponse = CreateVpcLinkResponse'
+  { -- | The timestamp when the VPC link was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the VPC link.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of security group IDs for the VPC link.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | A list of subnet IDs to include in the VPC link.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | Tags for the VPC link.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the VPC link.
+    vpcLinkId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the VPC link.
+    vpcLinkStatus :: Prelude.Maybe VpcLinkStatus,
+    -- | A message summarizing the cause of the status of the VPC link.
+    vpcLinkStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The version of the VPC link.
+    vpcLinkVersion :: Prelude.Maybe VpcLinkVersion,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcLinkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'createVpcLinkResponse_createdDate' - The timestamp when the VPC link was created.
+--
+-- 'name', 'createVpcLinkResponse_name' - The name of the VPC link.
+--
+-- 'securityGroupIds', 'createVpcLinkResponse_securityGroupIds' - A list of security group IDs for the VPC link.
+--
+-- 'subnetIds', 'createVpcLinkResponse_subnetIds' - A list of subnet IDs to include in the VPC link.
+--
+-- 'tags', 'createVpcLinkResponse_tags' - Tags for the VPC link.
+--
+-- 'vpcLinkId', 'createVpcLinkResponse_vpcLinkId' - The ID of the VPC link.
+--
+-- 'vpcLinkStatus', 'createVpcLinkResponse_vpcLinkStatus' - The status of the VPC link.
+--
+-- 'vpcLinkStatusMessage', 'createVpcLinkResponse_vpcLinkStatusMessage' - A message summarizing the cause of the status of the VPC link.
+--
+-- 'vpcLinkVersion', 'createVpcLinkResponse_vpcLinkVersion' - The version of the VPC link.
+--
+-- 'httpStatus', 'createVpcLinkResponse_httpStatus' - The response's http status code.
+newCreateVpcLinkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpcLinkResponse
+newCreateVpcLinkResponse pHttpStatus_ =
+  CreateVpcLinkResponse'
+    { createdDate =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcLinkId = Prelude.Nothing,
+      vpcLinkStatus = Prelude.Nothing,
+      vpcLinkStatusMessage = Prelude.Nothing,
+      vpcLinkVersion = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The timestamp when the VPC link was created.
+createVpcLinkResponse_createdDate :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe Prelude.UTCTime)
+createVpcLinkResponse_createdDate = Lens.lens (\CreateVpcLinkResponse' {createdDate} -> createdDate) (\s@CreateVpcLinkResponse' {} a -> s {createdDate = a} :: CreateVpcLinkResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the VPC link.
+createVpcLinkResponse_name :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe Prelude.Text)
+createVpcLinkResponse_name = Lens.lens (\CreateVpcLinkResponse' {name} -> name) (\s@CreateVpcLinkResponse' {} a -> s {name = a} :: CreateVpcLinkResponse)
+
+-- | A list of security group IDs for the VPC link.
+createVpcLinkResponse_securityGroupIds :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe [Prelude.Text])
+createVpcLinkResponse_securityGroupIds = Lens.lens (\CreateVpcLinkResponse' {securityGroupIds} -> securityGroupIds) (\s@CreateVpcLinkResponse' {} a -> s {securityGroupIds = a} :: CreateVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of subnet IDs to include in the VPC link.
+createVpcLinkResponse_subnetIds :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe [Prelude.Text])
+createVpcLinkResponse_subnetIds = Lens.lens (\CreateVpcLinkResponse' {subnetIds} -> subnetIds) (\s@CreateVpcLinkResponse' {} a -> s {subnetIds = a} :: CreateVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags for the VPC link.
+createVpcLinkResponse_tags :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createVpcLinkResponse_tags = Lens.lens (\CreateVpcLinkResponse' {tags} -> tags) (\s@CreateVpcLinkResponse' {} a -> s {tags = a} :: CreateVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC link.
+createVpcLinkResponse_vpcLinkId :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe Prelude.Text)
+createVpcLinkResponse_vpcLinkId = Lens.lens (\CreateVpcLinkResponse' {vpcLinkId} -> vpcLinkId) (\s@CreateVpcLinkResponse' {} a -> s {vpcLinkId = a} :: CreateVpcLinkResponse)
+
+-- | The status of the VPC link.
+createVpcLinkResponse_vpcLinkStatus :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe VpcLinkStatus)
+createVpcLinkResponse_vpcLinkStatus = Lens.lens (\CreateVpcLinkResponse' {vpcLinkStatus} -> vpcLinkStatus) (\s@CreateVpcLinkResponse' {} a -> s {vpcLinkStatus = a} :: CreateVpcLinkResponse)
+
+-- | A message summarizing the cause of the status of the VPC link.
+createVpcLinkResponse_vpcLinkStatusMessage :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe Prelude.Text)
+createVpcLinkResponse_vpcLinkStatusMessage = Lens.lens (\CreateVpcLinkResponse' {vpcLinkStatusMessage} -> vpcLinkStatusMessage) (\s@CreateVpcLinkResponse' {} a -> s {vpcLinkStatusMessage = a} :: CreateVpcLinkResponse)
+
+-- | The version of the VPC link.
+createVpcLinkResponse_vpcLinkVersion :: Lens.Lens' CreateVpcLinkResponse (Prelude.Maybe VpcLinkVersion)
+createVpcLinkResponse_vpcLinkVersion = Lens.lens (\CreateVpcLinkResponse' {vpcLinkVersion} -> vpcLinkVersion) (\s@CreateVpcLinkResponse' {} a -> s {vpcLinkVersion = a} :: CreateVpcLinkResponse)
+
+-- | The response's http status code.
+createVpcLinkResponse_httpStatus :: Lens.Lens' CreateVpcLinkResponse Prelude.Int
+createVpcLinkResponse_httpStatus = Lens.lens (\CreateVpcLinkResponse' {httpStatus} -> httpStatus) (\s@CreateVpcLinkResponse' {} a -> s {httpStatus = a} :: CreateVpcLinkResponse)
+
+instance Prelude.NFData CreateVpcLinkResponse where
+  rnf CreateVpcLinkResponse' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcLinkId
+      `Prelude.seq` Prelude.rnf vpcLinkStatus
+      `Prelude.seq` Prelude.rnf vpcLinkStatusMessage
+      `Prelude.seq` Prelude.rnf vpcLinkVersion
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteAccessLogSettings.hs b/gen/Amazonka/ApiGatewayV2/DeleteAccessLogSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteAccessLogSettings.hs
@@ -0,0 +1,155 @@
+{-# 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.ApiGatewayV2.DeleteAccessLogSettings
+-- 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 the AccessLogSettings for a Stage. To disable access logging for
+-- a Stage, delete its AccessLogSettings.
+module Amazonka.ApiGatewayV2.DeleteAccessLogSettings
+  ( -- * Creating a Request
+    DeleteAccessLogSettings (..),
+    newDeleteAccessLogSettings,
+
+    -- * Request Lenses
+    deleteAccessLogSettings_stageName,
+    deleteAccessLogSettings_apiId,
+
+    -- * Destructuring the Response
+    DeleteAccessLogSettingsResponse (..),
+    newDeleteAccessLogSettingsResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAccessLogSettings' smart constructor.
+data DeleteAccessLogSettings = DeleteAccessLogSettings'
+  { -- | The stage name. Stage names can only contain alphanumeric characters,
+    -- hyphens, and underscores. Maximum length is 128 characters.
+    stageName :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessLogSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stageName', 'deleteAccessLogSettings_stageName' - The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+--
+-- 'apiId', 'deleteAccessLogSettings_apiId' - The API identifier.
+newDeleteAccessLogSettings ::
+  -- | 'stageName'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  DeleteAccessLogSettings
+newDeleteAccessLogSettings pStageName_ pApiId_ =
+  DeleteAccessLogSettings'
+    { stageName = pStageName_,
+      apiId = pApiId_
+    }
+
+-- | The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+deleteAccessLogSettings_stageName :: Lens.Lens' DeleteAccessLogSettings Prelude.Text
+deleteAccessLogSettings_stageName = Lens.lens (\DeleteAccessLogSettings' {stageName} -> stageName) (\s@DeleteAccessLogSettings' {} a -> s {stageName = a} :: DeleteAccessLogSettings)
+
+-- | The API identifier.
+deleteAccessLogSettings_apiId :: Lens.Lens' DeleteAccessLogSettings Prelude.Text
+deleteAccessLogSettings_apiId = Lens.lens (\DeleteAccessLogSettings' {apiId} -> apiId) (\s@DeleteAccessLogSettings' {} a -> s {apiId = a} :: DeleteAccessLogSettings)
+
+instance Core.AWSRequest DeleteAccessLogSettings where
+  type
+    AWSResponse DeleteAccessLogSettings =
+      DeleteAccessLogSettingsResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteAccessLogSettingsResponse'
+
+instance Prelude.Hashable DeleteAccessLogSettings where
+  hashWithSalt _salt DeleteAccessLogSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData DeleteAccessLogSettings where
+  rnf DeleteAccessLogSettings' {..} =
+    Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders DeleteAccessLogSettings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAccessLogSettings where
+  toPath DeleteAccessLogSettings' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/stages/",
+        Data.toBS stageName,
+        "/accesslogsettings"
+      ]
+
+instance Data.ToQuery DeleteAccessLogSettings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAccessLogSettingsResponse' smart constructor.
+data DeleteAccessLogSettingsResponse = DeleteAccessLogSettingsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessLogSettingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteAccessLogSettingsResponse ::
+  DeleteAccessLogSettingsResponse
+newDeleteAccessLogSettingsResponse =
+  DeleteAccessLogSettingsResponse'
+
+instance
+  Prelude.NFData
+    DeleteAccessLogSettingsResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteApi.hs b/gen/Amazonka/ApiGatewayV2/DeleteApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteApi.hs
@@ -0,0 +1,118 @@
+{-# 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.ApiGatewayV2.DeleteApi
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Api resource.
+module Amazonka.ApiGatewayV2.DeleteApi
+  ( -- * Creating a Request
+    DeleteApi (..),
+    newDeleteApi,
+
+    -- * Request Lenses
+    deleteApi_apiId,
+
+    -- * Destructuring the Response
+    DeleteApiResponse (..),
+    newDeleteApiResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteApi' smart constructor.
+data DeleteApi = DeleteApi'
+  { -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApi' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'deleteApi_apiId' - The API identifier.
+newDeleteApi ::
+  -- | 'apiId'
+  Prelude.Text ->
+  DeleteApi
+newDeleteApi pApiId_ = DeleteApi' {apiId = pApiId_}
+
+-- | The API identifier.
+deleteApi_apiId :: Lens.Lens' DeleteApi Prelude.Text
+deleteApi_apiId = Lens.lens (\DeleteApi' {apiId} -> apiId) (\s@DeleteApi' {} a -> s {apiId = a} :: DeleteApi)
+
+instance Core.AWSRequest DeleteApi where
+  type AWSResponse DeleteApi = DeleteApiResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteApiResponse'
+
+instance Prelude.Hashable DeleteApi where
+  hashWithSalt _salt DeleteApi' {..} =
+    _salt `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData DeleteApi where
+  rnf DeleteApi' {..} = Prelude.rnf apiId
+
+instance Data.ToHeaders DeleteApi where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteApi where
+  toPath DeleteApi' {..} =
+    Prelude.mconcat ["/v2/apis/", Data.toBS apiId]
+
+instance Data.ToQuery DeleteApi where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteApiResponse' smart constructor.
+data DeleteApiResponse = DeleteApiResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApiResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteApiResponse ::
+  DeleteApiResponse
+newDeleteApiResponse = DeleteApiResponse'
+
+instance Prelude.NFData DeleteApiResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteApiMapping.hs b/gen/Amazonka/ApiGatewayV2/DeleteApiMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteApiMapping.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.DeleteApiMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an API mapping.
+module Amazonka.ApiGatewayV2.DeleteApiMapping
+  ( -- * Creating a Request
+    DeleteApiMapping (..),
+    newDeleteApiMapping,
+
+    -- * Request Lenses
+    deleteApiMapping_apiMappingId,
+    deleteApiMapping_domainName,
+
+    -- * Destructuring the Response
+    DeleteApiMappingResponse (..),
+    newDeleteApiMappingResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteApiMapping' smart constructor.
+data DeleteApiMapping = DeleteApiMapping'
+  { -- | The API mapping identifier.
+    apiMappingId :: Prelude.Text,
+    -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApiMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingId', 'deleteApiMapping_apiMappingId' - The API mapping identifier.
+--
+-- 'domainName', 'deleteApiMapping_domainName' - The domain name.
+newDeleteApiMapping ::
+  -- | 'apiMappingId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteApiMapping
+newDeleteApiMapping pApiMappingId_ pDomainName_ =
+  DeleteApiMapping'
+    { apiMappingId = pApiMappingId_,
+      domainName = pDomainName_
+    }
+
+-- | The API mapping identifier.
+deleteApiMapping_apiMappingId :: Lens.Lens' DeleteApiMapping Prelude.Text
+deleteApiMapping_apiMappingId = Lens.lens (\DeleteApiMapping' {apiMappingId} -> apiMappingId) (\s@DeleteApiMapping' {} a -> s {apiMappingId = a} :: DeleteApiMapping)
+
+-- | The domain name.
+deleteApiMapping_domainName :: Lens.Lens' DeleteApiMapping Prelude.Text
+deleteApiMapping_domainName = Lens.lens (\DeleteApiMapping' {domainName} -> domainName) (\s@DeleteApiMapping' {} a -> s {domainName = a} :: DeleteApiMapping)
+
+instance Core.AWSRequest DeleteApiMapping where
+  type
+    AWSResponse DeleteApiMapping =
+      DeleteApiMappingResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteApiMappingResponse'
+
+instance Prelude.Hashable DeleteApiMapping where
+  hashWithSalt _salt DeleteApiMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiMappingId
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteApiMapping where
+  rnf DeleteApiMapping' {..} =
+    Prelude.rnf apiMappingId
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteApiMapping where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteApiMapping where
+  toPath DeleteApiMapping' {..} =
+    Prelude.mconcat
+      [ "/v2/domainnames/",
+        Data.toBS domainName,
+        "/apimappings/",
+        Data.toBS apiMappingId
+      ]
+
+instance Data.ToQuery DeleteApiMapping where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteApiMappingResponse' smart constructor.
+data DeleteApiMappingResponse = DeleteApiMappingResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApiMappingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteApiMappingResponse ::
+  DeleteApiMappingResponse
+newDeleteApiMappingResponse =
+  DeleteApiMappingResponse'
+
+instance Prelude.NFData DeleteApiMappingResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteAuthorizer.hs b/gen/Amazonka/ApiGatewayV2/DeleteAuthorizer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteAuthorizer.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.DeleteAuthorizer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Authorizer.
+module Amazonka.ApiGatewayV2.DeleteAuthorizer
+  ( -- * Creating a Request
+    DeleteAuthorizer (..),
+    newDeleteAuthorizer,
+
+    -- * Request Lenses
+    deleteAuthorizer_authorizerId,
+    deleteAuthorizer_apiId,
+
+    -- * Destructuring the Response
+    DeleteAuthorizerResponse (..),
+    newDeleteAuthorizerResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAuthorizer' smart constructor.
+data DeleteAuthorizer = DeleteAuthorizer'
+  { -- | The authorizer identifier.
+    authorizerId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAuthorizer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerId', 'deleteAuthorizer_authorizerId' - The authorizer identifier.
+--
+-- 'apiId', 'deleteAuthorizer_apiId' - The API identifier.
+newDeleteAuthorizer ::
+  -- | 'authorizerId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  DeleteAuthorizer
+newDeleteAuthorizer pAuthorizerId_ pApiId_ =
+  DeleteAuthorizer'
+    { authorizerId = pAuthorizerId_,
+      apiId = pApiId_
+    }
+
+-- | The authorizer identifier.
+deleteAuthorizer_authorizerId :: Lens.Lens' DeleteAuthorizer Prelude.Text
+deleteAuthorizer_authorizerId = Lens.lens (\DeleteAuthorizer' {authorizerId} -> authorizerId) (\s@DeleteAuthorizer' {} a -> s {authorizerId = a} :: DeleteAuthorizer)
+
+-- | The API identifier.
+deleteAuthorizer_apiId :: Lens.Lens' DeleteAuthorizer Prelude.Text
+deleteAuthorizer_apiId = Lens.lens (\DeleteAuthorizer' {apiId} -> apiId) (\s@DeleteAuthorizer' {} a -> s {apiId = a} :: DeleteAuthorizer)
+
+instance Core.AWSRequest DeleteAuthorizer where
+  type
+    AWSResponse DeleteAuthorizer =
+      DeleteAuthorizerResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteAuthorizerResponse'
+
+instance Prelude.Hashable DeleteAuthorizer where
+  hashWithSalt _salt DeleteAuthorizer' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorizerId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData DeleteAuthorizer where
+  rnf DeleteAuthorizer' {..} =
+    Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders DeleteAuthorizer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAuthorizer where
+  toPath DeleteAuthorizer' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/authorizers/",
+        Data.toBS authorizerId
+      ]
+
+instance Data.ToQuery DeleteAuthorizer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAuthorizerResponse' smart constructor.
+data DeleteAuthorizerResponse = DeleteAuthorizerResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAuthorizerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteAuthorizerResponse ::
+  DeleteAuthorizerResponse
+newDeleteAuthorizerResponse =
+  DeleteAuthorizerResponse'
+
+instance Prelude.NFData DeleteAuthorizerResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteCorsConfiguration.hs b/gen/Amazonka/ApiGatewayV2/DeleteCorsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteCorsConfiguration.hs
@@ -0,0 +1,128 @@
+{-# 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.ApiGatewayV2.DeleteCorsConfiguration
+-- 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 CORS configuration.
+module Amazonka.ApiGatewayV2.DeleteCorsConfiguration
+  ( -- * Creating a Request
+    DeleteCorsConfiguration (..),
+    newDeleteCorsConfiguration,
+
+    -- * Request Lenses
+    deleteCorsConfiguration_apiId,
+
+    -- * Destructuring the Response
+    DeleteCorsConfigurationResponse (..),
+    newDeleteCorsConfigurationResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCorsConfiguration' smart constructor.
+data DeleteCorsConfiguration = DeleteCorsConfiguration'
+  { -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCorsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'deleteCorsConfiguration_apiId' - The API identifier.
+newDeleteCorsConfiguration ::
+  -- | 'apiId'
+  Prelude.Text ->
+  DeleteCorsConfiguration
+newDeleteCorsConfiguration pApiId_ =
+  DeleteCorsConfiguration' {apiId = pApiId_}
+
+-- | The API identifier.
+deleteCorsConfiguration_apiId :: Lens.Lens' DeleteCorsConfiguration Prelude.Text
+deleteCorsConfiguration_apiId = Lens.lens (\DeleteCorsConfiguration' {apiId} -> apiId) (\s@DeleteCorsConfiguration' {} a -> s {apiId = a} :: DeleteCorsConfiguration)
+
+instance Core.AWSRequest DeleteCorsConfiguration where
+  type
+    AWSResponse DeleteCorsConfiguration =
+      DeleteCorsConfigurationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteCorsConfigurationResponse'
+
+instance Prelude.Hashable DeleteCorsConfiguration where
+  hashWithSalt _salt DeleteCorsConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData DeleteCorsConfiguration where
+  rnf DeleteCorsConfiguration' {..} = Prelude.rnf apiId
+
+instance Data.ToHeaders DeleteCorsConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCorsConfiguration where
+  toPath DeleteCorsConfiguration' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/cors"]
+
+instance Data.ToQuery DeleteCorsConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCorsConfigurationResponse' smart constructor.
+data DeleteCorsConfigurationResponse = DeleteCorsConfigurationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCorsConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteCorsConfigurationResponse ::
+  DeleteCorsConfigurationResponse
+newDeleteCorsConfigurationResponse =
+  DeleteCorsConfigurationResponse'
+
+instance
+  Prelude.NFData
+    DeleteCorsConfigurationResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteDeployment.hs b/gen/Amazonka/ApiGatewayV2/DeleteDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteDeployment.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.DeleteDeployment
+-- 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 Deployment.
+module Amazonka.ApiGatewayV2.DeleteDeployment
+  ( -- * Creating a Request
+    DeleteDeployment (..),
+    newDeleteDeployment,
+
+    -- * Request Lenses
+    deleteDeployment_apiId,
+    deleteDeployment_deploymentId,
+
+    -- * Destructuring the Response
+    DeleteDeploymentResponse (..),
+    newDeleteDeploymentResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDeployment' smart constructor.
+data DeleteDeployment = DeleteDeployment'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The deployment ID.
+    deploymentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'deleteDeployment_apiId' - The API identifier.
+--
+-- 'deploymentId', 'deleteDeployment_deploymentId' - The deployment ID.
+newDeleteDeployment ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'deploymentId'
+  Prelude.Text ->
+  DeleteDeployment
+newDeleteDeployment pApiId_ pDeploymentId_ =
+  DeleteDeployment'
+    { apiId = pApiId_,
+      deploymentId = pDeploymentId_
+    }
+
+-- | The API identifier.
+deleteDeployment_apiId :: Lens.Lens' DeleteDeployment Prelude.Text
+deleteDeployment_apiId = Lens.lens (\DeleteDeployment' {apiId} -> apiId) (\s@DeleteDeployment' {} a -> s {apiId = a} :: DeleteDeployment)
+
+-- | The deployment ID.
+deleteDeployment_deploymentId :: Lens.Lens' DeleteDeployment Prelude.Text
+deleteDeployment_deploymentId = Lens.lens (\DeleteDeployment' {deploymentId} -> deploymentId) (\s@DeleteDeployment' {} a -> s {deploymentId = a} :: DeleteDeployment)
+
+instance Core.AWSRequest DeleteDeployment where
+  type
+    AWSResponse DeleteDeployment =
+      DeleteDeploymentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDeploymentResponse'
+
+instance Prelude.Hashable DeleteDeployment where
+  hashWithSalt _salt DeleteDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` deploymentId
+
+instance Prelude.NFData DeleteDeployment where
+  rnf DeleteDeployment' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf deploymentId
+
+instance Data.ToHeaders DeleteDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDeployment where
+  toPath DeleteDeployment' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/deployments/",
+        Data.toBS deploymentId
+      ]
+
+instance Data.ToQuery DeleteDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDeploymentResponse' smart constructor.
+data DeleteDeploymentResponse = DeleteDeploymentResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDeploymentResponse ::
+  DeleteDeploymentResponse
+newDeleteDeploymentResponse =
+  DeleteDeploymentResponse'
+
+instance Prelude.NFData DeleteDeploymentResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteDomainName.hs b/gen/Amazonka/ApiGatewayV2/DeleteDomainName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteDomainName.hs
@@ -0,0 +1,124 @@
+{-# 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.ApiGatewayV2.DeleteDomainName
+-- 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 domain name.
+module Amazonka.ApiGatewayV2.DeleteDomainName
+  ( -- * Creating a Request
+    DeleteDomainName (..),
+    newDeleteDomainName,
+
+    -- * Request Lenses
+    deleteDomainName_domainName,
+
+    -- * Destructuring the Response
+    DeleteDomainNameResponse (..),
+    newDeleteDomainNameResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDomainName' smart constructor.
+data DeleteDomainName = DeleteDomainName'
+  { -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainName' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'deleteDomainName_domainName' - The domain name.
+newDeleteDomainName ::
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteDomainName
+newDeleteDomainName pDomainName_ =
+  DeleteDomainName' {domainName = pDomainName_}
+
+-- | The domain name.
+deleteDomainName_domainName :: Lens.Lens' DeleteDomainName Prelude.Text
+deleteDomainName_domainName = Lens.lens (\DeleteDomainName' {domainName} -> domainName) (\s@DeleteDomainName' {} a -> s {domainName = a} :: DeleteDomainName)
+
+instance Core.AWSRequest DeleteDomainName where
+  type
+    AWSResponse DeleteDomainName =
+      DeleteDomainNameResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDomainNameResponse'
+
+instance Prelude.Hashable DeleteDomainName where
+  hashWithSalt _salt DeleteDomainName' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteDomainName where
+  rnf DeleteDomainName' {..} = Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteDomainName where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDomainName where
+  toPath DeleteDomainName' {..} =
+    Prelude.mconcat
+      ["/v2/domainnames/", Data.toBS domainName]
+
+instance Data.ToQuery DeleteDomainName where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDomainNameResponse' smart constructor.
+data DeleteDomainNameResponse = DeleteDomainNameResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainNameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDomainNameResponse ::
+  DeleteDomainNameResponse
+newDeleteDomainNameResponse =
+  DeleteDomainNameResponse'
+
+instance Prelude.NFData DeleteDomainNameResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteIntegration.hs b/gen/Amazonka/ApiGatewayV2/DeleteIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteIntegration.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.DeleteIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Integration.
+module Amazonka.ApiGatewayV2.DeleteIntegration
+  ( -- * Creating a Request
+    DeleteIntegration (..),
+    newDeleteIntegration,
+
+    -- * Request Lenses
+    deleteIntegration_apiId,
+    deleteIntegration_integrationId,
+
+    -- * Destructuring the Response
+    DeleteIntegrationResponse' (..),
+    newDeleteIntegrationResponse',
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIntegration' smart constructor.
+data DeleteIntegration = DeleteIntegration'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'deleteIntegration_apiId' - The API identifier.
+--
+-- 'integrationId', 'deleteIntegration_integrationId' - The integration ID.
+newDeleteIntegration ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationId'
+  Prelude.Text ->
+  DeleteIntegration
+newDeleteIntegration pApiId_ pIntegrationId_ =
+  DeleteIntegration'
+    { apiId = pApiId_,
+      integrationId = pIntegrationId_
+    }
+
+-- | The API identifier.
+deleteIntegration_apiId :: Lens.Lens' DeleteIntegration Prelude.Text
+deleteIntegration_apiId = Lens.lens (\DeleteIntegration' {apiId} -> apiId) (\s@DeleteIntegration' {} a -> s {apiId = a} :: DeleteIntegration)
+
+-- | The integration ID.
+deleteIntegration_integrationId :: Lens.Lens' DeleteIntegration Prelude.Text
+deleteIntegration_integrationId = Lens.lens (\DeleteIntegration' {integrationId} -> integrationId) (\s@DeleteIntegration' {} a -> s {integrationId = a} :: DeleteIntegration)
+
+instance Core.AWSRequest DeleteIntegration where
+  type
+    AWSResponse DeleteIntegration =
+      DeleteIntegrationResponse'
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteIntegrationResponse''
+
+instance Prelude.Hashable DeleteIntegration where
+  hashWithSalt _salt DeleteIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationId
+
+instance Prelude.NFData DeleteIntegration where
+  rnf DeleteIntegration' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationId
+
+instance Data.ToHeaders DeleteIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteIntegration where
+  toPath DeleteIntegration' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId
+      ]
+
+instance Data.ToQuery DeleteIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteIntegrationResponse'' smart constructor.
+data DeleteIntegrationResponse' = DeleteIntegrationResponse''
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntegrationResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteIntegrationResponse' ::
+  DeleteIntegrationResponse'
+newDeleteIntegrationResponse' =
+  DeleteIntegrationResponse''
+
+instance Prelude.NFData DeleteIntegrationResponse' where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteIntegrationResponse.hs b/gen/Amazonka/ApiGatewayV2/DeleteIntegrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteIntegrationResponse.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.DeleteIntegrationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an IntegrationResponses.
+module Amazonka.ApiGatewayV2.DeleteIntegrationResponse
+  ( -- * Creating a Request
+    DeleteIntegrationResponse (..),
+    newDeleteIntegrationResponse,
+
+    -- * Request Lenses
+    deleteIntegrationResponse_apiId,
+    deleteIntegrationResponse_integrationResponseId,
+    deleteIntegrationResponse_integrationId,
+
+    -- * Destructuring the Response
+    DeleteIntegrationResponseResponse (..),
+    newDeleteIntegrationResponseResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIntegrationResponse' smart constructor.
+data DeleteIntegrationResponse = DeleteIntegrationResponse'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration response ID.
+    integrationResponseId :: Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'deleteIntegrationResponse_apiId' - The API identifier.
+--
+-- 'integrationResponseId', 'deleteIntegrationResponse_integrationResponseId' - The integration response ID.
+--
+-- 'integrationId', 'deleteIntegrationResponse_integrationId' - The integration ID.
+newDeleteIntegrationResponse ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationResponseId'
+  Prelude.Text ->
+  -- | 'integrationId'
+  Prelude.Text ->
+  DeleteIntegrationResponse
+newDeleteIntegrationResponse
+  pApiId_
+  pIntegrationResponseId_
+  pIntegrationId_ =
+    DeleteIntegrationResponse'
+      { apiId = pApiId_,
+        integrationResponseId = pIntegrationResponseId_,
+        integrationId = pIntegrationId_
+      }
+
+-- | The API identifier.
+deleteIntegrationResponse_apiId :: Lens.Lens' DeleteIntegrationResponse Prelude.Text
+deleteIntegrationResponse_apiId = Lens.lens (\DeleteIntegrationResponse' {apiId} -> apiId) (\s@DeleteIntegrationResponse' {} a -> s {apiId = a} :: DeleteIntegrationResponse)
+
+-- | The integration response ID.
+deleteIntegrationResponse_integrationResponseId :: Lens.Lens' DeleteIntegrationResponse Prelude.Text
+deleteIntegrationResponse_integrationResponseId = Lens.lens (\DeleteIntegrationResponse' {integrationResponseId} -> integrationResponseId) (\s@DeleteIntegrationResponse' {} a -> s {integrationResponseId = a} :: DeleteIntegrationResponse)
+
+-- | The integration ID.
+deleteIntegrationResponse_integrationId :: Lens.Lens' DeleteIntegrationResponse Prelude.Text
+deleteIntegrationResponse_integrationId = Lens.lens (\DeleteIntegrationResponse' {integrationId} -> integrationId) (\s@DeleteIntegrationResponse' {} a -> s {integrationId = a} :: DeleteIntegrationResponse)
+
+instance Core.AWSRequest DeleteIntegrationResponse where
+  type
+    AWSResponse DeleteIntegrationResponse =
+      DeleteIntegrationResponseResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteIntegrationResponseResponse'
+
+instance Prelude.Hashable DeleteIntegrationResponse where
+  hashWithSalt _salt DeleteIntegrationResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationResponseId
+      `Prelude.hashWithSalt` integrationId
+
+instance Prelude.NFData DeleteIntegrationResponse where
+  rnf DeleteIntegrationResponse' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationResponseId
+      `Prelude.seq` Prelude.rnf integrationId
+
+instance Data.ToHeaders DeleteIntegrationResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteIntegrationResponse where
+  toPath DeleteIntegrationResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId,
+        "/integrationresponses/",
+        Data.toBS integrationResponseId
+      ]
+
+instance Data.ToQuery DeleteIntegrationResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteIntegrationResponseResponse' smart constructor.
+data DeleteIntegrationResponseResponse = DeleteIntegrationResponseResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntegrationResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteIntegrationResponseResponse ::
+  DeleteIntegrationResponseResponse
+newDeleteIntegrationResponseResponse =
+  DeleteIntegrationResponseResponse'
+
+instance
+  Prelude.NFData
+    DeleteIntegrationResponseResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteModel.hs b/gen/Amazonka/ApiGatewayV2/DeleteModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteModel.hs
@@ -0,0 +1,138 @@
+{-# 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.ApiGatewayV2.DeleteModel
+-- 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 Model.
+module Amazonka.ApiGatewayV2.DeleteModel
+  ( -- * Creating a Request
+    DeleteModel (..),
+    newDeleteModel,
+
+    -- * Request Lenses
+    deleteModel_modelId,
+    deleteModel_apiId,
+
+    -- * Destructuring the Response
+    DeleteModelResponse (..),
+    newDeleteModelResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteModel' smart constructor.
+data DeleteModel = DeleteModel'
+  { -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'deleteModel_modelId' - The model ID.
+--
+-- 'apiId', 'deleteModel_apiId' - The API identifier.
+newDeleteModel ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  DeleteModel
+newDeleteModel pModelId_ pApiId_ =
+  DeleteModel' {modelId = pModelId_, apiId = pApiId_}
+
+-- | The model ID.
+deleteModel_modelId :: Lens.Lens' DeleteModel Prelude.Text
+deleteModel_modelId = Lens.lens (\DeleteModel' {modelId} -> modelId) (\s@DeleteModel' {} a -> s {modelId = a} :: DeleteModel)
+
+-- | The API identifier.
+deleteModel_apiId :: Lens.Lens' DeleteModel Prelude.Text
+deleteModel_apiId = Lens.lens (\DeleteModel' {apiId} -> apiId) (\s@DeleteModel' {} a -> s {apiId = a} :: DeleteModel)
+
+instance Core.AWSRequest DeleteModel where
+  type AWSResponse DeleteModel = DeleteModelResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteModelResponse'
+
+instance Prelude.Hashable DeleteModel where
+  hashWithSalt _salt DeleteModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData DeleteModel where
+  rnf DeleteModel' {..} =
+    Prelude.rnf modelId `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders DeleteModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteModel where
+  toPath DeleteModel' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/models/",
+        Data.toBS modelId
+      ]
+
+instance Data.ToQuery DeleteModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteModelResponse' smart constructor.
+data DeleteModelResponse = DeleteModelResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteModelResponse ::
+  DeleteModelResponse
+newDeleteModelResponse = DeleteModelResponse'
+
+instance Prelude.NFData DeleteModelResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteRoute.hs b/gen/Amazonka/ApiGatewayV2/DeleteRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteRoute.hs
@@ -0,0 +1,138 @@
+{-# 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.ApiGatewayV2.DeleteRoute
+-- 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 Route.
+module Amazonka.ApiGatewayV2.DeleteRoute
+  ( -- * Creating a Request
+    DeleteRoute (..),
+    newDeleteRoute,
+
+    -- * Request Lenses
+    deleteRoute_apiId,
+    deleteRoute_routeId,
+
+    -- * Destructuring the Response
+    DeleteRouteResponse' (..),
+    newDeleteRouteResponse',
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRoute' smart constructor.
+data DeleteRoute = DeleteRoute'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'deleteRoute_apiId' - The API identifier.
+--
+-- 'routeId', 'deleteRoute_routeId' - The route ID.
+newDeleteRoute ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  DeleteRoute
+newDeleteRoute pApiId_ pRouteId_ =
+  DeleteRoute' {apiId = pApiId_, routeId = pRouteId_}
+
+-- | The API identifier.
+deleteRoute_apiId :: Lens.Lens' DeleteRoute Prelude.Text
+deleteRoute_apiId = Lens.lens (\DeleteRoute' {apiId} -> apiId) (\s@DeleteRoute' {} a -> s {apiId = a} :: DeleteRoute)
+
+-- | The route ID.
+deleteRoute_routeId :: Lens.Lens' DeleteRoute Prelude.Text
+deleteRoute_routeId = Lens.lens (\DeleteRoute' {routeId} -> routeId) (\s@DeleteRoute' {} a -> s {routeId = a} :: DeleteRoute)
+
+instance Core.AWSRequest DeleteRoute where
+  type AWSResponse DeleteRoute = DeleteRouteResponse'
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteRouteResponse''
+
+instance Prelude.Hashable DeleteRoute where
+  hashWithSalt _salt DeleteRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+
+instance Prelude.NFData DeleteRoute where
+  rnf DeleteRoute' {..} =
+    Prelude.rnf apiId `Prelude.seq` Prelude.rnf routeId
+
+instance Data.ToHeaders DeleteRoute where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRoute where
+  toPath DeleteRoute' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId
+      ]
+
+instance Data.ToQuery DeleteRoute where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRouteResponse'' smart constructor.
+data DeleteRouteResponse' = DeleteRouteResponse''
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRouteResponse' ::
+  DeleteRouteResponse'
+newDeleteRouteResponse' = DeleteRouteResponse''
+
+instance Prelude.NFData DeleteRouteResponse' where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteRouteRequestParameter.hs b/gen/Amazonka/ApiGatewayV2/DeleteRouteRequestParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteRouteRequestParameter.hs
@@ -0,0 +1,170 @@
+{-# 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.ApiGatewayV2.DeleteRouteRequestParameter
+-- 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 route request parameter.
+module Amazonka.ApiGatewayV2.DeleteRouteRequestParameter
+  ( -- * Creating a Request
+    DeleteRouteRequestParameter (..),
+    newDeleteRouteRequestParameter,
+
+    -- * Request Lenses
+    deleteRouteRequestParameter_requestParameterKey,
+    deleteRouteRequestParameter_apiId,
+    deleteRouteRequestParameter_routeId,
+
+    -- * Destructuring the Response
+    DeleteRouteRequestParameterResponse (..),
+    newDeleteRouteRequestParameterResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRouteRequestParameter' smart constructor.
+data DeleteRouteRequestParameter = DeleteRouteRequestParameter'
+  { -- | The route request parameter key.
+    requestParameterKey :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteRequestParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'requestParameterKey', 'deleteRouteRequestParameter_requestParameterKey' - The route request parameter key.
+--
+-- 'apiId', 'deleteRouteRequestParameter_apiId' - The API identifier.
+--
+-- 'routeId', 'deleteRouteRequestParameter_routeId' - The route ID.
+newDeleteRouteRequestParameter ::
+  -- | 'requestParameterKey'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  DeleteRouteRequestParameter
+newDeleteRouteRequestParameter
+  pRequestParameterKey_
+  pApiId_
+  pRouteId_ =
+    DeleteRouteRequestParameter'
+      { requestParameterKey =
+          pRequestParameterKey_,
+        apiId = pApiId_,
+        routeId = pRouteId_
+      }
+
+-- | The route request parameter key.
+deleteRouteRequestParameter_requestParameterKey :: Lens.Lens' DeleteRouteRequestParameter Prelude.Text
+deleteRouteRequestParameter_requestParameterKey = Lens.lens (\DeleteRouteRequestParameter' {requestParameterKey} -> requestParameterKey) (\s@DeleteRouteRequestParameter' {} a -> s {requestParameterKey = a} :: DeleteRouteRequestParameter)
+
+-- | The API identifier.
+deleteRouteRequestParameter_apiId :: Lens.Lens' DeleteRouteRequestParameter Prelude.Text
+deleteRouteRequestParameter_apiId = Lens.lens (\DeleteRouteRequestParameter' {apiId} -> apiId) (\s@DeleteRouteRequestParameter' {} a -> s {apiId = a} :: DeleteRouteRequestParameter)
+
+-- | The route ID.
+deleteRouteRequestParameter_routeId :: Lens.Lens' DeleteRouteRequestParameter Prelude.Text
+deleteRouteRequestParameter_routeId = Lens.lens (\DeleteRouteRequestParameter' {routeId} -> routeId) (\s@DeleteRouteRequestParameter' {} a -> s {routeId = a} :: DeleteRouteRequestParameter)
+
+instance Core.AWSRequest DeleteRouteRequestParameter where
+  type
+    AWSResponse DeleteRouteRequestParameter =
+      DeleteRouteRequestParameterResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteRouteRequestParameterResponse'
+
+instance Prelude.Hashable DeleteRouteRequestParameter where
+  hashWithSalt _salt DeleteRouteRequestParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` requestParameterKey
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+
+instance Prelude.NFData DeleteRouteRequestParameter where
+  rnf DeleteRouteRequestParameter' {..} =
+    Prelude.rnf requestParameterKey
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf routeId
+
+instance Data.ToHeaders DeleteRouteRequestParameter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRouteRequestParameter where
+  toPath DeleteRouteRequestParameter' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId,
+        "/requestparameters/",
+        Data.toBS requestParameterKey
+      ]
+
+instance Data.ToQuery DeleteRouteRequestParameter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRouteRequestParameterResponse' smart constructor.
+data DeleteRouteRequestParameterResponse = DeleteRouteRequestParameterResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteRequestParameterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRouteRequestParameterResponse ::
+  DeleteRouteRequestParameterResponse
+newDeleteRouteRequestParameterResponse =
+  DeleteRouteRequestParameterResponse'
+
+instance
+  Prelude.NFData
+    DeleteRouteRequestParameterResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteRouteResponse.hs b/gen/Amazonka/ApiGatewayV2/DeleteRouteResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteRouteResponse.hs
@@ -0,0 +1,166 @@
+{-# 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.ApiGatewayV2.DeleteRouteResponse
+-- 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 RouteResponse.
+module Amazonka.ApiGatewayV2.DeleteRouteResponse
+  ( -- * Creating a Request
+    DeleteRouteResponse (..),
+    newDeleteRouteResponse,
+
+    -- * Request Lenses
+    deleteRouteResponse_routeResponseId,
+    deleteRouteResponse_apiId,
+    deleteRouteResponse_routeId,
+
+    -- * Destructuring the Response
+    DeleteRouteResponseResponse (..),
+    newDeleteRouteResponseResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRouteResponse' smart constructor.
+data DeleteRouteResponse = DeleteRouteResponse'
+  { -- | The route response ID.
+    routeResponseId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'routeResponseId', 'deleteRouteResponse_routeResponseId' - The route response ID.
+--
+-- 'apiId', 'deleteRouteResponse_apiId' - The API identifier.
+--
+-- 'routeId', 'deleteRouteResponse_routeId' - The route ID.
+newDeleteRouteResponse ::
+  -- | 'routeResponseId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  DeleteRouteResponse
+newDeleteRouteResponse
+  pRouteResponseId_
+  pApiId_
+  pRouteId_ =
+    DeleteRouteResponse'
+      { routeResponseId =
+          pRouteResponseId_,
+        apiId = pApiId_,
+        routeId = pRouteId_
+      }
+
+-- | The route response ID.
+deleteRouteResponse_routeResponseId :: Lens.Lens' DeleteRouteResponse Prelude.Text
+deleteRouteResponse_routeResponseId = Lens.lens (\DeleteRouteResponse' {routeResponseId} -> routeResponseId) (\s@DeleteRouteResponse' {} a -> s {routeResponseId = a} :: DeleteRouteResponse)
+
+-- | The API identifier.
+deleteRouteResponse_apiId :: Lens.Lens' DeleteRouteResponse Prelude.Text
+deleteRouteResponse_apiId = Lens.lens (\DeleteRouteResponse' {apiId} -> apiId) (\s@DeleteRouteResponse' {} a -> s {apiId = a} :: DeleteRouteResponse)
+
+-- | The route ID.
+deleteRouteResponse_routeId :: Lens.Lens' DeleteRouteResponse Prelude.Text
+deleteRouteResponse_routeId = Lens.lens (\DeleteRouteResponse' {routeId} -> routeId) (\s@DeleteRouteResponse' {} a -> s {routeId = a} :: DeleteRouteResponse)
+
+instance Core.AWSRequest DeleteRouteResponse where
+  type
+    AWSResponse DeleteRouteResponse =
+      DeleteRouteResponseResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteRouteResponseResponse'
+
+instance Prelude.Hashable DeleteRouteResponse where
+  hashWithSalt _salt DeleteRouteResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` routeResponseId
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+
+instance Prelude.NFData DeleteRouteResponse where
+  rnf DeleteRouteResponse' {..} =
+    Prelude.rnf routeResponseId
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf routeId
+
+instance Data.ToHeaders DeleteRouteResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRouteResponse where
+  toPath DeleteRouteResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId,
+        "/routeresponses/",
+        Data.toBS routeResponseId
+      ]
+
+instance Data.ToQuery DeleteRouteResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRouteResponseResponse' smart constructor.
+data DeleteRouteResponseResponse = DeleteRouteResponseResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRouteResponseResponse ::
+  DeleteRouteResponseResponse
+newDeleteRouteResponseResponse =
+  DeleteRouteResponseResponse'
+
+instance Prelude.NFData DeleteRouteResponseResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteRouteSettings.hs b/gen/Amazonka/ApiGatewayV2/DeleteRouteSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteRouteSettings.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.ApiGatewayV2.DeleteRouteSettings
+-- 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 the RouteSettings for a stage.
+module Amazonka.ApiGatewayV2.DeleteRouteSettings
+  ( -- * Creating a Request
+    DeleteRouteSettings (..),
+    newDeleteRouteSettings,
+
+    -- * Request Lenses
+    deleteRouteSettings_stageName,
+    deleteRouteSettings_routeKey,
+    deleteRouteSettings_apiId,
+
+    -- * Destructuring the Response
+    DeleteRouteSettingsResponse (..),
+    newDeleteRouteSettingsResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRouteSettings' smart constructor.
+data DeleteRouteSettings = DeleteRouteSettings'
+  { -- | The stage name. Stage names can only contain alphanumeric characters,
+    -- hyphens, and underscores. Maximum length is 128 characters.
+    stageName :: Prelude.Text,
+    -- | The route key.
+    routeKey :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stageName', 'deleteRouteSettings_stageName' - The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+--
+-- 'routeKey', 'deleteRouteSettings_routeKey' - The route key.
+--
+-- 'apiId', 'deleteRouteSettings_apiId' - The API identifier.
+newDeleteRouteSettings ::
+  -- | 'stageName'
+  Prelude.Text ->
+  -- | 'routeKey'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  DeleteRouteSettings
+newDeleteRouteSettings pStageName_ pRouteKey_ pApiId_ =
+  DeleteRouteSettings'
+    { stageName = pStageName_,
+      routeKey = pRouteKey_,
+      apiId = pApiId_
+    }
+
+-- | The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+deleteRouteSettings_stageName :: Lens.Lens' DeleteRouteSettings Prelude.Text
+deleteRouteSettings_stageName = Lens.lens (\DeleteRouteSettings' {stageName} -> stageName) (\s@DeleteRouteSettings' {} a -> s {stageName = a} :: DeleteRouteSettings)
+
+-- | The route key.
+deleteRouteSettings_routeKey :: Lens.Lens' DeleteRouteSettings Prelude.Text
+deleteRouteSettings_routeKey = Lens.lens (\DeleteRouteSettings' {routeKey} -> routeKey) (\s@DeleteRouteSettings' {} a -> s {routeKey = a} :: DeleteRouteSettings)
+
+-- | The API identifier.
+deleteRouteSettings_apiId :: Lens.Lens' DeleteRouteSettings Prelude.Text
+deleteRouteSettings_apiId = Lens.lens (\DeleteRouteSettings' {apiId} -> apiId) (\s@DeleteRouteSettings' {} a -> s {apiId = a} :: DeleteRouteSettings)
+
+instance Core.AWSRequest DeleteRouteSettings where
+  type
+    AWSResponse DeleteRouteSettings =
+      DeleteRouteSettingsResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteRouteSettingsResponse'
+
+instance Prelude.Hashable DeleteRouteSettings where
+  hashWithSalt _salt DeleteRouteSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` routeKey
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData DeleteRouteSettings where
+  rnf DeleteRouteSettings' {..} =
+    Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf routeKey
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders DeleteRouteSettings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRouteSettings where
+  toPath DeleteRouteSettings' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/stages/",
+        Data.toBS stageName,
+        "/routesettings/",
+        Data.toBS routeKey
+      ]
+
+instance Data.ToQuery DeleteRouteSettings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRouteSettingsResponse' smart constructor.
+data DeleteRouteSettingsResponse = DeleteRouteSettingsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteSettingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRouteSettingsResponse ::
+  DeleteRouteSettingsResponse
+newDeleteRouteSettingsResponse =
+  DeleteRouteSettingsResponse'
+
+instance Prelude.NFData DeleteRouteSettingsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteStage.hs b/gen/Amazonka/ApiGatewayV2/DeleteStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteStage.hs
@@ -0,0 +1,145 @@
+{-# 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.ApiGatewayV2.DeleteStage
+-- 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 Stage.
+module Amazonka.ApiGatewayV2.DeleteStage
+  ( -- * Creating a Request
+    DeleteStage (..),
+    newDeleteStage,
+
+    -- * Request Lenses
+    deleteStage_stageName,
+    deleteStage_apiId,
+
+    -- * Destructuring the Response
+    DeleteStageResponse (..),
+    newDeleteStageResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteStage' smart constructor.
+data DeleteStage = DeleteStage'
+  { -- | The stage name. Stage names can only contain alphanumeric characters,
+    -- hyphens, and underscores. Maximum length is 128 characters.
+    stageName :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stageName', 'deleteStage_stageName' - The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+--
+-- 'apiId', 'deleteStage_apiId' - The API identifier.
+newDeleteStage ::
+  -- | 'stageName'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  DeleteStage
+newDeleteStage pStageName_ pApiId_ =
+  DeleteStage'
+    { stageName = pStageName_,
+      apiId = pApiId_
+    }
+
+-- | The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+deleteStage_stageName :: Lens.Lens' DeleteStage Prelude.Text
+deleteStage_stageName = Lens.lens (\DeleteStage' {stageName} -> stageName) (\s@DeleteStage' {} a -> s {stageName = a} :: DeleteStage)
+
+-- | The API identifier.
+deleteStage_apiId :: Lens.Lens' DeleteStage Prelude.Text
+deleteStage_apiId = Lens.lens (\DeleteStage' {apiId} -> apiId) (\s@DeleteStage' {} a -> s {apiId = a} :: DeleteStage)
+
+instance Core.AWSRequest DeleteStage where
+  type AWSResponse DeleteStage = DeleteStageResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteStageResponse'
+
+instance Prelude.Hashable DeleteStage where
+  hashWithSalt _salt DeleteStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData DeleteStage where
+  rnf DeleteStage' {..} =
+    Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders DeleteStage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteStage where
+  toPath DeleteStage' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/stages/",
+        Data.toBS stageName
+      ]
+
+instance Data.ToQuery DeleteStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStageResponse' smart constructor.
+data DeleteStageResponse = DeleteStageResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteStageResponse ::
+  DeleteStageResponse
+newDeleteStageResponse = DeleteStageResponse'
+
+instance Prelude.NFData DeleteStageResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/DeleteVpcLink.hs b/gen/Amazonka/ApiGatewayV2/DeleteVpcLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/DeleteVpcLink.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.DeleteVpcLink
+-- 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 VPC link.
+module Amazonka.ApiGatewayV2.DeleteVpcLink
+  ( -- * Creating a Request
+    DeleteVpcLink (..),
+    newDeleteVpcLink,
+
+    -- * Request Lenses
+    deleteVpcLink_vpcLinkId,
+
+    -- * Destructuring the Response
+    DeleteVpcLinkResponse (..),
+    newDeleteVpcLinkResponse,
+
+    -- * Response Lenses
+    deleteVpcLinkResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVpcLink' smart constructor.
+data DeleteVpcLink = DeleteVpcLink'
+  { -- | The ID of the VPC link.
+    vpcLinkId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcLinkId', 'deleteVpcLink_vpcLinkId' - The ID of the VPC link.
+newDeleteVpcLink ::
+  -- | 'vpcLinkId'
+  Prelude.Text ->
+  DeleteVpcLink
+newDeleteVpcLink pVpcLinkId_ =
+  DeleteVpcLink' {vpcLinkId = pVpcLinkId_}
+
+-- | The ID of the VPC link.
+deleteVpcLink_vpcLinkId :: Lens.Lens' DeleteVpcLink Prelude.Text
+deleteVpcLink_vpcLinkId = Lens.lens (\DeleteVpcLink' {vpcLinkId} -> vpcLinkId) (\s@DeleteVpcLink' {} a -> s {vpcLinkId = a} :: DeleteVpcLink)
+
+instance Core.AWSRequest DeleteVpcLink where
+  type
+    AWSResponse DeleteVpcLink =
+      DeleteVpcLinkResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteVpcLinkResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteVpcLink where
+  hashWithSalt _salt DeleteVpcLink' {..} =
+    _salt `Prelude.hashWithSalt` vpcLinkId
+
+instance Prelude.NFData DeleteVpcLink where
+  rnf DeleteVpcLink' {..} = Prelude.rnf vpcLinkId
+
+instance Data.ToHeaders DeleteVpcLink where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteVpcLink where
+  toPath DeleteVpcLink' {..} =
+    Prelude.mconcat
+      ["/v2/vpclinks/", Data.toBS vpcLinkId]
+
+instance Data.ToQuery DeleteVpcLink where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVpcLinkResponse' smart constructor.
+data DeleteVpcLinkResponse = DeleteVpcLinkResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcLinkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteVpcLinkResponse_httpStatus' - The response's http status code.
+newDeleteVpcLinkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVpcLinkResponse
+newDeleteVpcLinkResponse pHttpStatus_ =
+  DeleteVpcLinkResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteVpcLinkResponse_httpStatus :: Lens.Lens' DeleteVpcLinkResponse Prelude.Int
+deleteVpcLinkResponse_httpStatus = Lens.lens (\DeleteVpcLinkResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcLinkResponse' {} a -> s {httpStatus = a} :: DeleteVpcLinkResponse)
+
+instance Prelude.NFData DeleteVpcLinkResponse where
+  rnf DeleteVpcLinkResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/ExportApi.hs b/gen/Amazonka/ApiGatewayV2/ExportApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/ExportApi.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.ApiGatewayV2.ExportApi
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- -- | Undocumented operation.
+module Amazonka.ApiGatewayV2.ExportApi
+  ( -- * Creating a Request
+    ExportApi (..),
+    newExportApi,
+
+    -- * Request Lenses
+    exportApi_exportVersion,
+    exportApi_includeExtensions,
+    exportApi_stageName,
+    exportApi_specification,
+    exportApi_outputType,
+    exportApi_apiId,
+
+    -- * Destructuring the Response
+    ExportApiResponse (..),
+    newExportApiResponse,
+
+    -- * Response Lenses
+    exportApiResponse_body,
+    exportApiResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportApi' smart constructor.
+data ExportApi = ExportApi'
+  { -- | The version of the API Gateway export algorithm. API Gateway uses the
+    -- latest version by default. Currently, the only supported version is 1.0.
+    exportVersion :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether to include
+    -- <https://docs.aws.amazon.com//apigateway/latest/developerguide/api-gateway-swagger-extensions.html API Gateway extensions>
+    -- in the exported API definition. API Gateway extensions are included by
+    -- default.
+    includeExtensions :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the API stage to export. If you don\'t specify this
+    -- property, a representation of the latest API configuration is exported.
+    stageName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the API specification to use. OAS30, for OpenAPI 3.0, is
+    -- the only supported value.
+    specification :: Prelude.Text,
+    -- | The output type of the exported definition file. Valid values are JSON
+    -- and YAML.
+    outputType :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportApi' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportVersion', 'exportApi_exportVersion' - The version of the API Gateway export algorithm. API Gateway uses the
+-- latest version by default. Currently, the only supported version is 1.0.
+--
+-- 'includeExtensions', 'exportApi_includeExtensions' - Specifies whether to include
+-- <https://docs.aws.amazon.com//apigateway/latest/developerguide/api-gateway-swagger-extensions.html API Gateway extensions>
+-- in the exported API definition. API Gateway extensions are included by
+-- default.
+--
+-- 'stageName', 'exportApi_stageName' - The name of the API stage to export. If you don\'t specify this
+-- property, a representation of the latest API configuration is exported.
+--
+-- 'specification', 'exportApi_specification' - The version of the API specification to use. OAS30, for OpenAPI 3.0, is
+-- the only supported value.
+--
+-- 'outputType', 'exportApi_outputType' - The output type of the exported definition file. Valid values are JSON
+-- and YAML.
+--
+-- 'apiId', 'exportApi_apiId' - The API identifier.
+newExportApi ::
+  -- | 'specification'
+  Prelude.Text ->
+  -- | 'outputType'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  ExportApi
+newExportApi pSpecification_ pOutputType_ pApiId_ =
+  ExportApi'
+    { exportVersion = Prelude.Nothing,
+      includeExtensions = Prelude.Nothing,
+      stageName = Prelude.Nothing,
+      specification = pSpecification_,
+      outputType = pOutputType_,
+      apiId = pApiId_
+    }
+
+-- | The version of the API Gateway export algorithm. API Gateway uses the
+-- latest version by default. Currently, the only supported version is 1.0.
+exportApi_exportVersion :: Lens.Lens' ExportApi (Prelude.Maybe Prelude.Text)
+exportApi_exportVersion = Lens.lens (\ExportApi' {exportVersion} -> exportVersion) (\s@ExportApi' {} a -> s {exportVersion = a} :: ExportApi)
+
+-- | Specifies whether to include
+-- <https://docs.aws.amazon.com//apigateway/latest/developerguide/api-gateway-swagger-extensions.html API Gateway extensions>
+-- in the exported API definition. API Gateway extensions are included by
+-- default.
+exportApi_includeExtensions :: Lens.Lens' ExportApi (Prelude.Maybe Prelude.Bool)
+exportApi_includeExtensions = Lens.lens (\ExportApi' {includeExtensions} -> includeExtensions) (\s@ExportApi' {} a -> s {includeExtensions = a} :: ExportApi)
+
+-- | The name of the API stage to export. If you don\'t specify this
+-- property, a representation of the latest API configuration is exported.
+exportApi_stageName :: Lens.Lens' ExportApi (Prelude.Maybe Prelude.Text)
+exportApi_stageName = Lens.lens (\ExportApi' {stageName} -> stageName) (\s@ExportApi' {} a -> s {stageName = a} :: ExportApi)
+
+-- | The version of the API specification to use. OAS30, for OpenAPI 3.0, is
+-- the only supported value.
+exportApi_specification :: Lens.Lens' ExportApi Prelude.Text
+exportApi_specification = Lens.lens (\ExportApi' {specification} -> specification) (\s@ExportApi' {} a -> s {specification = a} :: ExportApi)
+
+-- | The output type of the exported definition file. Valid values are JSON
+-- and YAML.
+exportApi_outputType :: Lens.Lens' ExportApi Prelude.Text
+exportApi_outputType = Lens.lens (\ExportApi' {outputType} -> outputType) (\s@ExportApi' {} a -> s {outputType = a} :: ExportApi)
+
+-- | The API identifier.
+exportApi_apiId :: Lens.Lens' ExportApi Prelude.Text
+exportApi_apiId = Lens.lens (\ExportApi' {apiId} -> apiId) (\s@ExportApi' {} a -> s {apiId = a} :: ExportApi)
+
+instance Core.AWSRequest ExportApi where
+  type AWSResponse ExportApi = ExportApiResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          ExportApiResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ExportApi where
+  hashWithSalt _salt ExportApi' {..} =
+    _salt
+      `Prelude.hashWithSalt` exportVersion
+      `Prelude.hashWithSalt` includeExtensions
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` specification
+      `Prelude.hashWithSalt` outputType
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData ExportApi where
+  rnf ExportApi' {..} =
+    Prelude.rnf exportVersion
+      `Prelude.seq` Prelude.rnf includeExtensions
+      `Prelude.seq` Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf specification
+      `Prelude.seq` Prelude.rnf outputType
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders ExportApi where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ExportApi where
+  toPath ExportApi' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/exports/",
+        Data.toBS specification
+      ]
+
+instance Data.ToQuery ExportApi where
+  toQuery ExportApi' {..} =
+    Prelude.mconcat
+      [ "exportVersion" Data.=: exportVersion,
+        "includeExtensions" Data.=: includeExtensions,
+        "stageName" Data.=: stageName,
+        "outputType" Data.=: outputType
+      ]
+
+-- | /See:/ 'newExportApiResponse' smart constructor.
+data ExportApiResponse = ExportApiResponse'
+  { body :: Prelude.Maybe Prelude.ByteString,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportApiResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'body', 'exportApiResponse_body' - Undocumented member.
+--
+-- 'httpStatus', 'exportApiResponse_httpStatus' - The response's http status code.
+newExportApiResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportApiResponse
+newExportApiResponse pHttpStatus_ =
+  ExportApiResponse'
+    { body = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+exportApiResponse_body :: Lens.Lens' ExportApiResponse (Prelude.Maybe Prelude.ByteString)
+exportApiResponse_body = Lens.lens (\ExportApiResponse' {body} -> body) (\s@ExportApiResponse' {} a -> s {body = a} :: ExportApiResponse)
+
+-- | The response's http status code.
+exportApiResponse_httpStatus :: Lens.Lens' ExportApiResponse Prelude.Int
+exportApiResponse_httpStatus = Lens.lens (\ExportApiResponse' {httpStatus} -> httpStatus) (\s@ExportApiResponse' {} a -> s {httpStatus = a} :: ExportApiResponse)
+
+instance Prelude.NFData ExportApiResponse where
+  rnf ExportApiResponse' {..} =
+    Prelude.rnf body
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetApi.hs b/gen/Amazonka/ApiGatewayV2/GetApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetApi.hs
@@ -0,0 +1,382 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.GetApi
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an Api resource.
+module Amazonka.ApiGatewayV2.GetApi
+  ( -- * Creating a Request
+    GetApi (..),
+    newGetApi,
+
+    -- * Request Lenses
+    getApi_apiId,
+
+    -- * Destructuring the Response
+    GetApiResponse (..),
+    newGetApiResponse,
+
+    -- * Response Lenses
+    getApiResponse_apiEndpoint,
+    getApiResponse_apiGatewayManaged,
+    getApiResponse_apiId,
+    getApiResponse_apiKeySelectionExpression,
+    getApiResponse_corsConfiguration,
+    getApiResponse_createdDate,
+    getApiResponse_description,
+    getApiResponse_disableExecuteApiEndpoint,
+    getApiResponse_disableSchemaValidation,
+    getApiResponse_importInfo,
+    getApiResponse_name,
+    getApiResponse_protocolType,
+    getApiResponse_routeSelectionExpression,
+    getApiResponse_tags,
+    getApiResponse_version,
+    getApiResponse_warnings,
+    getApiResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetApi' smart constructor.
+data GetApi = GetApi'
+  { -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApi' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'getApi_apiId' - The API identifier.
+newGetApi ::
+  -- | 'apiId'
+  Prelude.Text ->
+  GetApi
+newGetApi pApiId_ = GetApi' {apiId = pApiId_}
+
+-- | The API identifier.
+getApi_apiId :: Lens.Lens' GetApi Prelude.Text
+getApi_apiId = Lens.lens (\GetApi' {apiId} -> apiId) (\s@GetApi' {} a -> s {apiId = a} :: GetApi)
+
+instance Core.AWSRequest GetApi where
+  type AWSResponse GetApi = GetApiResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetApiResponse'
+            Prelude.<$> (x Data..?> "apiEndpoint")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiKeySelectionExpression")
+            Prelude.<*> (x Data..?> "corsConfiguration")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "disableExecuteApiEndpoint")
+            Prelude.<*> (x Data..?> "disableSchemaValidation")
+            Prelude.<*> (x Data..?> "importInfo" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "protocolType")
+            Prelude.<*> (x Data..?> "routeSelectionExpression")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "warnings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetApi where
+  hashWithSalt _salt GetApi' {..} =
+    _salt `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetApi where
+  rnf GetApi' {..} = Prelude.rnf apiId
+
+instance Data.ToHeaders GetApi where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApi where
+  toPath GetApi' {..} =
+    Prelude.mconcat ["/v2/apis/", Data.toBS apiId]
+
+instance Data.ToQuery GetApi where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetApiResponse' smart constructor.
+data GetApiResponse = GetApiResponse'
+  { -- | The URI of the API, of the form
+    -- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+    -- appended to this URI to form a complete path to a deployed API stage.
+    apiEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether an API is managed by API Gateway. You can\'t update or
+    -- delete a managed API by using API Gateway. A managed API can be deleted
+    -- only through the tooling or service that created it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The API ID.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | The timestamp when the API was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | The validation information during API import. This may include
+    -- particular properties of your OpenAPI definition which are ignored
+    -- during import. Supported only for HTTP APIs.
+    importInfo :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the API.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The API protocol.
+    protocolType :: Prelude.Maybe ProtocolType,
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A collection of tags associated with the API.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The warning messages reported when failonwarnings is turned on during
+    -- API import.
+    warnings :: 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 'GetApiResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiEndpoint', 'getApiResponse_apiEndpoint' - The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+--
+-- 'apiGatewayManaged', 'getApiResponse_apiGatewayManaged' - Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+--
+-- 'apiId', 'getApiResponse_apiId' - The API ID.
+--
+-- 'apiKeySelectionExpression', 'getApiResponse_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'getApiResponse_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs.
+--
+-- 'createdDate', 'getApiResponse_createdDate' - The timestamp when the API was created.
+--
+-- 'description', 'getApiResponse_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'getApiResponse_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'getApiResponse_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'importInfo', 'getApiResponse_importInfo' - The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+--
+-- 'name', 'getApiResponse_name' - The name of the API.
+--
+-- 'protocolType', 'getApiResponse_protocolType' - The API protocol.
+--
+-- 'routeSelectionExpression', 'getApiResponse_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'tags', 'getApiResponse_tags' - A collection of tags associated with the API.
+--
+-- 'version', 'getApiResponse_version' - A version identifier for the API.
+--
+-- 'warnings', 'getApiResponse_warnings' - The warning messages reported when failonwarnings is turned on during
+-- API import.
+--
+-- 'httpStatus', 'getApiResponse_httpStatus' - The response's http status code.
+newGetApiResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetApiResponse
+newGetApiResponse pHttpStatus_ =
+  GetApiResponse'
+    { apiEndpoint = Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      apiId = Prelude.Nothing,
+      apiKeySelectionExpression = Prelude.Nothing,
+      corsConfiguration = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disableExecuteApiEndpoint = Prelude.Nothing,
+      disableSchemaValidation = Prelude.Nothing,
+      importInfo = Prelude.Nothing,
+      name = Prelude.Nothing,
+      protocolType = Prelude.Nothing,
+      routeSelectionExpression = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      warnings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+getApiResponse_apiEndpoint :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Text)
+getApiResponse_apiEndpoint = Lens.lens (\GetApiResponse' {apiEndpoint} -> apiEndpoint) (\s@GetApiResponse' {} a -> s {apiEndpoint = a} :: GetApiResponse)
+
+-- | Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+getApiResponse_apiGatewayManaged :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Bool)
+getApiResponse_apiGatewayManaged = Lens.lens (\GetApiResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@GetApiResponse' {} a -> s {apiGatewayManaged = a} :: GetApiResponse)
+
+-- | The API ID.
+getApiResponse_apiId :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Text)
+getApiResponse_apiId = Lens.lens (\GetApiResponse' {apiId} -> apiId) (\s@GetApiResponse' {} a -> s {apiId = a} :: GetApiResponse)
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+getApiResponse_apiKeySelectionExpression :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Text)
+getApiResponse_apiKeySelectionExpression = Lens.lens (\GetApiResponse' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@GetApiResponse' {} a -> s {apiKeySelectionExpression = a} :: GetApiResponse)
+
+-- | A CORS configuration. Supported only for HTTP APIs.
+getApiResponse_corsConfiguration :: Lens.Lens' GetApiResponse (Prelude.Maybe Cors)
+getApiResponse_corsConfiguration = Lens.lens (\GetApiResponse' {corsConfiguration} -> corsConfiguration) (\s@GetApiResponse' {} a -> s {corsConfiguration = a} :: GetApiResponse)
+
+-- | The timestamp when the API was created.
+getApiResponse_createdDate :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.UTCTime)
+getApiResponse_createdDate = Lens.lens (\GetApiResponse' {createdDate} -> createdDate) (\s@GetApiResponse' {} a -> s {createdDate = a} :: GetApiResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the API.
+getApiResponse_description :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Text)
+getApiResponse_description = Lens.lens (\GetApiResponse' {description} -> description) (\s@GetApiResponse' {} a -> s {description = a} :: GetApiResponse)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+getApiResponse_disableExecuteApiEndpoint :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Bool)
+getApiResponse_disableExecuteApiEndpoint = Lens.lens (\GetApiResponse' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@GetApiResponse' {} a -> s {disableExecuteApiEndpoint = a} :: GetApiResponse)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+getApiResponse_disableSchemaValidation :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Bool)
+getApiResponse_disableSchemaValidation = Lens.lens (\GetApiResponse' {disableSchemaValidation} -> disableSchemaValidation) (\s@GetApiResponse' {} a -> s {disableSchemaValidation = a} :: GetApiResponse)
+
+-- | The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+getApiResponse_importInfo :: Lens.Lens' GetApiResponse (Prelude.Maybe [Prelude.Text])
+getApiResponse_importInfo = Lens.lens (\GetApiResponse' {importInfo} -> importInfo) (\s@GetApiResponse' {} a -> s {importInfo = a} :: GetApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the API.
+getApiResponse_name :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Text)
+getApiResponse_name = Lens.lens (\GetApiResponse' {name} -> name) (\s@GetApiResponse' {} a -> s {name = a} :: GetApiResponse)
+
+-- | The API protocol.
+getApiResponse_protocolType :: Lens.Lens' GetApiResponse (Prelude.Maybe ProtocolType)
+getApiResponse_protocolType = Lens.lens (\GetApiResponse' {protocolType} -> protocolType) (\s@GetApiResponse' {} a -> s {protocolType = a} :: GetApiResponse)
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+getApiResponse_routeSelectionExpression :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Text)
+getApiResponse_routeSelectionExpression = Lens.lens (\GetApiResponse' {routeSelectionExpression} -> routeSelectionExpression) (\s@GetApiResponse' {} a -> s {routeSelectionExpression = a} :: GetApiResponse)
+
+-- | A collection of tags associated with the API.
+getApiResponse_tags :: Lens.Lens' GetApiResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getApiResponse_tags = Lens.lens (\GetApiResponse' {tags} -> tags) (\s@GetApiResponse' {} a -> s {tags = a} :: GetApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A version identifier for the API.
+getApiResponse_version :: Lens.Lens' GetApiResponse (Prelude.Maybe Prelude.Text)
+getApiResponse_version = Lens.lens (\GetApiResponse' {version} -> version) (\s@GetApiResponse' {} a -> s {version = a} :: GetApiResponse)
+
+-- | The warning messages reported when failonwarnings is turned on during
+-- API import.
+getApiResponse_warnings :: Lens.Lens' GetApiResponse (Prelude.Maybe [Prelude.Text])
+getApiResponse_warnings = Lens.lens (\GetApiResponse' {warnings} -> warnings) (\s@GetApiResponse' {} a -> s {warnings = a} :: GetApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getApiResponse_httpStatus :: Lens.Lens' GetApiResponse Prelude.Int
+getApiResponse_httpStatus = Lens.lens (\GetApiResponse' {httpStatus} -> httpStatus) (\s@GetApiResponse' {} a -> s {httpStatus = a} :: GetApiResponse)
+
+instance Prelude.NFData GetApiResponse where
+  rnf GetApiResponse' {..} =
+    Prelude.rnf apiEndpoint
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf importInfo
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf warnings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetApiMapping.hs b/gen/Amazonka/ApiGatewayV2/GetApiMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetApiMapping.hs
@@ -0,0 +1,216 @@
+{-# 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.ApiGatewayV2.GetApiMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an API mapping.
+module Amazonka.ApiGatewayV2.GetApiMapping
+  ( -- * Creating a Request
+    GetApiMapping (..),
+    newGetApiMapping,
+
+    -- * Request Lenses
+    getApiMapping_apiMappingId,
+    getApiMapping_domainName,
+
+    -- * Destructuring the Response
+    GetApiMappingResponse (..),
+    newGetApiMappingResponse,
+
+    -- * Response Lenses
+    getApiMappingResponse_apiId,
+    getApiMappingResponse_apiMappingId,
+    getApiMappingResponse_apiMappingKey,
+    getApiMappingResponse_stage,
+    getApiMappingResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetApiMapping' smart constructor.
+data GetApiMapping = GetApiMapping'
+  { -- | The API mapping identifier.
+    apiMappingId :: Prelude.Text,
+    -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApiMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingId', 'getApiMapping_apiMappingId' - The API mapping identifier.
+--
+-- 'domainName', 'getApiMapping_domainName' - The domain name.
+newGetApiMapping ::
+  -- | 'apiMappingId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  GetApiMapping
+newGetApiMapping pApiMappingId_ pDomainName_ =
+  GetApiMapping'
+    { apiMappingId = pApiMappingId_,
+      domainName = pDomainName_
+    }
+
+-- | The API mapping identifier.
+getApiMapping_apiMappingId :: Lens.Lens' GetApiMapping Prelude.Text
+getApiMapping_apiMappingId = Lens.lens (\GetApiMapping' {apiMappingId} -> apiMappingId) (\s@GetApiMapping' {} a -> s {apiMappingId = a} :: GetApiMapping)
+
+-- | The domain name.
+getApiMapping_domainName :: Lens.Lens' GetApiMapping Prelude.Text
+getApiMapping_domainName = Lens.lens (\GetApiMapping' {domainName} -> domainName) (\s@GetApiMapping' {} a -> s {domainName = a} :: GetApiMapping)
+
+instance Core.AWSRequest GetApiMapping where
+  type
+    AWSResponse GetApiMapping =
+      GetApiMappingResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetApiMappingResponse'
+            Prelude.<$> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiMappingId")
+            Prelude.<*> (x Data..?> "apiMappingKey")
+            Prelude.<*> (x Data..?> "stage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetApiMapping where
+  hashWithSalt _salt GetApiMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiMappingId
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData GetApiMapping where
+  rnf GetApiMapping' {..} =
+    Prelude.rnf apiMappingId
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders GetApiMapping where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApiMapping where
+  toPath GetApiMapping' {..} =
+    Prelude.mconcat
+      [ "/v2/domainnames/",
+        Data.toBS domainName,
+        "/apimappings/",
+        Data.toBS apiMappingId
+      ]
+
+instance Data.ToQuery GetApiMapping where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetApiMappingResponse' smart constructor.
+data GetApiMappingResponse = GetApiMappingResponse'
+  { -- | The API identifier.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping identifier.
+    apiMappingId :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping key.
+    apiMappingKey :: Prelude.Maybe Prelude.Text,
+    -- | The API stage.
+    stage :: 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 'GetApiMappingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'getApiMappingResponse_apiId' - The API identifier.
+--
+-- 'apiMappingId', 'getApiMappingResponse_apiMappingId' - The API mapping identifier.
+--
+-- 'apiMappingKey', 'getApiMappingResponse_apiMappingKey' - The API mapping key.
+--
+-- 'stage', 'getApiMappingResponse_stage' - The API stage.
+--
+-- 'httpStatus', 'getApiMappingResponse_httpStatus' - The response's http status code.
+newGetApiMappingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetApiMappingResponse
+newGetApiMappingResponse pHttpStatus_ =
+  GetApiMappingResponse'
+    { apiId = Prelude.Nothing,
+      apiMappingId = Prelude.Nothing,
+      apiMappingKey = Prelude.Nothing,
+      stage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The API identifier.
+getApiMappingResponse_apiId :: Lens.Lens' GetApiMappingResponse (Prelude.Maybe Prelude.Text)
+getApiMappingResponse_apiId = Lens.lens (\GetApiMappingResponse' {apiId} -> apiId) (\s@GetApiMappingResponse' {} a -> s {apiId = a} :: GetApiMappingResponse)
+
+-- | The API mapping identifier.
+getApiMappingResponse_apiMappingId :: Lens.Lens' GetApiMappingResponse (Prelude.Maybe Prelude.Text)
+getApiMappingResponse_apiMappingId = Lens.lens (\GetApiMappingResponse' {apiMappingId} -> apiMappingId) (\s@GetApiMappingResponse' {} a -> s {apiMappingId = a} :: GetApiMappingResponse)
+
+-- | The API mapping key.
+getApiMappingResponse_apiMappingKey :: Lens.Lens' GetApiMappingResponse (Prelude.Maybe Prelude.Text)
+getApiMappingResponse_apiMappingKey = Lens.lens (\GetApiMappingResponse' {apiMappingKey} -> apiMappingKey) (\s@GetApiMappingResponse' {} a -> s {apiMappingKey = a} :: GetApiMappingResponse)
+
+-- | The API stage.
+getApiMappingResponse_stage :: Lens.Lens' GetApiMappingResponse (Prelude.Maybe Prelude.Text)
+getApiMappingResponse_stage = Lens.lens (\GetApiMappingResponse' {stage} -> stage) (\s@GetApiMappingResponse' {} a -> s {stage = a} :: GetApiMappingResponse)
+
+-- | The response's http status code.
+getApiMappingResponse_httpStatus :: Lens.Lens' GetApiMappingResponse Prelude.Int
+getApiMappingResponse_httpStatus = Lens.lens (\GetApiMappingResponse' {httpStatus} -> httpStatus) (\s@GetApiMappingResponse' {} a -> s {httpStatus = a} :: GetApiMappingResponse)
+
+instance Prelude.NFData GetApiMappingResponse where
+  rnf GetApiMappingResponse' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiMappingId
+      `Prelude.seq` Prelude.rnf apiMappingKey
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetApiMappings.hs b/gen/Amazonka/ApiGatewayV2/GetApiMappings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetApiMappings.hs
@@ -0,0 +1,211 @@
+{-# 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.ApiGatewayV2.GetApiMappings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets API mappings.
+module Amazonka.ApiGatewayV2.GetApiMappings
+  ( -- * Creating a Request
+    GetApiMappings (..),
+    newGetApiMappings,
+
+    -- * Request Lenses
+    getApiMappings_maxResults,
+    getApiMappings_nextToken,
+    getApiMappings_domainName,
+
+    -- * Destructuring the Response
+    GetApiMappingsResponse (..),
+    newGetApiMappingsResponse,
+
+    -- * Response Lenses
+    getApiMappingsResponse_items,
+    getApiMappingsResponse_nextToken,
+    getApiMappingsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetApiMappings' smart constructor.
+data GetApiMappings = GetApiMappings'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApiMappings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getApiMappings_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getApiMappings_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'domainName', 'getApiMappings_domainName' - The domain name.
+newGetApiMappings ::
+  -- | 'domainName'
+  Prelude.Text ->
+  GetApiMappings
+newGetApiMappings pDomainName_ =
+  GetApiMappings'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getApiMappings_maxResults :: Lens.Lens' GetApiMappings (Prelude.Maybe Prelude.Text)
+getApiMappings_maxResults = Lens.lens (\GetApiMappings' {maxResults} -> maxResults) (\s@GetApiMappings' {} a -> s {maxResults = a} :: GetApiMappings)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getApiMappings_nextToken :: Lens.Lens' GetApiMappings (Prelude.Maybe Prelude.Text)
+getApiMappings_nextToken = Lens.lens (\GetApiMappings' {nextToken} -> nextToken) (\s@GetApiMappings' {} a -> s {nextToken = a} :: GetApiMappings)
+
+-- | The domain name.
+getApiMappings_domainName :: Lens.Lens' GetApiMappings Prelude.Text
+getApiMappings_domainName = Lens.lens (\GetApiMappings' {domainName} -> domainName) (\s@GetApiMappings' {} a -> s {domainName = a} :: GetApiMappings)
+
+instance Core.AWSRequest GetApiMappings where
+  type
+    AWSResponse GetApiMappings =
+      GetApiMappingsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetApiMappingsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetApiMappings where
+  hashWithSalt _salt GetApiMappings' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData GetApiMappings where
+  rnf GetApiMappings' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders GetApiMappings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApiMappings where
+  toPath GetApiMappings' {..} =
+    Prelude.mconcat
+      [ "/v2/domainnames/",
+        Data.toBS domainName,
+        "/apimappings"
+      ]
+
+instance Data.ToQuery GetApiMappings where
+  toQuery GetApiMappings' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetApiMappingsResponse' smart constructor.
+data GetApiMappingsResponse = GetApiMappingsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [ApiMapping],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApiMappingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getApiMappingsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getApiMappingsResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getApiMappingsResponse_httpStatus' - The response's http status code.
+newGetApiMappingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetApiMappingsResponse
+newGetApiMappingsResponse pHttpStatus_ =
+  GetApiMappingsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getApiMappingsResponse_items :: Lens.Lens' GetApiMappingsResponse (Prelude.Maybe [ApiMapping])
+getApiMappingsResponse_items = Lens.lens (\GetApiMappingsResponse' {items} -> items) (\s@GetApiMappingsResponse' {} a -> s {items = a} :: GetApiMappingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getApiMappingsResponse_nextToken :: Lens.Lens' GetApiMappingsResponse (Prelude.Maybe Prelude.Text)
+getApiMappingsResponse_nextToken = Lens.lens (\GetApiMappingsResponse' {nextToken} -> nextToken) (\s@GetApiMappingsResponse' {} a -> s {nextToken = a} :: GetApiMappingsResponse)
+
+-- | The response's http status code.
+getApiMappingsResponse_httpStatus :: Lens.Lens' GetApiMappingsResponse Prelude.Int
+getApiMappingsResponse_httpStatus = Lens.lens (\GetApiMappingsResponse' {httpStatus} -> httpStatus) (\s@GetApiMappingsResponse' {} a -> s {httpStatus = a} :: GetApiMappingsResponse)
+
+instance Prelude.NFData GetApiMappingsResponse where
+  rnf GetApiMappingsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetApis.hs b/gen/Amazonka/ApiGatewayV2/GetApis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetApis.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.GetApis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a collection of Api resources.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetApis
+  ( -- * Creating a Request
+    GetApis (..),
+    newGetApis,
+
+    -- * Request Lenses
+    getApis_maxResults,
+    getApis_nextToken,
+
+    -- * Destructuring the Response
+    GetApisResponse (..),
+    newGetApisResponse,
+
+    -- * Response Lenses
+    getApisResponse_items,
+    getApisResponse_nextToken,
+    getApisResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetApis' smart constructor.
+data GetApis = GetApis'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getApis_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getApis_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+newGetApis ::
+  GetApis
+newGetApis =
+  GetApis'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getApis_maxResults :: Lens.Lens' GetApis (Prelude.Maybe Prelude.Text)
+getApis_maxResults = Lens.lens (\GetApis' {maxResults} -> maxResults) (\s@GetApis' {} a -> s {maxResults = a} :: GetApis)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getApis_nextToken :: Lens.Lens' GetApis (Prelude.Maybe Prelude.Text)
+getApis_nextToken = Lens.lens (\GetApis' {nextToken} -> nextToken) (\s@GetApis' {} a -> s {nextToken = a} :: GetApis)
+
+instance Core.AWSPager GetApis where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getApisResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getApisResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getApis_nextToken
+          Lens..~ rs
+          Lens.^? getApisResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetApis where
+  type AWSResponse GetApis = GetApisResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetApisResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetApis where
+  hashWithSalt _salt GetApis' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetApis where
+  rnf GetApis' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetApis where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApis where
+  toPath = Prelude.const "/v2/apis"
+
+instance Data.ToQuery GetApis where
+  toQuery GetApis' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetApisResponse' smart constructor.
+data GetApisResponse = GetApisResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Api],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getApisResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getApisResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getApisResponse_httpStatus' - The response's http status code.
+newGetApisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetApisResponse
+newGetApisResponse pHttpStatus_ =
+  GetApisResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getApisResponse_items :: Lens.Lens' GetApisResponse (Prelude.Maybe [Api])
+getApisResponse_items = Lens.lens (\GetApisResponse' {items} -> items) (\s@GetApisResponse' {} a -> s {items = a} :: GetApisResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getApisResponse_nextToken :: Lens.Lens' GetApisResponse (Prelude.Maybe Prelude.Text)
+getApisResponse_nextToken = Lens.lens (\GetApisResponse' {nextToken} -> nextToken) (\s@GetApisResponse' {} a -> s {nextToken = a} :: GetApisResponse)
+
+-- | The response's http status code.
+getApisResponse_httpStatus :: Lens.Lens' GetApisResponse Prelude.Int
+getApisResponse_httpStatus = Lens.lens (\GetApisResponse' {httpStatus} -> httpStatus) (\s@GetApisResponse' {} a -> s {httpStatus = a} :: GetApisResponse)
+
+instance Prelude.NFData GetApisResponse where
+  rnf GetApisResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetAuthorizer.hs b/gen/Amazonka/ApiGatewayV2/GetAuthorizer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetAuthorizer.hs
@@ -0,0 +1,448 @@
+{-# 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.ApiGatewayV2.GetAuthorizer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an Authorizer.
+module Amazonka.ApiGatewayV2.GetAuthorizer
+  ( -- * Creating a Request
+    GetAuthorizer (..),
+    newGetAuthorizer,
+
+    -- * Request Lenses
+    getAuthorizer_authorizerId,
+    getAuthorizer_apiId,
+
+    -- * Destructuring the Response
+    GetAuthorizerResponse (..),
+    newGetAuthorizerResponse,
+
+    -- * Response Lenses
+    getAuthorizerResponse_authorizerCredentialsArn,
+    getAuthorizerResponse_authorizerId,
+    getAuthorizerResponse_authorizerPayloadFormatVersion,
+    getAuthorizerResponse_authorizerResultTtlInSeconds,
+    getAuthorizerResponse_authorizerType,
+    getAuthorizerResponse_authorizerUri,
+    getAuthorizerResponse_enableSimpleResponses,
+    getAuthorizerResponse_identitySource,
+    getAuthorizerResponse_identityValidationExpression,
+    getAuthorizerResponse_jwtConfiguration,
+    getAuthorizerResponse_name,
+    getAuthorizerResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAuthorizer' smart constructor.
+data GetAuthorizer = GetAuthorizer'
+  { -- | The authorizer identifier.
+    authorizerId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAuthorizer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerId', 'getAuthorizer_authorizerId' - The authorizer identifier.
+--
+-- 'apiId', 'getAuthorizer_apiId' - The API identifier.
+newGetAuthorizer ::
+  -- | 'authorizerId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  GetAuthorizer
+newGetAuthorizer pAuthorizerId_ pApiId_ =
+  GetAuthorizer'
+    { authorizerId = pAuthorizerId_,
+      apiId = pApiId_
+    }
+
+-- | The authorizer identifier.
+getAuthorizer_authorizerId :: Lens.Lens' GetAuthorizer Prelude.Text
+getAuthorizer_authorizerId = Lens.lens (\GetAuthorizer' {authorizerId} -> authorizerId) (\s@GetAuthorizer' {} a -> s {authorizerId = a} :: GetAuthorizer)
+
+-- | The API identifier.
+getAuthorizer_apiId :: Lens.Lens' GetAuthorizer Prelude.Text
+getAuthorizer_apiId = Lens.lens (\GetAuthorizer' {apiId} -> apiId) (\s@GetAuthorizer' {} a -> s {apiId = a} :: GetAuthorizer)
+
+instance Core.AWSRequest GetAuthorizer where
+  type
+    AWSResponse GetAuthorizer =
+      GetAuthorizerResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAuthorizerResponse'
+            Prelude.<$> (x Data..?> "authorizerCredentialsArn")
+            Prelude.<*> (x Data..?> "authorizerId")
+            Prelude.<*> (x Data..?> "authorizerPayloadFormatVersion")
+            Prelude.<*> (x Data..?> "authorizerResultTtlInSeconds")
+            Prelude.<*> (x Data..?> "authorizerType")
+            Prelude.<*> (x Data..?> "authorizerUri")
+            Prelude.<*> (x Data..?> "enableSimpleResponses")
+            Prelude.<*> (x Data..?> "identitySource" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "identityValidationExpression")
+            Prelude.<*> (x Data..?> "jwtConfiguration")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAuthorizer where
+  hashWithSalt _salt GetAuthorizer' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorizerId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetAuthorizer where
+  rnf GetAuthorizer' {..} =
+    Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetAuthorizer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAuthorizer where
+  toPath GetAuthorizer' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/authorizers/",
+        Data.toBS authorizerId
+      ]
+
+instance Data.ToQuery GetAuthorizer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAuthorizerResponse' smart constructor.
+data GetAuthorizerResponse = GetAuthorizerResponse'
+  { -- | Specifies the required credentials as an IAM role for API Gateway to
+    -- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To use resource-based
+    -- permissions on the Lambda function, don\'t specify this parameter.
+    -- Supported only for REQUEST authorizers.
+    authorizerCredentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The authorizer identifier.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format of the payload sent to an HTTP API Lambda
+    -- authorizer. Required for HTTP API Lambda authorizers. Supported values
+    -- are 1.0 and 2.0. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    authorizerPayloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time to live (TTL) for cached authorizer results, in seconds. If it
+    -- equals 0, authorization caching is disabled. If it is greater than 0,
+    -- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+    -- hour. Supported only for HTTP API Lambda authorizers.
+    authorizerResultTtlInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The authorizer type. Specify REQUEST for a Lambda function using
+    -- incoming request parameters. Specify JWT to use JSON Web Tokens
+    -- (supported only for HTTP APIs).
+    authorizerType :: Prelude.Maybe AuthorizerType,
+    -- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+    -- authorizers, this must be a well-formed Lambda function URI, for
+    -- example,
+    -- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+    -- In general, the URI has this form:
+    -- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+    -- is the same as the region hosting the Lambda function, path indicates
+    -- that the remaining substring in the URI should be treated as the path to
+    -- the resource, including the initial \/. For Lambda functions, this is
+    -- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+    -- Supported only for REQUEST authorizers.
+    authorizerUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether a Lambda authorizer returns a response in a simple
+    -- format. If enabled, the Lambda authorizer can return a boolean value
+    -- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+    -- see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+    enableSimpleResponses :: Prelude.Maybe Prelude.Bool,
+    -- | The identity source for which authorization is requested.
+    --
+    -- For a REQUEST authorizer, this is optional. The value is a set of one or
+    -- more mapping expressions of the specified request parameters. The
+    -- identity source can be headers, query string parameters, stage
+    -- variables, and context parameters. For example, if an Auth header and a
+    -- Name query string parameter are defined as identity sources, this value
+    -- is route.request.header.Auth, route.request.querystring.Name for
+    -- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+    -- \$, for example, $request.header.Auth, $request.querystring.Name. These
+    -- parameters are used to perform runtime validation for Lambda-based
+    -- authorizers by verifying all of the identity-related request parameters
+    -- are present in the request, not null, and non-empty. Only when this is
+    -- true does the authorizer invoke the authorizer Lambda function.
+    -- Otherwise, it returns a 401 Unauthorized response without calling the
+    -- Lambda function. For HTTP APIs, identity sources are also used as the
+    -- cache key when caching is enabled. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    --
+    -- For JWT, a single entry that specifies where to extract the JSON Web
+    -- Token (JWT) from inbound requests. Currently only header-based and query
+    -- parameter-based selections are supported, for example
+    -- \$request.header.Authorization.
+    identitySource :: Prelude.Maybe [Prelude.Text],
+    -- | The validation expression does not apply to the REQUEST authorizer.
+    identityValidationExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the configuration of a JWT authorizer. Required for the JWT
+    -- authorizer type. Supported only for HTTP APIs.
+    jwtConfiguration :: Prelude.Maybe JWTConfiguration,
+    -- | The name of the authorizer.
+    name :: 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 'GetAuthorizerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerCredentialsArn', 'getAuthorizerResponse_authorizerCredentialsArn' - Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+--
+-- 'authorizerId', 'getAuthorizerResponse_authorizerId' - The authorizer identifier.
+--
+-- 'authorizerPayloadFormatVersion', 'getAuthorizerResponse_authorizerPayloadFormatVersion' - Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- 'authorizerResultTtlInSeconds', 'getAuthorizerResponse_authorizerResultTtlInSeconds' - The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+--
+-- 'authorizerType', 'getAuthorizerResponse_authorizerType' - The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+--
+-- 'authorizerUri', 'getAuthorizerResponse_authorizerUri' - The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+--
+-- 'enableSimpleResponses', 'getAuthorizerResponse_enableSimpleResponses' - Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+--
+-- 'identitySource', 'getAuthorizerResponse_identitySource' - The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+--
+-- 'identityValidationExpression', 'getAuthorizerResponse_identityValidationExpression' - The validation expression does not apply to the REQUEST authorizer.
+--
+-- 'jwtConfiguration', 'getAuthorizerResponse_jwtConfiguration' - Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+--
+-- 'name', 'getAuthorizerResponse_name' - The name of the authorizer.
+--
+-- 'httpStatus', 'getAuthorizerResponse_httpStatus' - The response's http status code.
+newGetAuthorizerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAuthorizerResponse
+newGetAuthorizerResponse pHttpStatus_ =
+  GetAuthorizerResponse'
+    { authorizerCredentialsArn =
+        Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      authorizerPayloadFormatVersion = Prelude.Nothing,
+      authorizerResultTtlInSeconds = Prelude.Nothing,
+      authorizerType = Prelude.Nothing,
+      authorizerUri = Prelude.Nothing,
+      enableSimpleResponses = Prelude.Nothing,
+      identitySource = Prelude.Nothing,
+      identityValidationExpression = Prelude.Nothing,
+      jwtConfiguration = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+getAuthorizerResponse_authorizerCredentialsArn :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Text)
+getAuthorizerResponse_authorizerCredentialsArn = Lens.lens (\GetAuthorizerResponse' {authorizerCredentialsArn} -> authorizerCredentialsArn) (\s@GetAuthorizerResponse' {} a -> s {authorizerCredentialsArn = a} :: GetAuthorizerResponse)
+
+-- | The authorizer identifier.
+getAuthorizerResponse_authorizerId :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Text)
+getAuthorizerResponse_authorizerId = Lens.lens (\GetAuthorizerResponse' {authorizerId} -> authorizerId) (\s@GetAuthorizerResponse' {} a -> s {authorizerId = a} :: GetAuthorizerResponse)
+
+-- | Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+getAuthorizerResponse_authorizerPayloadFormatVersion :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Text)
+getAuthorizerResponse_authorizerPayloadFormatVersion = Lens.lens (\GetAuthorizerResponse' {authorizerPayloadFormatVersion} -> authorizerPayloadFormatVersion) (\s@GetAuthorizerResponse' {} a -> s {authorizerPayloadFormatVersion = a} :: GetAuthorizerResponse)
+
+-- | The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+getAuthorizerResponse_authorizerResultTtlInSeconds :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Natural)
+getAuthorizerResponse_authorizerResultTtlInSeconds = Lens.lens (\GetAuthorizerResponse' {authorizerResultTtlInSeconds} -> authorizerResultTtlInSeconds) (\s@GetAuthorizerResponse' {} a -> s {authorizerResultTtlInSeconds = a} :: GetAuthorizerResponse)
+
+-- | The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+getAuthorizerResponse_authorizerType :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe AuthorizerType)
+getAuthorizerResponse_authorizerType = Lens.lens (\GetAuthorizerResponse' {authorizerType} -> authorizerType) (\s@GetAuthorizerResponse' {} a -> s {authorizerType = a} :: GetAuthorizerResponse)
+
+-- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+getAuthorizerResponse_authorizerUri :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Text)
+getAuthorizerResponse_authorizerUri = Lens.lens (\GetAuthorizerResponse' {authorizerUri} -> authorizerUri) (\s@GetAuthorizerResponse' {} a -> s {authorizerUri = a} :: GetAuthorizerResponse)
+
+-- | Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+getAuthorizerResponse_enableSimpleResponses :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Bool)
+getAuthorizerResponse_enableSimpleResponses = Lens.lens (\GetAuthorizerResponse' {enableSimpleResponses} -> enableSimpleResponses) (\s@GetAuthorizerResponse' {} a -> s {enableSimpleResponses = a} :: GetAuthorizerResponse)
+
+-- | The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+getAuthorizerResponse_identitySource :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe [Prelude.Text])
+getAuthorizerResponse_identitySource = Lens.lens (\GetAuthorizerResponse' {identitySource} -> identitySource) (\s@GetAuthorizerResponse' {} a -> s {identitySource = a} :: GetAuthorizerResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The validation expression does not apply to the REQUEST authorizer.
+getAuthorizerResponse_identityValidationExpression :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Text)
+getAuthorizerResponse_identityValidationExpression = Lens.lens (\GetAuthorizerResponse' {identityValidationExpression} -> identityValidationExpression) (\s@GetAuthorizerResponse' {} a -> s {identityValidationExpression = a} :: GetAuthorizerResponse)
+
+-- | Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+getAuthorizerResponse_jwtConfiguration :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe JWTConfiguration)
+getAuthorizerResponse_jwtConfiguration = Lens.lens (\GetAuthorizerResponse' {jwtConfiguration} -> jwtConfiguration) (\s@GetAuthorizerResponse' {} a -> s {jwtConfiguration = a} :: GetAuthorizerResponse)
+
+-- | The name of the authorizer.
+getAuthorizerResponse_name :: Lens.Lens' GetAuthorizerResponse (Prelude.Maybe Prelude.Text)
+getAuthorizerResponse_name = Lens.lens (\GetAuthorizerResponse' {name} -> name) (\s@GetAuthorizerResponse' {} a -> s {name = a} :: GetAuthorizerResponse)
+
+-- | The response's http status code.
+getAuthorizerResponse_httpStatus :: Lens.Lens' GetAuthorizerResponse Prelude.Int
+getAuthorizerResponse_httpStatus = Lens.lens (\GetAuthorizerResponse' {httpStatus} -> httpStatus) (\s@GetAuthorizerResponse' {} a -> s {httpStatus = a} :: GetAuthorizerResponse)
+
+instance Prelude.NFData GetAuthorizerResponse where
+  rnf GetAuthorizerResponse' {..} =
+    Prelude.rnf authorizerCredentialsArn
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf authorizerPayloadFormatVersion
+      `Prelude.seq` Prelude.rnf authorizerResultTtlInSeconds
+      `Prelude.seq` Prelude.rnf authorizerType
+      `Prelude.seq` Prelude.rnf authorizerUri
+      `Prelude.seq` Prelude.rnf enableSimpleResponses
+      `Prelude.seq` Prelude.rnf identitySource
+      `Prelude.seq` Prelude.rnf identityValidationExpression
+      `Prelude.seq` Prelude.rnf jwtConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetAuthorizers.hs b/gen/Amazonka/ApiGatewayV2/GetAuthorizers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetAuthorizers.hs
@@ -0,0 +1,232 @@
+{-# 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.ApiGatewayV2.GetAuthorizers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the Authorizers for an API.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetAuthorizers
+  ( -- * Creating a Request
+    GetAuthorizers (..),
+    newGetAuthorizers,
+
+    -- * Request Lenses
+    getAuthorizers_maxResults,
+    getAuthorizers_nextToken,
+    getAuthorizers_apiId,
+
+    -- * Destructuring the Response
+    GetAuthorizersResponse (..),
+    newGetAuthorizersResponse,
+
+    -- * Response Lenses
+    getAuthorizersResponse_items,
+    getAuthorizersResponse_nextToken,
+    getAuthorizersResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAuthorizers' smart constructor.
+data GetAuthorizers = GetAuthorizers'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAuthorizers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getAuthorizers_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getAuthorizers_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'apiId', 'getAuthorizers_apiId' - The API identifier.
+newGetAuthorizers ::
+  -- | 'apiId'
+  Prelude.Text ->
+  GetAuthorizers
+newGetAuthorizers pApiId_ =
+  GetAuthorizers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getAuthorizers_maxResults :: Lens.Lens' GetAuthorizers (Prelude.Maybe Prelude.Text)
+getAuthorizers_maxResults = Lens.lens (\GetAuthorizers' {maxResults} -> maxResults) (\s@GetAuthorizers' {} a -> s {maxResults = a} :: GetAuthorizers)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getAuthorizers_nextToken :: Lens.Lens' GetAuthorizers (Prelude.Maybe Prelude.Text)
+getAuthorizers_nextToken = Lens.lens (\GetAuthorizers' {nextToken} -> nextToken) (\s@GetAuthorizers' {} a -> s {nextToken = a} :: GetAuthorizers)
+
+-- | The API identifier.
+getAuthorizers_apiId :: Lens.Lens' GetAuthorizers Prelude.Text
+getAuthorizers_apiId = Lens.lens (\GetAuthorizers' {apiId} -> apiId) (\s@GetAuthorizers' {} a -> s {apiId = a} :: GetAuthorizers)
+
+instance Core.AWSPager GetAuthorizers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getAuthorizersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getAuthorizersResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getAuthorizers_nextToken
+          Lens..~ rs
+          Lens.^? getAuthorizersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetAuthorizers where
+  type
+    AWSResponse GetAuthorizers =
+      GetAuthorizersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAuthorizersResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAuthorizers where
+  hashWithSalt _salt GetAuthorizers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetAuthorizers where
+  rnf GetAuthorizers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetAuthorizers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAuthorizers where
+  toPath GetAuthorizers' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/authorizers"]
+
+instance Data.ToQuery GetAuthorizers where
+  toQuery GetAuthorizers' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetAuthorizersResponse' smart constructor.
+data GetAuthorizersResponse = GetAuthorizersResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Authorizer],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAuthorizersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getAuthorizersResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getAuthorizersResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getAuthorizersResponse_httpStatus' - The response's http status code.
+newGetAuthorizersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAuthorizersResponse
+newGetAuthorizersResponse pHttpStatus_ =
+  GetAuthorizersResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getAuthorizersResponse_items :: Lens.Lens' GetAuthorizersResponse (Prelude.Maybe [Authorizer])
+getAuthorizersResponse_items = Lens.lens (\GetAuthorizersResponse' {items} -> items) (\s@GetAuthorizersResponse' {} a -> s {items = a} :: GetAuthorizersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getAuthorizersResponse_nextToken :: Lens.Lens' GetAuthorizersResponse (Prelude.Maybe Prelude.Text)
+getAuthorizersResponse_nextToken = Lens.lens (\GetAuthorizersResponse' {nextToken} -> nextToken) (\s@GetAuthorizersResponse' {} a -> s {nextToken = a} :: GetAuthorizersResponse)
+
+-- | The response's http status code.
+getAuthorizersResponse_httpStatus :: Lens.Lens' GetAuthorizersResponse Prelude.Int
+getAuthorizersResponse_httpStatus = Lens.lens (\GetAuthorizersResponse' {httpStatus} -> httpStatus) (\s@GetAuthorizersResponse' {} a -> s {httpStatus = a} :: GetAuthorizersResponse)
+
+instance Prelude.NFData GetAuthorizersResponse where
+  rnf GetAuthorizersResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetDeployment.hs b/gen/Amazonka/ApiGatewayV2/GetDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetDeployment.hs
@@ -0,0 +1,241 @@
+{-# 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.ApiGatewayV2.GetDeployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a Deployment.
+module Amazonka.ApiGatewayV2.GetDeployment
+  ( -- * Creating a Request
+    GetDeployment (..),
+    newGetDeployment,
+
+    -- * Request Lenses
+    getDeployment_apiId,
+    getDeployment_deploymentId,
+
+    -- * Destructuring the Response
+    GetDeploymentResponse (..),
+    newGetDeploymentResponse,
+
+    -- * Response Lenses
+    getDeploymentResponse_autoDeployed,
+    getDeploymentResponse_createdDate,
+    getDeploymentResponse_deploymentId,
+    getDeploymentResponse_deploymentStatus,
+    getDeploymentResponse_deploymentStatusMessage,
+    getDeploymentResponse_description,
+    getDeploymentResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDeployment' smart constructor.
+data GetDeployment = GetDeployment'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The deployment ID.
+    deploymentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'getDeployment_apiId' - The API identifier.
+--
+-- 'deploymentId', 'getDeployment_deploymentId' - The deployment ID.
+newGetDeployment ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'deploymentId'
+  Prelude.Text ->
+  GetDeployment
+newGetDeployment pApiId_ pDeploymentId_ =
+  GetDeployment'
+    { apiId = pApiId_,
+      deploymentId = pDeploymentId_
+    }
+
+-- | The API identifier.
+getDeployment_apiId :: Lens.Lens' GetDeployment Prelude.Text
+getDeployment_apiId = Lens.lens (\GetDeployment' {apiId} -> apiId) (\s@GetDeployment' {} a -> s {apiId = a} :: GetDeployment)
+
+-- | The deployment ID.
+getDeployment_deploymentId :: Lens.Lens' GetDeployment Prelude.Text
+getDeployment_deploymentId = Lens.lens (\GetDeployment' {deploymentId} -> deploymentId) (\s@GetDeployment' {} a -> s {deploymentId = a} :: GetDeployment)
+
+instance Core.AWSRequest GetDeployment where
+  type
+    AWSResponse GetDeployment =
+      GetDeploymentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeploymentResponse'
+            Prelude.<$> (x Data..?> "autoDeployed")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "deploymentId")
+            Prelude.<*> (x Data..?> "deploymentStatus")
+            Prelude.<*> (x Data..?> "deploymentStatusMessage")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDeployment where
+  hashWithSalt _salt GetDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` deploymentId
+
+instance Prelude.NFData GetDeployment where
+  rnf GetDeployment' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf deploymentId
+
+instance Data.ToHeaders GetDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDeployment where
+  toPath GetDeployment' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/deployments/",
+        Data.toBS deploymentId
+      ]
+
+instance Data.ToQuery GetDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDeploymentResponse' smart constructor.
+data GetDeploymentResponse = GetDeploymentResponse'
+  { -- | Specifies whether a deployment was automatically released.
+    autoDeployed :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time when the Deployment resource was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier for the deployment.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+    deploymentStatus :: Prelude.Maybe DeploymentStatus,
+    -- | May contain additional feedback on the status of an API deployment.
+    deploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The description for the deployment.
+    description :: 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 'GetDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoDeployed', 'getDeploymentResponse_autoDeployed' - Specifies whether a deployment was automatically released.
+--
+-- 'createdDate', 'getDeploymentResponse_createdDate' - The date and time when the Deployment resource was created.
+--
+-- 'deploymentId', 'getDeploymentResponse_deploymentId' - The identifier for the deployment.
+--
+-- 'deploymentStatus', 'getDeploymentResponse_deploymentStatus' - The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+--
+-- 'deploymentStatusMessage', 'getDeploymentResponse_deploymentStatusMessage' - May contain additional feedback on the status of an API deployment.
+--
+-- 'description', 'getDeploymentResponse_description' - The description for the deployment.
+--
+-- 'httpStatus', 'getDeploymentResponse_httpStatus' - The response's http status code.
+newGetDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDeploymentResponse
+newGetDeploymentResponse pHttpStatus_ =
+  GetDeploymentResponse'
+    { autoDeployed =
+        Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      deploymentStatus = Prelude.Nothing,
+      deploymentStatusMessage = Prelude.Nothing,
+      description = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether a deployment was automatically released.
+getDeploymentResponse_autoDeployed :: Lens.Lens' GetDeploymentResponse (Prelude.Maybe Prelude.Bool)
+getDeploymentResponse_autoDeployed = Lens.lens (\GetDeploymentResponse' {autoDeployed} -> autoDeployed) (\s@GetDeploymentResponse' {} a -> s {autoDeployed = a} :: GetDeploymentResponse)
+
+-- | The date and time when the Deployment resource was created.
+getDeploymentResponse_createdDate :: Lens.Lens' GetDeploymentResponse (Prelude.Maybe Prelude.UTCTime)
+getDeploymentResponse_createdDate = Lens.lens (\GetDeploymentResponse' {createdDate} -> createdDate) (\s@GetDeploymentResponse' {} a -> s {createdDate = a} :: GetDeploymentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier for the deployment.
+getDeploymentResponse_deploymentId :: Lens.Lens' GetDeploymentResponse (Prelude.Maybe Prelude.Text)
+getDeploymentResponse_deploymentId = Lens.lens (\GetDeploymentResponse' {deploymentId} -> deploymentId) (\s@GetDeploymentResponse' {} a -> s {deploymentId = a} :: GetDeploymentResponse)
+
+-- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+getDeploymentResponse_deploymentStatus :: Lens.Lens' GetDeploymentResponse (Prelude.Maybe DeploymentStatus)
+getDeploymentResponse_deploymentStatus = Lens.lens (\GetDeploymentResponse' {deploymentStatus} -> deploymentStatus) (\s@GetDeploymentResponse' {} a -> s {deploymentStatus = a} :: GetDeploymentResponse)
+
+-- | May contain additional feedback on the status of an API deployment.
+getDeploymentResponse_deploymentStatusMessage :: Lens.Lens' GetDeploymentResponse (Prelude.Maybe Prelude.Text)
+getDeploymentResponse_deploymentStatusMessage = Lens.lens (\GetDeploymentResponse' {deploymentStatusMessage} -> deploymentStatusMessage) (\s@GetDeploymentResponse' {} a -> s {deploymentStatusMessage = a} :: GetDeploymentResponse)
+
+-- | The description for the deployment.
+getDeploymentResponse_description :: Lens.Lens' GetDeploymentResponse (Prelude.Maybe Prelude.Text)
+getDeploymentResponse_description = Lens.lens (\GetDeploymentResponse' {description} -> description) (\s@GetDeploymentResponse' {} a -> s {description = a} :: GetDeploymentResponse)
+
+-- | The response's http status code.
+getDeploymentResponse_httpStatus :: Lens.Lens' GetDeploymentResponse Prelude.Int
+getDeploymentResponse_httpStatus = Lens.lens (\GetDeploymentResponse' {httpStatus} -> httpStatus) (\s@GetDeploymentResponse' {} a -> s {httpStatus = a} :: GetDeploymentResponse)
+
+instance Prelude.NFData GetDeploymentResponse where
+  rnf GetDeploymentResponse' {..} =
+    Prelude.rnf autoDeployed
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf deploymentStatus
+      `Prelude.seq` Prelude.rnf deploymentStatusMessage
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetDeployments.hs b/gen/Amazonka/ApiGatewayV2/GetDeployments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetDeployments.hs
@@ -0,0 +1,232 @@
+{-# 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.ApiGatewayV2.GetDeployments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the Deployments for an API.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetDeployments
+  ( -- * Creating a Request
+    GetDeployments (..),
+    newGetDeployments,
+
+    -- * Request Lenses
+    getDeployments_maxResults,
+    getDeployments_nextToken,
+    getDeployments_apiId,
+
+    -- * Destructuring the Response
+    GetDeploymentsResponse (..),
+    newGetDeploymentsResponse,
+
+    -- * Response Lenses
+    getDeploymentsResponse_items,
+    getDeploymentsResponse_nextToken,
+    getDeploymentsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDeployments' smart constructor.
+data GetDeployments = GetDeployments'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeployments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDeployments_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getDeployments_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'apiId', 'getDeployments_apiId' - The API identifier.
+newGetDeployments ::
+  -- | 'apiId'
+  Prelude.Text ->
+  GetDeployments
+newGetDeployments pApiId_ =
+  GetDeployments'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getDeployments_maxResults :: Lens.Lens' GetDeployments (Prelude.Maybe Prelude.Text)
+getDeployments_maxResults = Lens.lens (\GetDeployments' {maxResults} -> maxResults) (\s@GetDeployments' {} a -> s {maxResults = a} :: GetDeployments)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getDeployments_nextToken :: Lens.Lens' GetDeployments (Prelude.Maybe Prelude.Text)
+getDeployments_nextToken = Lens.lens (\GetDeployments' {nextToken} -> nextToken) (\s@GetDeployments' {} a -> s {nextToken = a} :: GetDeployments)
+
+-- | The API identifier.
+getDeployments_apiId :: Lens.Lens' GetDeployments Prelude.Text
+getDeployments_apiId = Lens.lens (\GetDeployments' {apiId} -> apiId) (\s@GetDeployments' {} a -> s {apiId = a} :: GetDeployments)
+
+instance Core.AWSPager GetDeployments where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getDeploymentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getDeploymentsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getDeployments_nextToken
+          Lens..~ rs
+          Lens.^? getDeploymentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetDeployments where
+  type
+    AWSResponse GetDeployments =
+      GetDeploymentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeploymentsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDeployments where
+  hashWithSalt _salt GetDeployments' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetDeployments where
+  rnf GetDeployments' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetDeployments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDeployments where
+  toPath GetDeployments' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/deployments"]
+
+instance Data.ToQuery GetDeployments where
+  toQuery GetDeployments' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetDeploymentsResponse' smart constructor.
+data GetDeploymentsResponse = GetDeploymentsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Deployment],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeploymentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getDeploymentsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getDeploymentsResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getDeploymentsResponse_httpStatus' - The response's http status code.
+newGetDeploymentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDeploymentsResponse
+newGetDeploymentsResponse pHttpStatus_ =
+  GetDeploymentsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getDeploymentsResponse_items :: Lens.Lens' GetDeploymentsResponse (Prelude.Maybe [Deployment])
+getDeploymentsResponse_items = Lens.lens (\GetDeploymentsResponse' {items} -> items) (\s@GetDeploymentsResponse' {} a -> s {items = a} :: GetDeploymentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getDeploymentsResponse_nextToken :: Lens.Lens' GetDeploymentsResponse (Prelude.Maybe Prelude.Text)
+getDeploymentsResponse_nextToken = Lens.lens (\GetDeploymentsResponse' {nextToken} -> nextToken) (\s@GetDeploymentsResponse' {} a -> s {nextToken = a} :: GetDeploymentsResponse)
+
+-- | The response's http status code.
+getDeploymentsResponse_httpStatus :: Lens.Lens' GetDeploymentsResponse Prelude.Int
+getDeploymentsResponse_httpStatus = Lens.lens (\GetDeploymentsResponse' {httpStatus} -> httpStatus) (\s@GetDeploymentsResponse' {} a -> s {httpStatus = a} :: GetDeploymentsResponse)
+
+instance Prelude.NFData GetDeploymentsResponse where
+  rnf GetDeploymentsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetDomainName.hs b/gen/Amazonka/ApiGatewayV2/GetDomainName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetDomainName.hs
@@ -0,0 +1,210 @@
+{-# 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.ApiGatewayV2.GetDomainName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a domain name.
+module Amazonka.ApiGatewayV2.GetDomainName
+  ( -- * Creating a Request
+    GetDomainName (..),
+    newGetDomainName,
+
+    -- * Request Lenses
+    getDomainName_domainName,
+
+    -- * Destructuring the Response
+    GetDomainNameResponse (..),
+    newGetDomainNameResponse,
+
+    -- * Response Lenses
+    getDomainNameResponse_apiMappingSelectionExpression,
+    getDomainNameResponse_domainName,
+    getDomainNameResponse_domainNameConfigurations,
+    getDomainNameResponse_mutualTlsAuthentication,
+    getDomainNameResponse_tags,
+    getDomainNameResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDomainName' smart constructor.
+data GetDomainName = GetDomainName'
+  { -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainName' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'getDomainName_domainName' - The domain name.
+newGetDomainName ::
+  -- | 'domainName'
+  Prelude.Text ->
+  GetDomainName
+newGetDomainName pDomainName_ =
+  GetDomainName' {domainName = pDomainName_}
+
+-- | The domain name.
+getDomainName_domainName :: Lens.Lens' GetDomainName Prelude.Text
+getDomainName_domainName = Lens.lens (\GetDomainName' {domainName} -> domainName) (\s@GetDomainName' {} a -> s {domainName = a} :: GetDomainName)
+
+instance Core.AWSRequest GetDomainName where
+  type
+    AWSResponse GetDomainName =
+      GetDomainNameResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainNameResponse'
+            Prelude.<$> (x Data..?> "apiMappingSelectionExpression")
+            Prelude.<*> (x Data..?> "domainName")
+            Prelude.<*> ( x
+                            Data..?> "domainNameConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "mutualTlsAuthentication")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDomainName where
+  hashWithSalt _salt GetDomainName' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData GetDomainName where
+  rnf GetDomainName' {..} = Prelude.rnf domainName
+
+instance Data.ToHeaders GetDomainName where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDomainName where
+  toPath GetDomainName' {..} =
+    Prelude.mconcat
+      ["/v2/domainnames/", Data.toBS domainName]
+
+instance Data.ToQuery GetDomainName where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDomainNameResponse' smart constructor.
+data GetDomainNameResponse = GetDomainNameResponse'
+  { -- | The API mapping selection expression.
+    apiMappingSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The name of the DomainName resource.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The domain name configurations.
+    domainNameConfigurations :: Prelude.Maybe [DomainNameConfiguration],
+    -- | The mutual TLS authentication configuration for a custom domain name.
+    mutualTlsAuthentication :: Prelude.Maybe MutualTlsAuthentication,
+    -- | The collection of tags associated with a domain name.
+    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 'GetDomainNameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingSelectionExpression', 'getDomainNameResponse_apiMappingSelectionExpression' - The API mapping selection expression.
+--
+-- 'domainName', 'getDomainNameResponse_domainName' - The name of the DomainName resource.
+--
+-- 'domainNameConfigurations', 'getDomainNameResponse_domainNameConfigurations' - The domain name configurations.
+--
+-- 'mutualTlsAuthentication', 'getDomainNameResponse_mutualTlsAuthentication' - The mutual TLS authentication configuration for a custom domain name.
+--
+-- 'tags', 'getDomainNameResponse_tags' - The collection of tags associated with a domain name.
+--
+-- 'httpStatus', 'getDomainNameResponse_httpStatus' - The response's http status code.
+newGetDomainNameResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDomainNameResponse
+newGetDomainNameResponse pHttpStatus_ =
+  GetDomainNameResponse'
+    { apiMappingSelectionExpression =
+        Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      domainNameConfigurations = Prelude.Nothing,
+      mutualTlsAuthentication = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The API mapping selection expression.
+getDomainNameResponse_apiMappingSelectionExpression :: Lens.Lens' GetDomainNameResponse (Prelude.Maybe Prelude.Text)
+getDomainNameResponse_apiMappingSelectionExpression = Lens.lens (\GetDomainNameResponse' {apiMappingSelectionExpression} -> apiMappingSelectionExpression) (\s@GetDomainNameResponse' {} a -> s {apiMappingSelectionExpression = a} :: GetDomainNameResponse)
+
+-- | The name of the DomainName resource.
+getDomainNameResponse_domainName :: Lens.Lens' GetDomainNameResponse (Prelude.Maybe Prelude.Text)
+getDomainNameResponse_domainName = Lens.lens (\GetDomainNameResponse' {domainName} -> domainName) (\s@GetDomainNameResponse' {} a -> s {domainName = a} :: GetDomainNameResponse)
+
+-- | The domain name configurations.
+getDomainNameResponse_domainNameConfigurations :: Lens.Lens' GetDomainNameResponse (Prelude.Maybe [DomainNameConfiguration])
+getDomainNameResponse_domainNameConfigurations = Lens.lens (\GetDomainNameResponse' {domainNameConfigurations} -> domainNameConfigurations) (\s@GetDomainNameResponse' {} a -> s {domainNameConfigurations = a} :: GetDomainNameResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The mutual TLS authentication configuration for a custom domain name.
+getDomainNameResponse_mutualTlsAuthentication :: Lens.Lens' GetDomainNameResponse (Prelude.Maybe MutualTlsAuthentication)
+getDomainNameResponse_mutualTlsAuthentication = Lens.lens (\GetDomainNameResponse' {mutualTlsAuthentication} -> mutualTlsAuthentication) (\s@GetDomainNameResponse' {} a -> s {mutualTlsAuthentication = a} :: GetDomainNameResponse)
+
+-- | The collection of tags associated with a domain name.
+getDomainNameResponse_tags :: Lens.Lens' GetDomainNameResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getDomainNameResponse_tags = Lens.lens (\GetDomainNameResponse' {tags} -> tags) (\s@GetDomainNameResponse' {} a -> s {tags = a} :: GetDomainNameResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getDomainNameResponse_httpStatus :: Lens.Lens' GetDomainNameResponse Prelude.Int
+getDomainNameResponse_httpStatus = Lens.lens (\GetDomainNameResponse' {httpStatus} -> httpStatus) (\s@GetDomainNameResponse' {} a -> s {httpStatus = a} :: GetDomainNameResponse)
+
+instance Prelude.NFData GetDomainNameResponse where
+  rnf GetDomainNameResponse' {..} =
+    Prelude.rnf apiMappingSelectionExpression
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf domainNameConfigurations
+      `Prelude.seq` Prelude.rnf mutualTlsAuthentication
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetDomainNames.hs b/gen/Amazonka/ApiGatewayV2/GetDomainNames.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetDomainNames.hs
@@ -0,0 +1,216 @@
+{-# 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.ApiGatewayV2.GetDomainNames
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the domain names for an AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetDomainNames
+  ( -- * Creating a Request
+    GetDomainNames (..),
+    newGetDomainNames,
+
+    -- * Request Lenses
+    getDomainNames_maxResults,
+    getDomainNames_nextToken,
+
+    -- * Destructuring the Response
+    GetDomainNamesResponse (..),
+    newGetDomainNamesResponse,
+
+    -- * Response Lenses
+    getDomainNamesResponse_items,
+    getDomainNamesResponse_nextToken,
+    getDomainNamesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDomainNames' smart constructor.
+data GetDomainNames = GetDomainNames'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainNames' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDomainNames_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getDomainNames_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+newGetDomainNames ::
+  GetDomainNames
+newGetDomainNames =
+  GetDomainNames'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getDomainNames_maxResults :: Lens.Lens' GetDomainNames (Prelude.Maybe Prelude.Text)
+getDomainNames_maxResults = Lens.lens (\GetDomainNames' {maxResults} -> maxResults) (\s@GetDomainNames' {} a -> s {maxResults = a} :: GetDomainNames)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getDomainNames_nextToken :: Lens.Lens' GetDomainNames (Prelude.Maybe Prelude.Text)
+getDomainNames_nextToken = Lens.lens (\GetDomainNames' {nextToken} -> nextToken) (\s@GetDomainNames' {} a -> s {nextToken = a} :: GetDomainNames)
+
+instance Core.AWSPager GetDomainNames where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getDomainNamesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getDomainNamesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getDomainNames_nextToken
+          Lens..~ rs
+          Lens.^? getDomainNamesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetDomainNames where
+  type
+    AWSResponse GetDomainNames =
+      GetDomainNamesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainNamesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDomainNames where
+  hashWithSalt _salt GetDomainNames' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetDomainNames where
+  rnf GetDomainNames' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetDomainNames where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDomainNames where
+  toPath = Prelude.const "/v2/domainnames"
+
+instance Data.ToQuery GetDomainNames where
+  toQuery GetDomainNames' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetDomainNamesResponse' smart constructor.
+data GetDomainNamesResponse = GetDomainNamesResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [DomainName],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainNamesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getDomainNamesResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getDomainNamesResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getDomainNamesResponse_httpStatus' - The response's http status code.
+newGetDomainNamesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDomainNamesResponse
+newGetDomainNamesResponse pHttpStatus_ =
+  GetDomainNamesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getDomainNamesResponse_items :: Lens.Lens' GetDomainNamesResponse (Prelude.Maybe [DomainName])
+getDomainNamesResponse_items = Lens.lens (\GetDomainNamesResponse' {items} -> items) (\s@GetDomainNamesResponse' {} a -> s {items = a} :: GetDomainNamesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getDomainNamesResponse_nextToken :: Lens.Lens' GetDomainNamesResponse (Prelude.Maybe Prelude.Text)
+getDomainNamesResponse_nextToken = Lens.lens (\GetDomainNamesResponse' {nextToken} -> nextToken) (\s@GetDomainNamesResponse' {} a -> s {nextToken = a} :: GetDomainNamesResponse)
+
+-- | The response's http status code.
+getDomainNamesResponse_httpStatus :: Lens.Lens' GetDomainNamesResponse Prelude.Int
+getDomainNamesResponse_httpStatus = Lens.lens (\GetDomainNamesResponse' {httpStatus} -> httpStatus) (\s@GetDomainNamesResponse' {} a -> s {httpStatus = a} :: GetDomainNamesResponse)
+
+instance Prelude.NFData GetDomainNamesResponse where
+  rnf GetDomainNamesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetIntegration.hs b/gen/Amazonka/ApiGatewayV2/GetIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetIntegration.hs
@@ -0,0 +1,774 @@
+{-# 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.ApiGatewayV2.GetIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an Integration.
+module Amazonka.ApiGatewayV2.GetIntegration
+  ( -- * Creating a Request
+    GetIntegration (..),
+    newGetIntegration,
+
+    -- * Request Lenses
+    getIntegration_apiId,
+    getIntegration_integrationId,
+
+    -- * Destructuring the Response
+    GetIntegrationResponse' (..),
+    newGetIntegrationResponse',
+
+    -- * Response Lenses
+    getIntegrationResponse'_apiGatewayManaged,
+    getIntegrationResponse'_connectionId,
+    getIntegrationResponse'_connectionType,
+    getIntegrationResponse'_contentHandlingStrategy,
+    getIntegrationResponse'_credentialsArn,
+    getIntegrationResponse'_description,
+    getIntegrationResponse'_integrationId,
+    getIntegrationResponse'_integrationMethod,
+    getIntegrationResponse'_integrationResponseSelectionExpression,
+    getIntegrationResponse'_integrationSubtype,
+    getIntegrationResponse'_integrationType,
+    getIntegrationResponse'_integrationUri,
+    getIntegrationResponse'_passthroughBehavior,
+    getIntegrationResponse'_payloadFormatVersion,
+    getIntegrationResponse'_requestParameters,
+    getIntegrationResponse'_requestTemplates,
+    getIntegrationResponse'_responseParameters,
+    getIntegrationResponse'_templateSelectionExpression,
+    getIntegrationResponse'_timeoutInMillis,
+    getIntegrationResponse'_tlsConfig,
+    getIntegrationResponse'_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIntegration' smart constructor.
+data GetIntegration = GetIntegration'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'getIntegration_apiId' - The API identifier.
+--
+-- 'integrationId', 'getIntegration_integrationId' - The integration ID.
+newGetIntegration ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationId'
+  Prelude.Text ->
+  GetIntegration
+newGetIntegration pApiId_ pIntegrationId_ =
+  GetIntegration'
+    { apiId = pApiId_,
+      integrationId = pIntegrationId_
+    }
+
+-- | The API identifier.
+getIntegration_apiId :: Lens.Lens' GetIntegration Prelude.Text
+getIntegration_apiId = Lens.lens (\GetIntegration' {apiId} -> apiId) (\s@GetIntegration' {} a -> s {apiId = a} :: GetIntegration)
+
+-- | The integration ID.
+getIntegration_integrationId :: Lens.Lens' GetIntegration Prelude.Text
+getIntegration_integrationId = Lens.lens (\GetIntegration' {integrationId} -> integrationId) (\s@GetIntegration' {} a -> s {integrationId = a} :: GetIntegration)
+
+instance Core.AWSRequest GetIntegration where
+  type
+    AWSResponse GetIntegration =
+      GetIntegrationResponse'
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetIntegrationResponse''
+            Prelude.<$> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "connectionId")
+            Prelude.<*> (x Data..?> "connectionType")
+            Prelude.<*> (x Data..?> "contentHandlingStrategy")
+            Prelude.<*> (x Data..?> "credentialsArn")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "integrationId")
+            Prelude.<*> (x Data..?> "integrationMethod")
+            Prelude.<*> (x Data..?> "integrationResponseSelectionExpression")
+            Prelude.<*> (x Data..?> "integrationSubtype")
+            Prelude.<*> (x Data..?> "integrationType")
+            Prelude.<*> (x Data..?> "integrationUri")
+            Prelude.<*> (x Data..?> "passthroughBehavior")
+            Prelude.<*> (x Data..?> "payloadFormatVersion")
+            Prelude.<*> ( x
+                            Data..?> "requestParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "requestTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "templateSelectionExpression")
+            Prelude.<*> (x Data..?> "timeoutInMillis")
+            Prelude.<*> (x Data..?> "tlsConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIntegration where
+  hashWithSalt _salt GetIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationId
+
+instance Prelude.NFData GetIntegration where
+  rnf GetIntegration' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationId
+
+instance Data.ToHeaders GetIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetIntegration where
+  toPath GetIntegration' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId
+      ]
+
+instance Data.ToQuery GetIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetIntegrationResponse'' smart constructor.
+data GetIntegrationResponse' = GetIntegrationResponse''
+  { -- | Specifies whether an integration is managed by API Gateway. If you
+    -- created an API using using quick create, the resulting integration is
+    -- managed by API Gateway. You can update a managed integration, but you
+    -- can\'t delete it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC link for a private integration. Supported only for
+    -- HTTP APIs.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the network connection to the integration endpoint. Specify
+    -- INTERNET for connections through the public routable internet or
+    -- VPC_LINK for private connections between API Gateway and resources in a
+    -- VPC. The default value is INTERNET.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | Specifies the credentials required for the integration, if any. For AWS
+    -- integrations, three options are available. To specify an IAM Role for
+    -- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+    -- require that the caller\'s identity be passed through from the request,
+    -- specify the string arn:aws:iam::*:user\/*. To use resource-based
+    -- permissions on supported AWS services, specify null.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | Represents the description of an integration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Represents the identifier of an integration.
+    integrationId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the integration\'s HTTP method type.
+    integrationMethod :: Prelude.Maybe Prelude.Text,
+    -- | The integration response selection expression for the integration.
+    -- Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+    integrationResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+    -- service action to invoke. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+    integrationSubtype :: Prelude.Maybe Prelude.Text,
+    -- | The integration type of an integration. One of the following:
+    --
+    -- AWS: for integrating the route or method request with an AWS service
+    -- action, including the Lambda function-invoking action. With the Lambda
+    -- function-invoking action, this is referred to as the Lambda custom
+    -- integration. With any other AWS service action, this is known as AWS
+    -- integration. Supported only for WebSocket APIs.
+    --
+    -- AWS_PROXY: for integrating the route or method request with a Lambda
+    -- function or other AWS service action. This integration is also referred
+    -- to as a Lambda proxy integration.
+    --
+    -- HTTP: for integrating the route or method request with an HTTP endpoint.
+    -- This integration is also referred to as the HTTP custom integration.
+    -- Supported only for WebSocket APIs.
+    --
+    -- HTTP_PROXY: for integrating the route or method request with an HTTP
+    -- endpoint, with the client request passed through as-is. This is also
+    -- referred to as HTTP proxy integration.
+    --
+    -- MOCK: for integrating the route or method request with API Gateway as a
+    -- \"loopback\" endpoint without invoking any backend. Supported only for
+    -- WebSocket APIs.
+    integrationType :: Prelude.Maybe IntegrationType,
+    -- | For a Lambda integration, specify the URI of a Lambda function.
+    --
+    -- For an HTTP integration, specify a fully-qualified URL.
+    --
+    -- For an HTTP API private integration, specify the ARN of an Application
+    -- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+    -- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+    -- uses DiscoverInstances to identify resources. You can use query
+    -- parameters to target specific resources. To learn more, see
+    -- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+    -- For private integrations, all resources must be owned by the same AWS
+    -- account.
+    integrationUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the pass-through behavior for incoming requests based on the
+    -- Content-Type header in the request, and the available mapping templates
+    -- specified as the requestTemplates property on the Integration resource.
+    -- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+    -- NEVER. Supported only for WebSocket APIs.
+    --
+    -- WHEN_NO_MATCH passes the request body for unmapped content types through
+    -- to the integration backend without transformation.
+    --
+    -- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+    -- Type response.
+    --
+    -- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+    -- content types mapped to templates. However, if there is at least one
+    -- content type defined, unmapped content types will be rejected with the
+    -- same HTTP 415 Unsupported Media Type response.
+    passthroughBehavior :: Prelude.Maybe PassthroughBehavior,
+    -- | Specifies the format of the payload sent to an integration. Required for
+    -- HTTP APIs.
+    payloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | For WebSocket APIs, a key-value map specifying request parameters that
+    -- are passed from the method request to the backend. The key is an
+    -- integration request parameter name and the associated value is a method
+    -- request parameter value or static value that must be enclosed within
+    -- single quotes and pre-encoded as required by the backend. The method
+    -- request parameter value must match the pattern of
+    -- method.request.{location}.{name} , where {location} is querystring,
+    -- path, or header; and {name} must be a valid and unique method request
+    -- parameter name.
+    --
+    -- For HTTP API integrations with a specified integrationSubtype, request
+    -- parameters are a key-value map specifying parameters that are passed to
+    -- AWS_PROXY integrations. You can provide static values, or map request
+    -- data, stage variables, or context variables that are evaluated at
+    -- runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+    --
+    -- For HTTP API itegrations, without a specified integrationSubtype request
+    -- parameters are a key-value map specifying how to transform HTTP requests
+    -- before sending them to backend integrations. The key should follow the
+    -- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+    -- be append, overwrite or remove. For values, you can provide static
+    -- values, or map request data, stage variables, or context variables that
+    -- are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents a map of Velocity templates that are applied on the request
+    -- payload based on the value of the Content-Type header sent by the
+    -- client. The content type value is the key in this map, and the template
+    -- (as a String) is the value. Supported only for WebSocket APIs.
+    requestTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Supported only for HTTP APIs. You use response parameters to transform
+    -- the HTTP response from a backend integration before returning the
+    -- response to clients. Specify a key-value map from a selection key to
+    -- response parameters. The selection key must be a valid HTTP status code
+    -- within the range of 200-599. Response parameters are a key-value map.
+    -- The key must match pattern \<action>:\<header>.\<location> or
+    -- overwrite.statuscode. The action can be append, overwrite or remove. The
+    -- value can be a static value, or map to response data, stage variables,
+    -- or context variables that are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The template selection expression for the integration. Supported only
+    -- for WebSocket APIs.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+    -- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+    -- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+    timeoutInMillis :: Prelude.Maybe Prelude.Natural,
+    -- | The TLS configuration for a private integration. If you specify a TLS
+    -- configuration, private integration traffic uses the HTTPS protocol.
+    -- Supported only for HTTP APIs.
+    tlsConfig :: Prelude.Maybe TlsConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegrationResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'getIntegrationResponse'_apiGatewayManaged' - Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+--
+-- 'connectionId', 'getIntegrationResponse'_connectionId' - The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+--
+-- 'connectionType', 'getIntegrationResponse'_connectionType' - The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+--
+-- 'contentHandlingStrategy', 'getIntegrationResponse'_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'credentialsArn', 'getIntegrationResponse'_credentialsArn' - Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+--
+-- 'description', 'getIntegrationResponse'_description' - Represents the description of an integration.
+--
+-- 'integrationId', 'getIntegrationResponse'_integrationId' - Represents the identifier of an integration.
+--
+-- 'integrationMethod', 'getIntegrationResponse'_integrationMethod' - Specifies the integration\'s HTTP method type.
+--
+-- 'integrationResponseSelectionExpression', 'getIntegrationResponse'_integrationResponseSelectionExpression' - The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+--
+-- 'integrationSubtype', 'getIntegrationResponse'_integrationSubtype' - Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+--
+-- 'integrationType', 'getIntegrationResponse'_integrationType' - The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+--
+-- 'integrationUri', 'getIntegrationResponse'_integrationUri' - For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+--
+-- 'passthroughBehavior', 'getIntegrationResponse'_passthroughBehavior' - Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+--
+-- 'payloadFormatVersion', 'getIntegrationResponse'_payloadFormatVersion' - Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+--
+-- 'requestParameters', 'getIntegrationResponse'_requestParameters' - For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'requestTemplates', 'getIntegrationResponse'_requestTemplates' - Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+--
+-- 'responseParameters', 'getIntegrationResponse'_responseParameters' - Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'templateSelectionExpression', 'getIntegrationResponse'_templateSelectionExpression' - The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+--
+-- 'timeoutInMillis', 'getIntegrationResponse'_timeoutInMillis' - Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+--
+-- 'tlsConfig', 'getIntegrationResponse'_tlsConfig' - The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+--
+-- 'httpStatus', 'getIntegrationResponse'_httpStatus' - The response's http status code.
+newGetIntegrationResponse' ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIntegrationResponse'
+newGetIntegrationResponse' pHttpStatus_ =
+  GetIntegrationResponse''
+    { apiGatewayManaged =
+        Prelude.Nothing,
+      connectionId = Prelude.Nothing,
+      connectionType = Prelude.Nothing,
+      contentHandlingStrategy = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      integrationId = Prelude.Nothing,
+      integrationMethod = Prelude.Nothing,
+      integrationResponseSelectionExpression =
+        Prelude.Nothing,
+      integrationSubtype = Prelude.Nothing,
+      integrationType = Prelude.Nothing,
+      integrationUri = Prelude.Nothing,
+      passthroughBehavior = Prelude.Nothing,
+      payloadFormatVersion = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      requestTemplates = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      templateSelectionExpression = Prelude.Nothing,
+      timeoutInMillis = Prelude.Nothing,
+      tlsConfig = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+getIntegrationResponse'_apiGatewayManaged :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Bool)
+getIntegrationResponse'_apiGatewayManaged = Lens.lens (\GetIntegrationResponse'' {apiGatewayManaged} -> apiGatewayManaged) (\s@GetIntegrationResponse'' {} a -> s {apiGatewayManaged = a} :: GetIntegrationResponse')
+
+-- | The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+getIntegrationResponse'_connectionId :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_connectionId = Lens.lens (\GetIntegrationResponse'' {connectionId} -> connectionId) (\s@GetIntegrationResponse'' {} a -> s {connectionId = a} :: GetIntegrationResponse')
+
+-- | The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+getIntegrationResponse'_connectionType :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe ConnectionType)
+getIntegrationResponse'_connectionType = Lens.lens (\GetIntegrationResponse'' {connectionType} -> connectionType) (\s@GetIntegrationResponse'' {} a -> s {connectionType = a} :: GetIntegrationResponse')
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+getIntegrationResponse'_contentHandlingStrategy :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe ContentHandlingStrategy)
+getIntegrationResponse'_contentHandlingStrategy = Lens.lens (\GetIntegrationResponse'' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@GetIntegrationResponse'' {} a -> s {contentHandlingStrategy = a} :: GetIntegrationResponse')
+
+-- | Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+getIntegrationResponse'_credentialsArn :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_credentialsArn = Lens.lens (\GetIntegrationResponse'' {credentialsArn} -> credentialsArn) (\s@GetIntegrationResponse'' {} a -> s {credentialsArn = a} :: GetIntegrationResponse')
+
+-- | Represents the description of an integration.
+getIntegrationResponse'_description :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_description = Lens.lens (\GetIntegrationResponse'' {description} -> description) (\s@GetIntegrationResponse'' {} a -> s {description = a} :: GetIntegrationResponse')
+
+-- | Represents the identifier of an integration.
+getIntegrationResponse'_integrationId :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_integrationId = Lens.lens (\GetIntegrationResponse'' {integrationId} -> integrationId) (\s@GetIntegrationResponse'' {} a -> s {integrationId = a} :: GetIntegrationResponse')
+
+-- | Specifies the integration\'s HTTP method type.
+getIntegrationResponse'_integrationMethod :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_integrationMethod = Lens.lens (\GetIntegrationResponse'' {integrationMethod} -> integrationMethod) (\s@GetIntegrationResponse'' {} a -> s {integrationMethod = a} :: GetIntegrationResponse')
+
+-- | The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+getIntegrationResponse'_integrationResponseSelectionExpression :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_integrationResponseSelectionExpression = Lens.lens (\GetIntegrationResponse'' {integrationResponseSelectionExpression} -> integrationResponseSelectionExpression) (\s@GetIntegrationResponse'' {} a -> s {integrationResponseSelectionExpression = a} :: GetIntegrationResponse')
+
+-- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+getIntegrationResponse'_integrationSubtype :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_integrationSubtype = Lens.lens (\GetIntegrationResponse'' {integrationSubtype} -> integrationSubtype) (\s@GetIntegrationResponse'' {} a -> s {integrationSubtype = a} :: GetIntegrationResponse')
+
+-- | The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+getIntegrationResponse'_integrationType :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe IntegrationType)
+getIntegrationResponse'_integrationType = Lens.lens (\GetIntegrationResponse'' {integrationType} -> integrationType) (\s@GetIntegrationResponse'' {} a -> s {integrationType = a} :: GetIntegrationResponse')
+
+-- | For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+getIntegrationResponse'_integrationUri :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_integrationUri = Lens.lens (\GetIntegrationResponse'' {integrationUri} -> integrationUri) (\s@GetIntegrationResponse'' {} a -> s {integrationUri = a} :: GetIntegrationResponse')
+
+-- | Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+getIntegrationResponse'_passthroughBehavior :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe PassthroughBehavior)
+getIntegrationResponse'_passthroughBehavior = Lens.lens (\GetIntegrationResponse'' {passthroughBehavior} -> passthroughBehavior) (\s@GetIntegrationResponse'' {} a -> s {passthroughBehavior = a} :: GetIntegrationResponse')
+
+-- | Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+getIntegrationResponse'_payloadFormatVersion :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_payloadFormatVersion = Lens.lens (\GetIntegrationResponse'' {payloadFormatVersion} -> payloadFormatVersion) (\s@GetIntegrationResponse'' {} a -> s {payloadFormatVersion = a} :: GetIntegrationResponse')
+
+-- | For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+getIntegrationResponse'_requestParameters :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getIntegrationResponse'_requestParameters = Lens.lens (\GetIntegrationResponse'' {requestParameters} -> requestParameters) (\s@GetIntegrationResponse'' {} a -> s {requestParameters = a} :: GetIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+getIntegrationResponse'_requestTemplates :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getIntegrationResponse'_requestTemplates = Lens.lens (\GetIntegrationResponse'' {requestTemplates} -> requestTemplates) (\s@GetIntegrationResponse'' {} a -> s {requestTemplates = a} :: GetIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+getIntegrationResponse'_responseParameters :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+getIntegrationResponse'_responseParameters = Lens.lens (\GetIntegrationResponse'' {responseParameters} -> responseParameters) (\s@GetIntegrationResponse'' {} a -> s {responseParameters = a} :: GetIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+getIntegrationResponse'_templateSelectionExpression :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Text)
+getIntegrationResponse'_templateSelectionExpression = Lens.lens (\GetIntegrationResponse'' {templateSelectionExpression} -> templateSelectionExpression) (\s@GetIntegrationResponse'' {} a -> s {templateSelectionExpression = a} :: GetIntegrationResponse')
+
+-- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+getIntegrationResponse'_timeoutInMillis :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe Prelude.Natural)
+getIntegrationResponse'_timeoutInMillis = Lens.lens (\GetIntegrationResponse'' {timeoutInMillis} -> timeoutInMillis) (\s@GetIntegrationResponse'' {} a -> s {timeoutInMillis = a} :: GetIntegrationResponse')
+
+-- | The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+getIntegrationResponse'_tlsConfig :: Lens.Lens' GetIntegrationResponse' (Prelude.Maybe TlsConfig)
+getIntegrationResponse'_tlsConfig = Lens.lens (\GetIntegrationResponse'' {tlsConfig} -> tlsConfig) (\s@GetIntegrationResponse'' {} a -> s {tlsConfig = a} :: GetIntegrationResponse')
+
+-- | The response's http status code.
+getIntegrationResponse'_httpStatus :: Lens.Lens' GetIntegrationResponse' Prelude.Int
+getIntegrationResponse'_httpStatus = Lens.lens (\GetIntegrationResponse'' {httpStatus} -> httpStatus) (\s@GetIntegrationResponse'' {} a -> s {httpStatus = a} :: GetIntegrationResponse')
+
+instance Prelude.NFData GetIntegrationResponse' where
+  rnf GetIntegrationResponse'' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf integrationId
+      `Prelude.seq` Prelude.rnf integrationMethod
+      `Prelude.seq` Prelude.rnf integrationResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf integrationSubtype
+      `Prelude.seq` Prelude.rnf integrationType
+      `Prelude.seq` Prelude.rnf integrationUri
+      `Prelude.seq` Prelude.rnf passthroughBehavior
+      `Prelude.seq` Prelude.rnf payloadFormatVersion
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf requestTemplates
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf
+        templateSelectionExpression
+      `Prelude.seq` Prelude.rnf timeoutInMillis
+      `Prelude.seq` Prelude.rnf tlsConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetIntegrationResponse.hs b/gen/Amazonka/ApiGatewayV2/GetIntegrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetIntegrationResponse.hs
@@ -0,0 +1,345 @@
+{-# 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.ApiGatewayV2.GetIntegrationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets an IntegrationResponses.
+module Amazonka.ApiGatewayV2.GetIntegrationResponse
+  ( -- * Creating a Request
+    GetIntegrationResponse (..),
+    newGetIntegrationResponse,
+
+    -- * Request Lenses
+    getIntegrationResponse_apiId,
+    getIntegrationResponse_integrationResponseId,
+    getIntegrationResponse_integrationId,
+
+    -- * Destructuring the Response
+    GetIntegrationResponseResponse (..),
+    newGetIntegrationResponseResponse,
+
+    -- * Response Lenses
+    getIntegrationResponseResponse_contentHandlingStrategy,
+    getIntegrationResponseResponse_integrationResponseId,
+    getIntegrationResponseResponse_integrationResponseKey,
+    getIntegrationResponseResponse_responseParameters,
+    getIntegrationResponseResponse_responseTemplates,
+    getIntegrationResponseResponse_templateSelectionExpression,
+    getIntegrationResponseResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIntegrationResponse' smart constructor.
+data GetIntegrationResponse = GetIntegrationResponse'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration response ID.
+    integrationResponseId :: Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'getIntegrationResponse_apiId' - The API identifier.
+--
+-- 'integrationResponseId', 'getIntegrationResponse_integrationResponseId' - The integration response ID.
+--
+-- 'integrationId', 'getIntegrationResponse_integrationId' - The integration ID.
+newGetIntegrationResponse ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationResponseId'
+  Prelude.Text ->
+  -- | 'integrationId'
+  Prelude.Text ->
+  GetIntegrationResponse
+newGetIntegrationResponse
+  pApiId_
+  pIntegrationResponseId_
+  pIntegrationId_ =
+    GetIntegrationResponse'
+      { apiId = pApiId_,
+        integrationResponseId = pIntegrationResponseId_,
+        integrationId = pIntegrationId_
+      }
+
+-- | The API identifier.
+getIntegrationResponse_apiId :: Lens.Lens' GetIntegrationResponse Prelude.Text
+getIntegrationResponse_apiId = Lens.lens (\GetIntegrationResponse' {apiId} -> apiId) (\s@GetIntegrationResponse' {} a -> s {apiId = a} :: GetIntegrationResponse)
+
+-- | The integration response ID.
+getIntegrationResponse_integrationResponseId :: Lens.Lens' GetIntegrationResponse Prelude.Text
+getIntegrationResponse_integrationResponseId = Lens.lens (\GetIntegrationResponse' {integrationResponseId} -> integrationResponseId) (\s@GetIntegrationResponse' {} a -> s {integrationResponseId = a} :: GetIntegrationResponse)
+
+-- | The integration ID.
+getIntegrationResponse_integrationId :: Lens.Lens' GetIntegrationResponse Prelude.Text
+getIntegrationResponse_integrationId = Lens.lens (\GetIntegrationResponse' {integrationId} -> integrationId) (\s@GetIntegrationResponse' {} a -> s {integrationId = a} :: GetIntegrationResponse)
+
+instance Core.AWSRequest GetIntegrationResponse where
+  type
+    AWSResponse GetIntegrationResponse =
+      GetIntegrationResponseResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetIntegrationResponseResponse'
+            Prelude.<$> (x Data..?> "contentHandlingStrategy")
+            Prelude.<*> (x Data..?> "integrationResponseId")
+            Prelude.<*> (x Data..?> "integrationResponseKey")
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "responseTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "templateSelectionExpression")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIntegrationResponse where
+  hashWithSalt _salt GetIntegrationResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationResponseId
+      `Prelude.hashWithSalt` integrationId
+
+instance Prelude.NFData GetIntegrationResponse where
+  rnf GetIntegrationResponse' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationResponseId
+      `Prelude.seq` Prelude.rnf integrationId
+
+instance Data.ToHeaders GetIntegrationResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetIntegrationResponse where
+  toPath GetIntegrationResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId,
+        "/integrationresponses/",
+        Data.toBS integrationResponseId
+      ]
+
+instance Data.ToQuery GetIntegrationResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetIntegrationResponseResponse' smart constructor.
+data GetIntegrationResponseResponse = GetIntegrationResponseResponse'
+  { -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | The integration response ID.
+    integrationResponseId :: Prelude.Maybe Prelude.Text,
+    -- | The integration response key.
+    integrationResponseKey :: Prelude.Maybe Prelude.Text,
+    -- | A key-value map specifying response parameters that are passed to the
+    -- method response from the backend. The key is a method response header
+    -- parameter name and the mapped value is an integration response header
+    -- value, a static value enclosed within a pair of single quotes, or a JSON
+    -- expression from the integration response body. The mapping key must
+    -- match the pattern of method.response.header.{name}, where name is a
+    -- valid and unique header name. The mapped non-static value must match the
+    -- pattern of integration.response.header.{name} or
+    -- integration.response.body.{JSON-expression}, where name is a valid and
+    -- unique response header name and JSON-expression is a valid JSON
+    -- expression without the $ prefix.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of response templates for the integration response as a
+    -- string-to-string map of key-value pairs. Response templates are
+    -- represented as a key\/value map, with a content-type as the key and a
+    -- template as the value.
+    responseTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The template selection expressions for the integration response.
+    templateSelectionExpression :: 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 'GetIntegrationResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentHandlingStrategy', 'getIntegrationResponseResponse_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'integrationResponseId', 'getIntegrationResponseResponse_integrationResponseId' - The integration response ID.
+--
+-- 'integrationResponseKey', 'getIntegrationResponseResponse_integrationResponseKey' - The integration response key.
+--
+-- 'responseParameters', 'getIntegrationResponseResponse_responseParameters' - A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+--
+-- 'responseTemplates', 'getIntegrationResponseResponse_responseTemplates' - The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+--
+-- 'templateSelectionExpression', 'getIntegrationResponseResponse_templateSelectionExpression' - The template selection expressions for the integration response.
+--
+-- 'httpStatus', 'getIntegrationResponseResponse_httpStatus' - The response's http status code.
+newGetIntegrationResponseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIntegrationResponseResponse
+newGetIntegrationResponseResponse pHttpStatus_ =
+  GetIntegrationResponseResponse'
+    { contentHandlingStrategy =
+        Prelude.Nothing,
+      integrationResponseId = Prelude.Nothing,
+      integrationResponseKey = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      responseTemplates = Prelude.Nothing,
+      templateSelectionExpression =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+getIntegrationResponseResponse_contentHandlingStrategy :: Lens.Lens' GetIntegrationResponseResponse (Prelude.Maybe ContentHandlingStrategy)
+getIntegrationResponseResponse_contentHandlingStrategy = Lens.lens (\GetIntegrationResponseResponse' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@GetIntegrationResponseResponse' {} a -> s {contentHandlingStrategy = a} :: GetIntegrationResponseResponse)
+
+-- | The integration response ID.
+getIntegrationResponseResponse_integrationResponseId :: Lens.Lens' GetIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+getIntegrationResponseResponse_integrationResponseId = Lens.lens (\GetIntegrationResponseResponse' {integrationResponseId} -> integrationResponseId) (\s@GetIntegrationResponseResponse' {} a -> s {integrationResponseId = a} :: GetIntegrationResponseResponse)
+
+-- | The integration response key.
+getIntegrationResponseResponse_integrationResponseKey :: Lens.Lens' GetIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+getIntegrationResponseResponse_integrationResponseKey = Lens.lens (\GetIntegrationResponseResponse' {integrationResponseKey} -> integrationResponseKey) (\s@GetIntegrationResponseResponse' {} a -> s {integrationResponseKey = a} :: GetIntegrationResponseResponse)
+
+-- | A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+getIntegrationResponseResponse_responseParameters :: Lens.Lens' GetIntegrationResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getIntegrationResponseResponse_responseParameters = Lens.lens (\GetIntegrationResponseResponse' {responseParameters} -> responseParameters) (\s@GetIntegrationResponseResponse' {} a -> s {responseParameters = a} :: GetIntegrationResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+getIntegrationResponseResponse_responseTemplates :: Lens.Lens' GetIntegrationResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getIntegrationResponseResponse_responseTemplates = Lens.lens (\GetIntegrationResponseResponse' {responseTemplates} -> responseTemplates) (\s@GetIntegrationResponseResponse' {} a -> s {responseTemplates = a} :: GetIntegrationResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expressions for the integration response.
+getIntegrationResponseResponse_templateSelectionExpression :: Lens.Lens' GetIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+getIntegrationResponseResponse_templateSelectionExpression = Lens.lens (\GetIntegrationResponseResponse' {templateSelectionExpression} -> templateSelectionExpression) (\s@GetIntegrationResponseResponse' {} a -> s {templateSelectionExpression = a} :: GetIntegrationResponseResponse)
+
+-- | The response's http status code.
+getIntegrationResponseResponse_httpStatus :: Lens.Lens' GetIntegrationResponseResponse Prelude.Int
+getIntegrationResponseResponse_httpStatus = Lens.lens (\GetIntegrationResponseResponse' {httpStatus} -> httpStatus) (\s@GetIntegrationResponseResponse' {} a -> s {httpStatus = a} :: GetIntegrationResponseResponse)
+
+instance
+  Prelude.NFData
+    GetIntegrationResponseResponse
+  where
+  rnf GetIntegrationResponseResponse' {..} =
+    Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf integrationResponseId
+      `Prelude.seq` Prelude.rnf integrationResponseKey
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf responseTemplates
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetIntegrationResponses.hs b/gen/Amazonka/ApiGatewayV2/GetIntegrationResponses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetIntegrationResponses.hs
@@ -0,0 +1,256 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.GetIntegrationResponses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the IntegrationResponses for an Integration.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetIntegrationResponses
+  ( -- * Creating a Request
+    GetIntegrationResponses (..),
+    newGetIntegrationResponses,
+
+    -- * Request Lenses
+    getIntegrationResponses_maxResults,
+    getIntegrationResponses_nextToken,
+    getIntegrationResponses_integrationId,
+    getIntegrationResponses_apiId,
+
+    -- * Destructuring the Response
+    GetIntegrationResponsesResponse (..),
+    newGetIntegrationResponsesResponse,
+
+    -- * Response Lenses
+    getIntegrationResponsesResponse_items,
+    getIntegrationResponsesResponse_nextToken,
+    getIntegrationResponsesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIntegrationResponses' smart constructor.
+data GetIntegrationResponses = GetIntegrationResponses'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegrationResponses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getIntegrationResponses_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getIntegrationResponses_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'integrationId', 'getIntegrationResponses_integrationId' - The integration ID.
+--
+-- 'apiId', 'getIntegrationResponses_apiId' - The API identifier.
+newGetIntegrationResponses ::
+  -- | 'integrationId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  GetIntegrationResponses
+newGetIntegrationResponses pIntegrationId_ pApiId_ =
+  GetIntegrationResponses'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      integrationId = pIntegrationId_,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getIntegrationResponses_maxResults :: Lens.Lens' GetIntegrationResponses (Prelude.Maybe Prelude.Text)
+getIntegrationResponses_maxResults = Lens.lens (\GetIntegrationResponses' {maxResults} -> maxResults) (\s@GetIntegrationResponses' {} a -> s {maxResults = a} :: GetIntegrationResponses)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getIntegrationResponses_nextToken :: Lens.Lens' GetIntegrationResponses (Prelude.Maybe Prelude.Text)
+getIntegrationResponses_nextToken = Lens.lens (\GetIntegrationResponses' {nextToken} -> nextToken) (\s@GetIntegrationResponses' {} a -> s {nextToken = a} :: GetIntegrationResponses)
+
+-- | The integration ID.
+getIntegrationResponses_integrationId :: Lens.Lens' GetIntegrationResponses Prelude.Text
+getIntegrationResponses_integrationId = Lens.lens (\GetIntegrationResponses' {integrationId} -> integrationId) (\s@GetIntegrationResponses' {} a -> s {integrationId = a} :: GetIntegrationResponses)
+
+-- | The API identifier.
+getIntegrationResponses_apiId :: Lens.Lens' GetIntegrationResponses Prelude.Text
+getIntegrationResponses_apiId = Lens.lens (\GetIntegrationResponses' {apiId} -> apiId) (\s@GetIntegrationResponses' {} a -> s {apiId = a} :: GetIntegrationResponses)
+
+instance Core.AWSPager GetIntegrationResponses where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getIntegrationResponsesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getIntegrationResponsesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getIntegrationResponses_nextToken
+          Lens..~ rs
+          Lens.^? getIntegrationResponsesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetIntegrationResponses where
+  type
+    AWSResponse GetIntegrationResponses =
+      GetIntegrationResponsesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetIntegrationResponsesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIntegrationResponses where
+  hashWithSalt _salt GetIntegrationResponses' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` integrationId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetIntegrationResponses where
+  rnf GetIntegrationResponses' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf integrationId
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetIntegrationResponses where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetIntegrationResponses where
+  toPath GetIntegrationResponses' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId,
+        "/integrationresponses"
+      ]
+
+instance Data.ToQuery GetIntegrationResponses where
+  toQuery GetIntegrationResponses' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetIntegrationResponsesResponse' smart constructor.
+data GetIntegrationResponsesResponse = GetIntegrationResponsesResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [IntegrationResponse],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegrationResponsesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getIntegrationResponsesResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getIntegrationResponsesResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getIntegrationResponsesResponse_httpStatus' - The response's http status code.
+newGetIntegrationResponsesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIntegrationResponsesResponse
+newGetIntegrationResponsesResponse pHttpStatus_ =
+  GetIntegrationResponsesResponse'
+    { items =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getIntegrationResponsesResponse_items :: Lens.Lens' GetIntegrationResponsesResponse (Prelude.Maybe [IntegrationResponse])
+getIntegrationResponsesResponse_items = Lens.lens (\GetIntegrationResponsesResponse' {items} -> items) (\s@GetIntegrationResponsesResponse' {} a -> s {items = a} :: GetIntegrationResponsesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getIntegrationResponsesResponse_nextToken :: Lens.Lens' GetIntegrationResponsesResponse (Prelude.Maybe Prelude.Text)
+getIntegrationResponsesResponse_nextToken = Lens.lens (\GetIntegrationResponsesResponse' {nextToken} -> nextToken) (\s@GetIntegrationResponsesResponse' {} a -> s {nextToken = a} :: GetIntegrationResponsesResponse)
+
+-- | The response's http status code.
+getIntegrationResponsesResponse_httpStatus :: Lens.Lens' GetIntegrationResponsesResponse Prelude.Int
+getIntegrationResponsesResponse_httpStatus = Lens.lens (\GetIntegrationResponsesResponse' {httpStatus} -> httpStatus) (\s@GetIntegrationResponsesResponse' {} a -> s {httpStatus = a} :: GetIntegrationResponsesResponse)
+
+instance
+  Prelude.NFData
+    GetIntegrationResponsesResponse
+  where
+  rnf GetIntegrationResponsesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetIntegrations.hs b/gen/Amazonka/ApiGatewayV2/GetIntegrations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetIntegrations.hs
@@ -0,0 +1,232 @@
+{-# 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.ApiGatewayV2.GetIntegrations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the Integrations for an API.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetIntegrations
+  ( -- * Creating a Request
+    GetIntegrations (..),
+    newGetIntegrations,
+
+    -- * Request Lenses
+    getIntegrations_maxResults,
+    getIntegrations_nextToken,
+    getIntegrations_apiId,
+
+    -- * Destructuring the Response
+    GetIntegrationsResponse (..),
+    newGetIntegrationsResponse,
+
+    -- * Response Lenses
+    getIntegrationsResponse_items,
+    getIntegrationsResponse_nextToken,
+    getIntegrationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIntegrations' smart constructor.
+data GetIntegrations = GetIntegrations'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegrations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getIntegrations_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getIntegrations_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'apiId', 'getIntegrations_apiId' - The API identifier.
+newGetIntegrations ::
+  -- | 'apiId'
+  Prelude.Text ->
+  GetIntegrations
+newGetIntegrations pApiId_ =
+  GetIntegrations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getIntegrations_maxResults :: Lens.Lens' GetIntegrations (Prelude.Maybe Prelude.Text)
+getIntegrations_maxResults = Lens.lens (\GetIntegrations' {maxResults} -> maxResults) (\s@GetIntegrations' {} a -> s {maxResults = a} :: GetIntegrations)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getIntegrations_nextToken :: Lens.Lens' GetIntegrations (Prelude.Maybe Prelude.Text)
+getIntegrations_nextToken = Lens.lens (\GetIntegrations' {nextToken} -> nextToken) (\s@GetIntegrations' {} a -> s {nextToken = a} :: GetIntegrations)
+
+-- | The API identifier.
+getIntegrations_apiId :: Lens.Lens' GetIntegrations Prelude.Text
+getIntegrations_apiId = Lens.lens (\GetIntegrations' {apiId} -> apiId) (\s@GetIntegrations' {} a -> s {apiId = a} :: GetIntegrations)
+
+instance Core.AWSPager GetIntegrations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getIntegrationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getIntegrationsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getIntegrations_nextToken
+          Lens..~ rs
+          Lens.^? getIntegrationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetIntegrations where
+  type
+    AWSResponse GetIntegrations =
+      GetIntegrationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetIntegrationsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIntegrations where
+  hashWithSalt _salt GetIntegrations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetIntegrations where
+  rnf GetIntegrations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetIntegrations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetIntegrations where
+  toPath GetIntegrations' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/integrations"]
+
+instance Data.ToQuery GetIntegrations where
+  toQuery GetIntegrations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetIntegrationsResponse' smart constructor.
+data GetIntegrationsResponse = GetIntegrationsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Integration],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIntegrationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getIntegrationsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getIntegrationsResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getIntegrationsResponse_httpStatus' - The response's http status code.
+newGetIntegrationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIntegrationsResponse
+newGetIntegrationsResponse pHttpStatus_ =
+  GetIntegrationsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getIntegrationsResponse_items :: Lens.Lens' GetIntegrationsResponse (Prelude.Maybe [Integration])
+getIntegrationsResponse_items = Lens.lens (\GetIntegrationsResponse' {items} -> items) (\s@GetIntegrationsResponse' {} a -> s {items = a} :: GetIntegrationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getIntegrationsResponse_nextToken :: Lens.Lens' GetIntegrationsResponse (Prelude.Maybe Prelude.Text)
+getIntegrationsResponse_nextToken = Lens.lens (\GetIntegrationsResponse' {nextToken} -> nextToken) (\s@GetIntegrationsResponse' {} a -> s {nextToken = a} :: GetIntegrationsResponse)
+
+-- | The response's http status code.
+getIntegrationsResponse_httpStatus :: Lens.Lens' GetIntegrationsResponse Prelude.Int
+getIntegrationsResponse_httpStatus = Lens.lens (\GetIntegrationsResponse' {httpStatus} -> httpStatus) (\s@GetIntegrationsResponse' {} a -> s {httpStatus = a} :: GetIntegrationsResponse)
+
+instance Prelude.NFData GetIntegrationsResponse where
+  rnf GetIntegrationsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetModel.hs b/gen/Amazonka/ApiGatewayV2/GetModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetModel.hs
@@ -0,0 +1,225 @@
+{-# 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.ApiGatewayV2.GetModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a Model.
+module Amazonka.ApiGatewayV2.GetModel
+  ( -- * Creating a Request
+    GetModel (..),
+    newGetModel,
+
+    -- * Request Lenses
+    getModel_modelId,
+    getModel_apiId,
+
+    -- * Destructuring the Response
+    GetModelResponse (..),
+    newGetModelResponse,
+
+    -- * Response Lenses
+    getModelResponse_contentType,
+    getModelResponse_description,
+    getModelResponse_modelId,
+    getModelResponse_name,
+    getModelResponse_schema,
+    getModelResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetModel' smart constructor.
+data GetModel = GetModel'
+  { -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'getModel_modelId' - The model ID.
+--
+-- 'apiId', 'getModel_apiId' - The API identifier.
+newGetModel ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  GetModel
+newGetModel pModelId_ pApiId_ =
+  GetModel' {modelId = pModelId_, apiId = pApiId_}
+
+-- | The model ID.
+getModel_modelId :: Lens.Lens' GetModel Prelude.Text
+getModel_modelId = Lens.lens (\GetModel' {modelId} -> modelId) (\s@GetModel' {} a -> s {modelId = a} :: GetModel)
+
+-- | The API identifier.
+getModel_apiId :: Lens.Lens' GetModel Prelude.Text
+getModel_apiId = Lens.lens (\GetModel' {apiId} -> apiId) (\s@GetModel' {} a -> s {apiId = a} :: GetModel)
+
+instance Core.AWSRequest GetModel where
+  type AWSResponse GetModel = GetModelResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetModelResponse'
+            Prelude.<$> (x Data..?> "contentType")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "modelId")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "schema")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetModel where
+  hashWithSalt _salt GetModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetModel where
+  rnf GetModel' {..} =
+    Prelude.rnf modelId `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetModel where
+  toPath GetModel' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/models/",
+        Data.toBS modelId
+      ]
+
+instance Data.ToQuery GetModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetModelResponse' smart constructor.
+data GetModelResponse = GetModelResponse'
+  { -- | The content-type for the model, for example, \"application\/json\".
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The description of the model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The model identifier.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the model. Must be alphanumeric.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The schema for the model. For application\/json models, this should be
+    -- JSON schema draft 4 model.
+    schema :: 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 'GetModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'getModelResponse_contentType' - The content-type for the model, for example, \"application\/json\".
+--
+-- 'description', 'getModelResponse_description' - The description of the model.
+--
+-- 'modelId', 'getModelResponse_modelId' - The model identifier.
+--
+-- 'name', 'getModelResponse_name' - The name of the model. Must be alphanumeric.
+--
+-- 'schema', 'getModelResponse_schema' - The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+--
+-- 'httpStatus', 'getModelResponse_httpStatus' - The response's http status code.
+newGetModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetModelResponse
+newGetModelResponse pHttpStatus_ =
+  GetModelResponse'
+    { contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The content-type for the model, for example, \"application\/json\".
+getModelResponse_contentType :: Lens.Lens' GetModelResponse (Prelude.Maybe Prelude.Text)
+getModelResponse_contentType = Lens.lens (\GetModelResponse' {contentType} -> contentType) (\s@GetModelResponse' {} a -> s {contentType = a} :: GetModelResponse)
+
+-- | The description of the model.
+getModelResponse_description :: Lens.Lens' GetModelResponse (Prelude.Maybe Prelude.Text)
+getModelResponse_description = Lens.lens (\GetModelResponse' {description} -> description) (\s@GetModelResponse' {} a -> s {description = a} :: GetModelResponse)
+
+-- | The model identifier.
+getModelResponse_modelId :: Lens.Lens' GetModelResponse (Prelude.Maybe Prelude.Text)
+getModelResponse_modelId = Lens.lens (\GetModelResponse' {modelId} -> modelId) (\s@GetModelResponse' {} a -> s {modelId = a} :: GetModelResponse)
+
+-- | The name of the model. Must be alphanumeric.
+getModelResponse_name :: Lens.Lens' GetModelResponse (Prelude.Maybe Prelude.Text)
+getModelResponse_name = Lens.lens (\GetModelResponse' {name} -> name) (\s@GetModelResponse' {} a -> s {name = a} :: GetModelResponse)
+
+-- | The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+getModelResponse_schema :: Lens.Lens' GetModelResponse (Prelude.Maybe Prelude.Text)
+getModelResponse_schema = Lens.lens (\GetModelResponse' {schema} -> schema) (\s@GetModelResponse' {} a -> s {schema = a} :: GetModelResponse)
+
+-- | The response's http status code.
+getModelResponse_httpStatus :: Lens.Lens' GetModelResponse Prelude.Int
+getModelResponse_httpStatus = Lens.lens (\GetModelResponse' {httpStatus} -> httpStatus) (\s@GetModelResponse' {} a -> s {httpStatus = a} :: GetModelResponse)
+
+instance Prelude.NFData GetModelResponse where
+  rnf GetModelResponse' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetModelTemplate.hs b/gen/Amazonka/ApiGatewayV2/GetModelTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetModelTemplate.hs
@@ -0,0 +1,180 @@
+{-# 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.ApiGatewayV2.GetModelTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a model template.
+module Amazonka.ApiGatewayV2.GetModelTemplate
+  ( -- * Creating a Request
+    GetModelTemplate (..),
+    newGetModelTemplate,
+
+    -- * Request Lenses
+    getModelTemplate_modelId,
+    getModelTemplate_apiId,
+
+    -- * Destructuring the Response
+    GetModelTemplateResponse (..),
+    newGetModelTemplateResponse,
+
+    -- * Response Lenses
+    getModelTemplateResponse_value,
+    getModelTemplateResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetModelTemplate' smart constructor.
+data GetModelTemplate = GetModelTemplate'
+  { -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModelTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'getModelTemplate_modelId' - The model ID.
+--
+-- 'apiId', 'getModelTemplate_apiId' - The API identifier.
+newGetModelTemplate ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  GetModelTemplate
+newGetModelTemplate pModelId_ pApiId_ =
+  GetModelTemplate'
+    { modelId = pModelId_,
+      apiId = pApiId_
+    }
+
+-- | The model ID.
+getModelTemplate_modelId :: Lens.Lens' GetModelTemplate Prelude.Text
+getModelTemplate_modelId = Lens.lens (\GetModelTemplate' {modelId} -> modelId) (\s@GetModelTemplate' {} a -> s {modelId = a} :: GetModelTemplate)
+
+-- | The API identifier.
+getModelTemplate_apiId :: Lens.Lens' GetModelTemplate Prelude.Text
+getModelTemplate_apiId = Lens.lens (\GetModelTemplate' {apiId} -> apiId) (\s@GetModelTemplate' {} a -> s {apiId = a} :: GetModelTemplate)
+
+instance Core.AWSRequest GetModelTemplate where
+  type
+    AWSResponse GetModelTemplate =
+      GetModelTemplateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetModelTemplateResponse'
+            Prelude.<$> (x Data..?> "value")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetModelTemplate where
+  hashWithSalt _salt GetModelTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetModelTemplate where
+  rnf GetModelTemplate' {..} =
+    Prelude.rnf modelId `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetModelTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetModelTemplate where
+  toPath GetModelTemplate' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/models/",
+        Data.toBS modelId,
+        "/template"
+      ]
+
+instance Data.ToQuery GetModelTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetModelTemplateResponse' smart constructor.
+data GetModelTemplateResponse = GetModelTemplateResponse'
+  { -- | The template value.
+    value :: 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 'GetModelTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'getModelTemplateResponse_value' - The template value.
+--
+-- 'httpStatus', 'getModelTemplateResponse_httpStatus' - The response's http status code.
+newGetModelTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetModelTemplateResponse
+newGetModelTemplateResponse pHttpStatus_ =
+  GetModelTemplateResponse'
+    { value = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The template value.
+getModelTemplateResponse_value :: Lens.Lens' GetModelTemplateResponse (Prelude.Maybe Prelude.Text)
+getModelTemplateResponse_value = Lens.lens (\GetModelTemplateResponse' {value} -> value) (\s@GetModelTemplateResponse' {} a -> s {value = a} :: GetModelTemplateResponse)
+
+-- | The response's http status code.
+getModelTemplateResponse_httpStatus :: Lens.Lens' GetModelTemplateResponse Prelude.Int
+getModelTemplateResponse_httpStatus = Lens.lens (\GetModelTemplateResponse' {httpStatus} -> httpStatus) (\s@GetModelTemplateResponse' {} a -> s {httpStatus = a} :: GetModelTemplateResponse)
+
+instance Prelude.NFData GetModelTemplateResponse where
+  rnf GetModelTemplateResponse' {..} =
+    Prelude.rnf value
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetModels.hs b/gen/Amazonka/ApiGatewayV2/GetModels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetModels.hs
@@ -0,0 +1,230 @@
+{-# 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.ApiGatewayV2.GetModels
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the Models for an API.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetModels
+  ( -- * Creating a Request
+    GetModels (..),
+    newGetModels,
+
+    -- * Request Lenses
+    getModels_maxResults,
+    getModels_nextToken,
+    getModels_apiId,
+
+    -- * Destructuring the Response
+    GetModelsResponse (..),
+    newGetModelsResponse,
+
+    -- * Response Lenses
+    getModelsResponse_items,
+    getModelsResponse_nextToken,
+    getModelsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetModels' smart constructor.
+data GetModels = GetModels'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModels' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getModels_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getModels_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'apiId', 'getModels_apiId' - The API identifier.
+newGetModels ::
+  -- | 'apiId'
+  Prelude.Text ->
+  GetModels
+newGetModels pApiId_ =
+  GetModels'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getModels_maxResults :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Text)
+getModels_maxResults = Lens.lens (\GetModels' {maxResults} -> maxResults) (\s@GetModels' {} a -> s {maxResults = a} :: GetModels)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getModels_nextToken :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Text)
+getModels_nextToken = Lens.lens (\GetModels' {nextToken} -> nextToken) (\s@GetModels' {} a -> s {nextToken = a} :: GetModels)
+
+-- | The API identifier.
+getModels_apiId :: Lens.Lens' GetModels Prelude.Text
+getModels_apiId = Lens.lens (\GetModels' {apiId} -> apiId) (\s@GetModels' {} a -> s {apiId = a} :: GetModels)
+
+instance Core.AWSPager GetModels where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getModelsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getModelsResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getModels_nextToken
+          Lens..~ rs
+          Lens.^? getModelsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetModels where
+  type AWSResponse GetModels = GetModelsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetModelsResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetModels where
+  hashWithSalt _salt GetModels' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetModels where
+  rnf GetModels' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetModels where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetModels where
+  toPath GetModels' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/models"]
+
+instance Data.ToQuery GetModels where
+  toQuery GetModels' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetModelsResponse' smart constructor.
+data GetModelsResponse = GetModelsResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Model],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModelsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getModelsResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getModelsResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getModelsResponse_httpStatus' - The response's http status code.
+newGetModelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetModelsResponse
+newGetModelsResponse pHttpStatus_ =
+  GetModelsResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getModelsResponse_items :: Lens.Lens' GetModelsResponse (Prelude.Maybe [Model])
+getModelsResponse_items = Lens.lens (\GetModelsResponse' {items} -> items) (\s@GetModelsResponse' {} a -> s {items = a} :: GetModelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getModelsResponse_nextToken :: Lens.Lens' GetModelsResponse (Prelude.Maybe Prelude.Text)
+getModelsResponse_nextToken = Lens.lens (\GetModelsResponse' {nextToken} -> nextToken) (\s@GetModelsResponse' {} a -> s {nextToken = a} :: GetModelsResponse)
+
+-- | The response's http status code.
+getModelsResponse_httpStatus :: Lens.Lens' GetModelsResponse Prelude.Int
+getModelsResponse_httpStatus = Lens.lens (\GetModelsResponse' {httpStatus} -> httpStatus) (\s@GetModelsResponse' {} a -> s {httpStatus = a} :: GetModelsResponse)
+
+instance Prelude.NFData GetModelsResponse where
+  rnf GetModelsResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetRoute.hs b/gen/Amazonka/ApiGatewayV2/GetRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetRoute.hs
@@ -0,0 +1,379 @@
+{-# 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.ApiGatewayV2.GetRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a Route.
+module Amazonka.ApiGatewayV2.GetRoute
+  ( -- * Creating a Request
+    GetRoute (..),
+    newGetRoute,
+
+    -- * Request Lenses
+    getRoute_apiId,
+    getRoute_routeId,
+
+    -- * Destructuring the Response
+    GetRouteResponse' (..),
+    newGetRouteResponse',
+
+    -- * Response Lenses
+    getRouteResponse'_apiGatewayManaged,
+    getRouteResponse'_apiKeyRequired,
+    getRouteResponse'_authorizationScopes,
+    getRouteResponse'_authorizationType,
+    getRouteResponse'_authorizerId,
+    getRouteResponse'_modelSelectionExpression,
+    getRouteResponse'_operationName,
+    getRouteResponse'_requestModels,
+    getRouteResponse'_requestParameters,
+    getRouteResponse'_routeId,
+    getRouteResponse'_routeKey,
+    getRouteResponse'_routeResponseSelectionExpression,
+    getRouteResponse'_target,
+    getRouteResponse'_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRoute' smart constructor.
+data GetRoute = GetRoute'
+  { -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'getRoute_apiId' - The API identifier.
+--
+-- 'routeId', 'getRoute_routeId' - The route ID.
+newGetRoute ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  GetRoute
+newGetRoute pApiId_ pRouteId_ =
+  GetRoute' {apiId = pApiId_, routeId = pRouteId_}
+
+-- | The API identifier.
+getRoute_apiId :: Lens.Lens' GetRoute Prelude.Text
+getRoute_apiId = Lens.lens (\GetRoute' {apiId} -> apiId) (\s@GetRoute' {} a -> s {apiId = a} :: GetRoute)
+
+-- | The route ID.
+getRoute_routeId :: Lens.Lens' GetRoute Prelude.Text
+getRoute_routeId = Lens.lens (\GetRoute' {routeId} -> routeId) (\s@GetRoute' {} a -> s {routeId = a} :: GetRoute)
+
+instance Core.AWSRequest GetRoute where
+  type AWSResponse GetRoute = GetRouteResponse'
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRouteResponse''
+            Prelude.<$> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiKeyRequired")
+            Prelude.<*> ( x
+                            Data..?> "authorizationScopes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "authorizationType")
+            Prelude.<*> (x Data..?> "authorizerId")
+            Prelude.<*> (x Data..?> "modelSelectionExpression")
+            Prelude.<*> (x Data..?> "operationName")
+            Prelude.<*> (x Data..?> "requestModels" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "requestParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "routeId")
+            Prelude.<*> (x Data..?> "routeKey")
+            Prelude.<*> (x Data..?> "routeResponseSelectionExpression")
+            Prelude.<*> (x Data..?> "target")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRoute where
+  hashWithSalt _salt GetRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+
+instance Prelude.NFData GetRoute where
+  rnf GetRoute' {..} =
+    Prelude.rnf apiId `Prelude.seq` Prelude.rnf routeId
+
+instance Data.ToHeaders GetRoute where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRoute where
+  toPath GetRoute' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId
+      ]
+
+instance Data.ToQuery GetRoute where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRouteResponse'' smart constructor.
+data GetRouteResponse' = GetRouteResponse''
+  { -- | Specifies whether a route is managed by API Gateway. If you created an
+    -- API using quick create, the $default route is managed by API Gateway.
+    -- You can\'t modify the $default route key.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether an API key is required for this route. Supported only
+    -- for WebSocket APIs.
+    apiKeyRequired :: Prelude.Maybe Prelude.Bool,
+    -- | A list of authorization scopes configured on a route. The scopes are
+    -- used with a JWT authorizer to authorize the method invocation. The
+    -- authorization works by matching the route scopes against the scopes
+    -- parsed from the access token in the incoming request. The method
+    -- invocation is authorized if any route scope matches a claimed scope in
+    -- the access token. Otherwise, the invocation is not authorized. When the
+    -- route scope is configured, the client must provide an access token
+    -- instead of an identity token for authorization purposes.
+    authorizationScopes :: Prelude.Maybe [Prelude.Text],
+    -- | The authorization type for the route. For WebSocket APIs, valid values
+    -- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+    -- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+    -- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+    -- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+    authorizationType :: Prelude.Maybe AuthorizationType,
+    -- | The identifier of the Authorizer resource to be associated with this
+    -- route. The authorizer identifier is generated by API Gateway when you
+    -- created the authorizer.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | The model selection expression for the route. Supported only for
+    -- WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The operation name for the route.
+    operationName :: Prelude.Maybe Prelude.Text,
+    -- | The request models for the route. Supported only for WebSocket APIs.
+    requestModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The request parameters for the route. Supported only for WebSocket APIs.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The route ID.
+    routeId :: Prelude.Maybe Prelude.Text,
+    -- | The route key for the route.
+    routeKey :: Prelude.Maybe Prelude.Text,
+    -- | The route response selection expression for the route. Supported only
+    -- for WebSocket APIs.
+    routeResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The target for the route.
+    target :: 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 'GetRouteResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'getRouteResponse'_apiGatewayManaged' - Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+--
+-- 'apiKeyRequired', 'getRouteResponse'_apiKeyRequired' - Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+--
+-- 'authorizationScopes', 'getRouteResponse'_authorizationScopes' - A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+--
+-- 'authorizationType', 'getRouteResponse'_authorizationType' - The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+--
+-- 'authorizerId', 'getRouteResponse'_authorizerId' - The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+--
+-- 'modelSelectionExpression', 'getRouteResponse'_modelSelectionExpression' - The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+--
+-- 'operationName', 'getRouteResponse'_operationName' - The operation name for the route.
+--
+-- 'requestModels', 'getRouteResponse'_requestModels' - The request models for the route. Supported only for WebSocket APIs.
+--
+-- 'requestParameters', 'getRouteResponse'_requestParameters' - The request parameters for the route. Supported only for WebSocket APIs.
+--
+-- 'routeId', 'getRouteResponse'_routeId' - The route ID.
+--
+-- 'routeKey', 'getRouteResponse'_routeKey' - The route key for the route.
+--
+-- 'routeResponseSelectionExpression', 'getRouteResponse'_routeResponseSelectionExpression' - The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'target', 'getRouteResponse'_target' - The target for the route.
+--
+-- 'httpStatus', 'getRouteResponse'_httpStatus' - The response's http status code.
+newGetRouteResponse' ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRouteResponse'
+newGetRouteResponse' pHttpStatus_ =
+  GetRouteResponse''
+    { apiGatewayManaged =
+        Prelude.Nothing,
+      apiKeyRequired = Prelude.Nothing,
+      authorizationScopes = Prelude.Nothing,
+      authorizationType = Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      modelSelectionExpression = Prelude.Nothing,
+      operationName = Prelude.Nothing,
+      requestModels = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      routeId = Prelude.Nothing,
+      routeKey = Prelude.Nothing,
+      routeResponseSelectionExpression = Prelude.Nothing,
+      target = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+getRouteResponse'_apiGatewayManaged :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Bool)
+getRouteResponse'_apiGatewayManaged = Lens.lens (\GetRouteResponse'' {apiGatewayManaged} -> apiGatewayManaged) (\s@GetRouteResponse'' {} a -> s {apiGatewayManaged = a} :: GetRouteResponse')
+
+-- | Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+getRouteResponse'_apiKeyRequired :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Bool)
+getRouteResponse'_apiKeyRequired = Lens.lens (\GetRouteResponse'' {apiKeyRequired} -> apiKeyRequired) (\s@GetRouteResponse'' {} a -> s {apiKeyRequired = a} :: GetRouteResponse')
+
+-- | A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+getRouteResponse'_authorizationScopes :: Lens.Lens' GetRouteResponse' (Prelude.Maybe [Prelude.Text])
+getRouteResponse'_authorizationScopes = Lens.lens (\GetRouteResponse'' {authorizationScopes} -> authorizationScopes) (\s@GetRouteResponse'' {} a -> s {authorizationScopes = a} :: GetRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+getRouteResponse'_authorizationType :: Lens.Lens' GetRouteResponse' (Prelude.Maybe AuthorizationType)
+getRouteResponse'_authorizationType = Lens.lens (\GetRouteResponse'' {authorizationType} -> authorizationType) (\s@GetRouteResponse'' {} a -> s {authorizationType = a} :: GetRouteResponse')
+
+-- | The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+getRouteResponse'_authorizerId :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Text)
+getRouteResponse'_authorizerId = Lens.lens (\GetRouteResponse'' {authorizerId} -> authorizerId) (\s@GetRouteResponse'' {} a -> s {authorizerId = a} :: GetRouteResponse')
+
+-- | The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+getRouteResponse'_modelSelectionExpression :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Text)
+getRouteResponse'_modelSelectionExpression = Lens.lens (\GetRouteResponse'' {modelSelectionExpression} -> modelSelectionExpression) (\s@GetRouteResponse'' {} a -> s {modelSelectionExpression = a} :: GetRouteResponse')
+
+-- | The operation name for the route.
+getRouteResponse'_operationName :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Text)
+getRouteResponse'_operationName = Lens.lens (\GetRouteResponse'' {operationName} -> operationName) (\s@GetRouteResponse'' {} a -> s {operationName = a} :: GetRouteResponse')
+
+-- | The request models for the route. Supported only for WebSocket APIs.
+getRouteResponse'_requestModels :: Lens.Lens' GetRouteResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getRouteResponse'_requestModels = Lens.lens (\GetRouteResponse'' {requestModels} -> requestModels) (\s@GetRouteResponse'' {} a -> s {requestModels = a} :: GetRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The request parameters for the route. Supported only for WebSocket APIs.
+getRouteResponse'_requestParameters :: Lens.Lens' GetRouteResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+getRouteResponse'_requestParameters = Lens.lens (\GetRouteResponse'' {requestParameters} -> requestParameters) (\s@GetRouteResponse'' {} a -> s {requestParameters = a} :: GetRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The route ID.
+getRouteResponse'_routeId :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Text)
+getRouteResponse'_routeId = Lens.lens (\GetRouteResponse'' {routeId} -> routeId) (\s@GetRouteResponse'' {} a -> s {routeId = a} :: GetRouteResponse')
+
+-- | The route key for the route.
+getRouteResponse'_routeKey :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Text)
+getRouteResponse'_routeKey = Lens.lens (\GetRouteResponse'' {routeKey} -> routeKey) (\s@GetRouteResponse'' {} a -> s {routeKey = a} :: GetRouteResponse')
+
+-- | The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+getRouteResponse'_routeResponseSelectionExpression :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Text)
+getRouteResponse'_routeResponseSelectionExpression = Lens.lens (\GetRouteResponse'' {routeResponseSelectionExpression} -> routeResponseSelectionExpression) (\s@GetRouteResponse'' {} a -> s {routeResponseSelectionExpression = a} :: GetRouteResponse')
+
+-- | The target for the route.
+getRouteResponse'_target :: Lens.Lens' GetRouteResponse' (Prelude.Maybe Prelude.Text)
+getRouteResponse'_target = Lens.lens (\GetRouteResponse'' {target} -> target) (\s@GetRouteResponse'' {} a -> s {target = a} :: GetRouteResponse')
+
+-- | The response's http status code.
+getRouteResponse'_httpStatus :: Lens.Lens' GetRouteResponse' Prelude.Int
+getRouteResponse'_httpStatus = Lens.lens (\GetRouteResponse'' {httpStatus} -> httpStatus) (\s@GetRouteResponse'' {} a -> s {httpStatus = a} :: GetRouteResponse')
+
+instance Prelude.NFData GetRouteResponse' where
+  rnf GetRouteResponse'' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiKeyRequired
+      `Prelude.seq` Prelude.rnf authorizationScopes
+      `Prelude.seq` Prelude.rnf authorizationType
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf operationName
+      `Prelude.seq` Prelude.rnf requestModels
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf routeId
+      `Prelude.seq` Prelude.rnf routeKey
+      `Prelude.seq` Prelude.rnf routeResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetRouteResponse.hs b/gen/Amazonka/ApiGatewayV2/GetRouteResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetRouteResponse.hs
@@ -0,0 +1,255 @@
+{-# 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.ApiGatewayV2.GetRouteResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a RouteResponse.
+module Amazonka.ApiGatewayV2.GetRouteResponse
+  ( -- * Creating a Request
+    GetRouteResponse (..),
+    newGetRouteResponse,
+
+    -- * Request Lenses
+    getRouteResponse_routeResponseId,
+    getRouteResponse_apiId,
+    getRouteResponse_routeId,
+
+    -- * Destructuring the Response
+    GetRouteResponseResponse (..),
+    newGetRouteResponseResponse,
+
+    -- * Response Lenses
+    getRouteResponseResponse_modelSelectionExpression,
+    getRouteResponseResponse_responseModels,
+    getRouteResponseResponse_responseParameters,
+    getRouteResponseResponse_routeResponseId,
+    getRouteResponseResponse_routeResponseKey,
+    getRouteResponseResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRouteResponse' smart constructor.
+data GetRouteResponse = GetRouteResponse'
+  { -- | The route response ID.
+    routeResponseId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'routeResponseId', 'getRouteResponse_routeResponseId' - The route response ID.
+--
+-- 'apiId', 'getRouteResponse_apiId' - The API identifier.
+--
+-- 'routeId', 'getRouteResponse_routeId' - The route ID.
+newGetRouteResponse ::
+  -- | 'routeResponseId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  GetRouteResponse
+newGetRouteResponse
+  pRouteResponseId_
+  pApiId_
+  pRouteId_ =
+    GetRouteResponse'
+      { routeResponseId =
+          pRouteResponseId_,
+        apiId = pApiId_,
+        routeId = pRouteId_
+      }
+
+-- | The route response ID.
+getRouteResponse_routeResponseId :: Lens.Lens' GetRouteResponse Prelude.Text
+getRouteResponse_routeResponseId = Lens.lens (\GetRouteResponse' {routeResponseId} -> routeResponseId) (\s@GetRouteResponse' {} a -> s {routeResponseId = a} :: GetRouteResponse)
+
+-- | The API identifier.
+getRouteResponse_apiId :: Lens.Lens' GetRouteResponse Prelude.Text
+getRouteResponse_apiId = Lens.lens (\GetRouteResponse' {apiId} -> apiId) (\s@GetRouteResponse' {} a -> s {apiId = a} :: GetRouteResponse)
+
+-- | The route ID.
+getRouteResponse_routeId :: Lens.Lens' GetRouteResponse Prelude.Text
+getRouteResponse_routeId = Lens.lens (\GetRouteResponse' {routeId} -> routeId) (\s@GetRouteResponse' {} a -> s {routeId = a} :: GetRouteResponse)
+
+instance Core.AWSRequest GetRouteResponse where
+  type
+    AWSResponse GetRouteResponse =
+      GetRouteResponseResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRouteResponseResponse'
+            Prelude.<$> (x Data..?> "modelSelectionExpression")
+            Prelude.<*> (x Data..?> "responseModels" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "routeResponseId")
+            Prelude.<*> (x Data..?> "routeResponseKey")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRouteResponse where
+  hashWithSalt _salt GetRouteResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` routeResponseId
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+
+instance Prelude.NFData GetRouteResponse where
+  rnf GetRouteResponse' {..} =
+    Prelude.rnf routeResponseId
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf routeId
+
+instance Data.ToHeaders GetRouteResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRouteResponse where
+  toPath GetRouteResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId,
+        "/routeresponses/",
+        Data.toBS routeResponseId
+      ]
+
+instance Data.ToQuery GetRouteResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRouteResponseResponse' smart constructor.
+data GetRouteResponseResponse = GetRouteResponseResponse'
+  { -- | Represents the model selection expression of a route response. Supported
+    -- only for WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the response models of a route response.
+    responseModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents the response parameters of a route response.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | Represents the identifier of a route response.
+    routeResponseId :: Prelude.Maybe Prelude.Text,
+    -- | Represents the route response key of a route response.
+    routeResponseKey :: 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 'GetRouteResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelSelectionExpression', 'getRouteResponseResponse_modelSelectionExpression' - Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+--
+-- 'responseModels', 'getRouteResponseResponse_responseModels' - Represents the response models of a route response.
+--
+-- 'responseParameters', 'getRouteResponseResponse_responseParameters' - Represents the response parameters of a route response.
+--
+-- 'routeResponseId', 'getRouteResponseResponse_routeResponseId' - Represents the identifier of a route response.
+--
+-- 'routeResponseKey', 'getRouteResponseResponse_routeResponseKey' - Represents the route response key of a route response.
+--
+-- 'httpStatus', 'getRouteResponseResponse_httpStatus' - The response's http status code.
+newGetRouteResponseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRouteResponseResponse
+newGetRouteResponseResponse pHttpStatus_ =
+  GetRouteResponseResponse'
+    { modelSelectionExpression =
+        Prelude.Nothing,
+      responseModels = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      routeResponseId = Prelude.Nothing,
+      routeResponseKey = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+getRouteResponseResponse_modelSelectionExpression :: Lens.Lens' GetRouteResponseResponse (Prelude.Maybe Prelude.Text)
+getRouteResponseResponse_modelSelectionExpression = Lens.lens (\GetRouteResponseResponse' {modelSelectionExpression} -> modelSelectionExpression) (\s@GetRouteResponseResponse' {} a -> s {modelSelectionExpression = a} :: GetRouteResponseResponse)
+
+-- | Represents the response models of a route response.
+getRouteResponseResponse_responseModels :: Lens.Lens' GetRouteResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getRouteResponseResponse_responseModels = Lens.lens (\GetRouteResponseResponse' {responseModels} -> responseModels) (\s@GetRouteResponseResponse' {} a -> s {responseModels = a} :: GetRouteResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the response parameters of a route response.
+getRouteResponseResponse_responseParameters :: Lens.Lens' GetRouteResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+getRouteResponseResponse_responseParameters = Lens.lens (\GetRouteResponseResponse' {responseParameters} -> responseParameters) (\s@GetRouteResponseResponse' {} a -> s {responseParameters = a} :: GetRouteResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the identifier of a route response.
+getRouteResponseResponse_routeResponseId :: Lens.Lens' GetRouteResponseResponse (Prelude.Maybe Prelude.Text)
+getRouteResponseResponse_routeResponseId = Lens.lens (\GetRouteResponseResponse' {routeResponseId} -> routeResponseId) (\s@GetRouteResponseResponse' {} a -> s {routeResponseId = a} :: GetRouteResponseResponse)
+
+-- | Represents the route response key of a route response.
+getRouteResponseResponse_routeResponseKey :: Lens.Lens' GetRouteResponseResponse (Prelude.Maybe Prelude.Text)
+getRouteResponseResponse_routeResponseKey = Lens.lens (\GetRouteResponseResponse' {routeResponseKey} -> routeResponseKey) (\s@GetRouteResponseResponse' {} a -> s {routeResponseKey = a} :: GetRouteResponseResponse)
+
+-- | The response's http status code.
+getRouteResponseResponse_httpStatus :: Lens.Lens' GetRouteResponseResponse Prelude.Int
+getRouteResponseResponse_httpStatus = Lens.lens (\GetRouteResponseResponse' {httpStatus} -> httpStatus) (\s@GetRouteResponseResponse' {} a -> s {httpStatus = a} :: GetRouteResponseResponse)
+
+instance Prelude.NFData GetRouteResponseResponse where
+  rnf GetRouteResponseResponse' {..} =
+    Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf responseModels
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf routeResponseId
+      `Prelude.seq` Prelude.rnf routeResponseKey
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetRouteResponses.hs b/gen/Amazonka/ApiGatewayV2/GetRouteResponses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetRouteResponses.hs
@@ -0,0 +1,251 @@
+{-# 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.ApiGatewayV2.GetRouteResponses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the RouteResponses for a Route.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetRouteResponses
+  ( -- * Creating a Request
+    GetRouteResponses (..),
+    newGetRouteResponses,
+
+    -- * Request Lenses
+    getRouteResponses_maxResults,
+    getRouteResponses_nextToken,
+    getRouteResponses_routeId,
+    getRouteResponses_apiId,
+
+    -- * Destructuring the Response
+    GetRouteResponsesResponse (..),
+    newGetRouteResponsesResponse,
+
+    -- * Response Lenses
+    getRouteResponsesResponse_items,
+    getRouteResponsesResponse_nextToken,
+    getRouteResponsesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRouteResponses' smart constructor.
+data GetRouteResponses = GetRouteResponses'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRouteResponses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRouteResponses_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getRouteResponses_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'routeId', 'getRouteResponses_routeId' - The route ID.
+--
+-- 'apiId', 'getRouteResponses_apiId' - The API identifier.
+newGetRouteResponses ::
+  -- | 'routeId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  GetRouteResponses
+newGetRouteResponses pRouteId_ pApiId_ =
+  GetRouteResponses'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      routeId = pRouteId_,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getRouteResponses_maxResults :: Lens.Lens' GetRouteResponses (Prelude.Maybe Prelude.Text)
+getRouteResponses_maxResults = Lens.lens (\GetRouteResponses' {maxResults} -> maxResults) (\s@GetRouteResponses' {} a -> s {maxResults = a} :: GetRouteResponses)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getRouteResponses_nextToken :: Lens.Lens' GetRouteResponses (Prelude.Maybe Prelude.Text)
+getRouteResponses_nextToken = Lens.lens (\GetRouteResponses' {nextToken} -> nextToken) (\s@GetRouteResponses' {} a -> s {nextToken = a} :: GetRouteResponses)
+
+-- | The route ID.
+getRouteResponses_routeId :: Lens.Lens' GetRouteResponses Prelude.Text
+getRouteResponses_routeId = Lens.lens (\GetRouteResponses' {routeId} -> routeId) (\s@GetRouteResponses' {} a -> s {routeId = a} :: GetRouteResponses)
+
+-- | The API identifier.
+getRouteResponses_apiId :: Lens.Lens' GetRouteResponses Prelude.Text
+getRouteResponses_apiId = Lens.lens (\GetRouteResponses' {apiId} -> apiId) (\s@GetRouteResponses' {} a -> s {apiId = a} :: GetRouteResponses)
+
+instance Core.AWSPager GetRouteResponses where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getRouteResponsesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getRouteResponsesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getRouteResponses_nextToken
+          Lens..~ rs
+          Lens.^? getRouteResponsesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetRouteResponses where
+  type
+    AWSResponse GetRouteResponses =
+      GetRouteResponsesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRouteResponsesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRouteResponses where
+  hashWithSalt _salt GetRouteResponses' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` routeId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetRouteResponses where
+  rnf GetRouteResponses' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf routeId
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetRouteResponses where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRouteResponses where
+  toPath GetRouteResponses' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId,
+        "/routeresponses"
+      ]
+
+instance Data.ToQuery GetRouteResponses where
+  toQuery GetRouteResponses' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetRouteResponsesResponse' smart constructor.
+data GetRouteResponsesResponse = GetRouteResponsesResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [RouteResponse],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRouteResponsesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getRouteResponsesResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getRouteResponsesResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getRouteResponsesResponse_httpStatus' - The response's http status code.
+newGetRouteResponsesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRouteResponsesResponse
+newGetRouteResponsesResponse pHttpStatus_ =
+  GetRouteResponsesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getRouteResponsesResponse_items :: Lens.Lens' GetRouteResponsesResponse (Prelude.Maybe [RouteResponse])
+getRouteResponsesResponse_items = Lens.lens (\GetRouteResponsesResponse' {items} -> items) (\s@GetRouteResponsesResponse' {} a -> s {items = a} :: GetRouteResponsesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getRouteResponsesResponse_nextToken :: Lens.Lens' GetRouteResponsesResponse (Prelude.Maybe Prelude.Text)
+getRouteResponsesResponse_nextToken = Lens.lens (\GetRouteResponsesResponse' {nextToken} -> nextToken) (\s@GetRouteResponsesResponse' {} a -> s {nextToken = a} :: GetRouteResponsesResponse)
+
+-- | The response's http status code.
+getRouteResponsesResponse_httpStatus :: Lens.Lens' GetRouteResponsesResponse Prelude.Int
+getRouteResponsesResponse_httpStatus = Lens.lens (\GetRouteResponsesResponse' {httpStatus} -> httpStatus) (\s@GetRouteResponsesResponse' {} a -> s {httpStatus = a} :: GetRouteResponsesResponse)
+
+instance Prelude.NFData GetRouteResponsesResponse where
+  rnf GetRouteResponsesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetRoutes.hs b/gen/Amazonka/ApiGatewayV2/GetRoutes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetRoutes.hs
@@ -0,0 +1,230 @@
+{-# 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.ApiGatewayV2.GetRoutes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the Routes for an API.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetRoutes
+  ( -- * Creating a Request
+    GetRoutes (..),
+    newGetRoutes,
+
+    -- * Request Lenses
+    getRoutes_maxResults,
+    getRoutes_nextToken,
+    getRoutes_apiId,
+
+    -- * Destructuring the Response
+    GetRoutesResponse (..),
+    newGetRoutesResponse,
+
+    -- * Response Lenses
+    getRoutesResponse_items,
+    getRoutesResponse_nextToken,
+    getRoutesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRoutes' smart constructor.
+data GetRoutes = GetRoutes'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRoutes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRoutes_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getRoutes_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'apiId', 'getRoutes_apiId' - The API identifier.
+newGetRoutes ::
+  -- | 'apiId'
+  Prelude.Text ->
+  GetRoutes
+newGetRoutes pApiId_ =
+  GetRoutes'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getRoutes_maxResults :: Lens.Lens' GetRoutes (Prelude.Maybe Prelude.Text)
+getRoutes_maxResults = Lens.lens (\GetRoutes' {maxResults} -> maxResults) (\s@GetRoutes' {} a -> s {maxResults = a} :: GetRoutes)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getRoutes_nextToken :: Lens.Lens' GetRoutes (Prelude.Maybe Prelude.Text)
+getRoutes_nextToken = Lens.lens (\GetRoutes' {nextToken} -> nextToken) (\s@GetRoutes' {} a -> s {nextToken = a} :: GetRoutes)
+
+-- | The API identifier.
+getRoutes_apiId :: Lens.Lens' GetRoutes Prelude.Text
+getRoutes_apiId = Lens.lens (\GetRoutes' {apiId} -> apiId) (\s@GetRoutes' {} a -> s {apiId = a} :: GetRoutes)
+
+instance Core.AWSPager GetRoutes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getRoutesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getRoutesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getRoutes_nextToken
+          Lens..~ rs
+          Lens.^? getRoutesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetRoutes where
+  type AWSResponse GetRoutes = GetRoutesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRoutesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRoutes where
+  hashWithSalt _salt GetRoutes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetRoutes where
+  rnf GetRoutes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetRoutes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRoutes where
+  toPath GetRoutes' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/routes"]
+
+instance Data.ToQuery GetRoutes where
+  toQuery GetRoutes' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetRoutesResponse' smart constructor.
+data GetRoutesResponse = GetRoutesResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Route],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRoutesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getRoutesResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getRoutesResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getRoutesResponse_httpStatus' - The response's http status code.
+newGetRoutesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRoutesResponse
+newGetRoutesResponse pHttpStatus_ =
+  GetRoutesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getRoutesResponse_items :: Lens.Lens' GetRoutesResponse (Prelude.Maybe [Route])
+getRoutesResponse_items = Lens.lens (\GetRoutesResponse' {items} -> items) (\s@GetRoutesResponse' {} a -> s {items = a} :: GetRoutesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getRoutesResponse_nextToken :: Lens.Lens' GetRoutesResponse (Prelude.Maybe Prelude.Text)
+getRoutesResponse_nextToken = Lens.lens (\GetRoutesResponse' {nextToken} -> nextToken) (\s@GetRoutesResponse' {} a -> s {nextToken = a} :: GetRoutesResponse)
+
+-- | The response's http status code.
+getRoutesResponse_httpStatus :: Lens.Lens' GetRoutesResponse Prelude.Int
+getRoutesResponse_httpStatus = Lens.lens (\GetRoutesResponse' {httpStatus} -> httpStatus) (\s@GetRoutesResponse' {} a -> s {httpStatus = a} :: GetRoutesResponse)
+
+instance Prelude.NFData GetRoutesResponse where
+  rnf GetRoutesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetStage.hs b/gen/Amazonka/ApiGatewayV2/GetStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetStage.hs
@@ -0,0 +1,362 @@
+{-# 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.ApiGatewayV2.GetStage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a Stage.
+module Amazonka.ApiGatewayV2.GetStage
+  ( -- * Creating a Request
+    GetStage (..),
+    newGetStage,
+
+    -- * Request Lenses
+    getStage_stageName,
+    getStage_apiId,
+
+    -- * Destructuring the Response
+    GetStageResponse (..),
+    newGetStageResponse,
+
+    -- * Response Lenses
+    getStageResponse_accessLogSettings,
+    getStageResponse_apiGatewayManaged,
+    getStageResponse_autoDeploy,
+    getStageResponse_clientCertificateId,
+    getStageResponse_createdDate,
+    getStageResponse_defaultRouteSettings,
+    getStageResponse_deploymentId,
+    getStageResponse_description,
+    getStageResponse_lastDeploymentStatusMessage,
+    getStageResponse_lastUpdatedDate,
+    getStageResponse_routeSettings,
+    getStageResponse_stageName,
+    getStageResponse_stageVariables,
+    getStageResponse_tags,
+    getStageResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStage' smart constructor.
+data GetStage = GetStage'
+  { -- | The stage name. Stage names can only contain alphanumeric characters,
+    -- hyphens, and underscores. Maximum length is 128 characters.
+    stageName :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stageName', 'getStage_stageName' - The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+--
+-- 'apiId', 'getStage_apiId' - The API identifier.
+newGetStage ::
+  -- | 'stageName'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  GetStage
+newGetStage pStageName_ pApiId_ =
+  GetStage' {stageName = pStageName_, apiId = pApiId_}
+
+-- | The stage name. Stage names can only contain alphanumeric characters,
+-- hyphens, and underscores. Maximum length is 128 characters.
+getStage_stageName :: Lens.Lens' GetStage Prelude.Text
+getStage_stageName = Lens.lens (\GetStage' {stageName} -> stageName) (\s@GetStage' {} a -> s {stageName = a} :: GetStage)
+
+-- | The API identifier.
+getStage_apiId :: Lens.Lens' GetStage Prelude.Text
+getStage_apiId = Lens.lens (\GetStage' {apiId} -> apiId) (\s@GetStage' {} a -> s {apiId = a} :: GetStage)
+
+instance Core.AWSRequest GetStage where
+  type AWSResponse GetStage = GetStageResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStageResponse'
+            Prelude.<$> (x Data..?> "accessLogSettings")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "autoDeploy")
+            Prelude.<*> (x Data..?> "clientCertificateId")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "defaultRouteSettings")
+            Prelude.<*> (x Data..?> "deploymentId")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "lastDeploymentStatusMessage")
+            Prelude.<*> (x Data..?> "lastUpdatedDate")
+            Prelude.<*> (x Data..?> "routeSettings" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "stageName")
+            Prelude.<*> (x Data..?> "stageVariables" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStage where
+  hashWithSalt _salt GetStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetStage where
+  rnf GetStage' {..} =
+    Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetStage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStage where
+  toPath GetStage' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/stages/",
+        Data.toBS stageName
+      ]
+
+instance Data.ToQuery GetStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStageResponse' smart constructor.
+data GetStageResponse = GetStageResponse'
+  { -- | Settings for logging access in this stage.
+    accessLogSettings :: Prelude.Maybe AccessLogSettings,
+    -- | Specifies whether a stage is managed by API Gateway. If you created an
+    -- API using quick create, the $default stage is managed by API Gateway.
+    -- You can\'t modify the $default stage.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether updates to an API automatically trigger a new
+    -- deployment. The default value is false.
+    autoDeploy :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of a client certificate for a Stage. Supported only for
+    -- WebSocket APIs.
+    clientCertificateId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | Default route settings for the stage.
+    defaultRouteSettings :: Prelude.Maybe RouteSettings,
+    -- | The identifier of the Deployment that the Stage is associated with.
+    -- Can\'t be updated if autoDeploy is enabled.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Describes the status of the last deployment of a stage. Supported only
+    -- for stages with autoDeploy enabled.
+    lastDeploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was last updated.
+    lastUpdatedDate :: Prelude.Maybe Data.ISO8601,
+    -- | Route settings for the stage, by routeKey.
+    routeSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings),
+    -- | The name of the stage.
+    stageName :: Prelude.Maybe Prelude.Text,
+    -- | A map that defines the stage variables for a stage resource. Variable
+    -- names can have alphanumeric and underscore characters, and the values
+    -- must match [A-Za-z0-9-._~:\/?#&=,]+.
+    stageVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of tags. Each tag element is associated with a given
+    -- resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessLogSettings', 'getStageResponse_accessLogSettings' - Settings for logging access in this stage.
+--
+-- 'apiGatewayManaged', 'getStageResponse_apiGatewayManaged' - Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+--
+-- 'autoDeploy', 'getStageResponse_autoDeploy' - Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+--
+-- 'clientCertificateId', 'getStageResponse_clientCertificateId' - The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+--
+-- 'createdDate', 'getStageResponse_createdDate' - The timestamp when the stage was created.
+--
+-- 'defaultRouteSettings', 'getStageResponse_defaultRouteSettings' - Default route settings for the stage.
+--
+-- 'deploymentId', 'getStageResponse_deploymentId' - The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+--
+-- 'description', 'getStageResponse_description' - The description of the stage.
+--
+-- 'lastDeploymentStatusMessage', 'getStageResponse_lastDeploymentStatusMessage' - Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+--
+-- 'lastUpdatedDate', 'getStageResponse_lastUpdatedDate' - The timestamp when the stage was last updated.
+--
+-- 'routeSettings', 'getStageResponse_routeSettings' - Route settings for the stage, by routeKey.
+--
+-- 'stageName', 'getStageResponse_stageName' - The name of the stage.
+--
+-- 'stageVariables', 'getStageResponse_stageVariables' - A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+--
+-- 'tags', 'getStageResponse_tags' - The collection of tags. Each tag element is associated with a given
+-- resource.
+--
+-- 'httpStatus', 'getStageResponse_httpStatus' - The response's http status code.
+newGetStageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStageResponse
+newGetStageResponse pHttpStatus_ =
+  GetStageResponse'
+    { accessLogSettings =
+        Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      autoDeploy = Prelude.Nothing,
+      clientCertificateId = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      defaultRouteSettings = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastDeploymentStatusMessage = Prelude.Nothing,
+      lastUpdatedDate = Prelude.Nothing,
+      routeSettings = Prelude.Nothing,
+      stageName = Prelude.Nothing,
+      stageVariables = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Settings for logging access in this stage.
+getStageResponse_accessLogSettings :: Lens.Lens' GetStageResponse (Prelude.Maybe AccessLogSettings)
+getStageResponse_accessLogSettings = Lens.lens (\GetStageResponse' {accessLogSettings} -> accessLogSettings) (\s@GetStageResponse' {} a -> s {accessLogSettings = a} :: GetStageResponse)
+
+-- | Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+getStageResponse_apiGatewayManaged :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.Bool)
+getStageResponse_apiGatewayManaged = Lens.lens (\GetStageResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@GetStageResponse' {} a -> s {apiGatewayManaged = a} :: GetStageResponse)
+
+-- | Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+getStageResponse_autoDeploy :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.Bool)
+getStageResponse_autoDeploy = Lens.lens (\GetStageResponse' {autoDeploy} -> autoDeploy) (\s@GetStageResponse' {} a -> s {autoDeploy = a} :: GetStageResponse)
+
+-- | The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+getStageResponse_clientCertificateId :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.Text)
+getStageResponse_clientCertificateId = Lens.lens (\GetStageResponse' {clientCertificateId} -> clientCertificateId) (\s@GetStageResponse' {} a -> s {clientCertificateId = a} :: GetStageResponse)
+
+-- | The timestamp when the stage was created.
+getStageResponse_createdDate :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.UTCTime)
+getStageResponse_createdDate = Lens.lens (\GetStageResponse' {createdDate} -> createdDate) (\s@GetStageResponse' {} a -> s {createdDate = a} :: GetStageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Default route settings for the stage.
+getStageResponse_defaultRouteSettings :: Lens.Lens' GetStageResponse (Prelude.Maybe RouteSettings)
+getStageResponse_defaultRouteSettings = Lens.lens (\GetStageResponse' {defaultRouteSettings} -> defaultRouteSettings) (\s@GetStageResponse' {} a -> s {defaultRouteSettings = a} :: GetStageResponse)
+
+-- | The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+getStageResponse_deploymentId :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.Text)
+getStageResponse_deploymentId = Lens.lens (\GetStageResponse' {deploymentId} -> deploymentId) (\s@GetStageResponse' {} a -> s {deploymentId = a} :: GetStageResponse)
+
+-- | The description of the stage.
+getStageResponse_description :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.Text)
+getStageResponse_description = Lens.lens (\GetStageResponse' {description} -> description) (\s@GetStageResponse' {} a -> s {description = a} :: GetStageResponse)
+
+-- | Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+getStageResponse_lastDeploymentStatusMessage :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.Text)
+getStageResponse_lastDeploymentStatusMessage = Lens.lens (\GetStageResponse' {lastDeploymentStatusMessage} -> lastDeploymentStatusMessage) (\s@GetStageResponse' {} a -> s {lastDeploymentStatusMessage = a} :: GetStageResponse)
+
+-- | The timestamp when the stage was last updated.
+getStageResponse_lastUpdatedDate :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.UTCTime)
+getStageResponse_lastUpdatedDate = Lens.lens (\GetStageResponse' {lastUpdatedDate} -> lastUpdatedDate) (\s@GetStageResponse' {} a -> s {lastUpdatedDate = a} :: GetStageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Route settings for the stage, by routeKey.
+getStageResponse_routeSettings :: Lens.Lens' GetStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings))
+getStageResponse_routeSettings = Lens.lens (\GetStageResponse' {routeSettings} -> routeSettings) (\s@GetStageResponse' {} a -> s {routeSettings = a} :: GetStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the stage.
+getStageResponse_stageName :: Lens.Lens' GetStageResponse (Prelude.Maybe Prelude.Text)
+getStageResponse_stageName = Lens.lens (\GetStageResponse' {stageName} -> stageName) (\s@GetStageResponse' {} a -> s {stageName = a} :: GetStageResponse)
+
+-- | A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+getStageResponse_stageVariables :: Lens.Lens' GetStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getStageResponse_stageVariables = Lens.lens (\GetStageResponse' {stageVariables} -> stageVariables) (\s@GetStageResponse' {} a -> s {stageVariables = a} :: GetStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of tags. Each tag element is associated with a given
+-- resource.
+getStageResponse_tags :: Lens.Lens' GetStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getStageResponse_tags = Lens.lens (\GetStageResponse' {tags} -> tags) (\s@GetStageResponse' {} a -> s {tags = a} :: GetStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getStageResponse_httpStatus :: Lens.Lens' GetStageResponse Prelude.Int
+getStageResponse_httpStatus = Lens.lens (\GetStageResponse' {httpStatus} -> httpStatus) (\s@GetStageResponse' {} a -> s {httpStatus = a} :: GetStageResponse)
+
+instance Prelude.NFData GetStageResponse where
+  rnf GetStageResponse' {..} =
+    Prelude.rnf accessLogSettings
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf autoDeploy
+      `Prelude.seq` Prelude.rnf clientCertificateId
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf defaultRouteSettings
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastDeploymentStatusMessage
+      `Prelude.seq` Prelude.rnf lastUpdatedDate
+      `Prelude.seq` Prelude.rnf routeSettings
+      `Prelude.seq` Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf stageVariables
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetStages.hs b/gen/Amazonka/ApiGatewayV2/GetStages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetStages.hs
@@ -0,0 +1,230 @@
+{-# 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.ApiGatewayV2.GetStages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the Stages for an API.
+--
+-- This operation returns paginated results.
+module Amazonka.ApiGatewayV2.GetStages
+  ( -- * Creating a Request
+    GetStages (..),
+    newGetStages,
+
+    -- * Request Lenses
+    getStages_maxResults,
+    getStages_nextToken,
+    getStages_apiId,
+
+    -- * Destructuring the Response
+    GetStagesResponse (..),
+    newGetStagesResponse,
+
+    -- * Response Lenses
+    getStagesResponse_items,
+    getStagesResponse_nextToken,
+    getStagesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStages' smart constructor.
+data GetStages = GetStages'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getStages_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getStages_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'apiId', 'getStages_apiId' - The API identifier.
+newGetStages ::
+  -- | 'apiId'
+  Prelude.Text ->
+  GetStages
+newGetStages pApiId_ =
+  GetStages'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getStages_maxResults :: Lens.Lens' GetStages (Prelude.Maybe Prelude.Text)
+getStages_maxResults = Lens.lens (\GetStages' {maxResults} -> maxResults) (\s@GetStages' {} a -> s {maxResults = a} :: GetStages)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getStages_nextToken :: Lens.Lens' GetStages (Prelude.Maybe Prelude.Text)
+getStages_nextToken = Lens.lens (\GetStages' {nextToken} -> nextToken) (\s@GetStages' {} a -> s {nextToken = a} :: GetStages)
+
+-- | The API identifier.
+getStages_apiId :: Lens.Lens' GetStages Prelude.Text
+getStages_apiId = Lens.lens (\GetStages' {apiId} -> apiId) (\s@GetStages' {} a -> s {apiId = a} :: GetStages)
+
+instance Core.AWSPager GetStages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getStagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getStagesResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getStages_nextToken
+          Lens..~ rs
+          Lens.^? getStagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetStages where
+  type AWSResponse GetStages = GetStagesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStagesResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStages where
+  hashWithSalt _salt GetStages' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData GetStages where
+  rnf GetStages' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders GetStages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStages where
+  toPath GetStages' {..} =
+    Prelude.mconcat
+      ["/v2/apis/", Data.toBS apiId, "/stages"]
+
+instance Data.ToQuery GetStages where
+  toQuery GetStages' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetStagesResponse' smart constructor.
+data GetStagesResponse = GetStagesResponse'
+  { -- | The elements from this collection.
+    items :: Prelude.Maybe [Stage],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getStagesResponse_items' - The elements from this collection.
+--
+-- 'nextToken', 'getStagesResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getStagesResponse_httpStatus' - The response's http status code.
+newGetStagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStagesResponse
+newGetStagesResponse pHttpStatus_ =
+  GetStagesResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elements from this collection.
+getStagesResponse_items :: Lens.Lens' GetStagesResponse (Prelude.Maybe [Stage])
+getStagesResponse_items = Lens.lens (\GetStagesResponse' {items} -> items) (\s@GetStagesResponse' {} a -> s {items = a} :: GetStagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getStagesResponse_nextToken :: Lens.Lens' GetStagesResponse (Prelude.Maybe Prelude.Text)
+getStagesResponse_nextToken = Lens.lens (\GetStagesResponse' {nextToken} -> nextToken) (\s@GetStagesResponse' {} a -> s {nextToken = a} :: GetStagesResponse)
+
+-- | The response's http status code.
+getStagesResponse_httpStatus :: Lens.Lens' GetStagesResponse Prelude.Int
+getStagesResponse_httpStatus = Lens.lens (\GetStagesResponse' {httpStatus} -> httpStatus) (\s@GetStagesResponse' {} a -> s {httpStatus = a} :: GetStagesResponse)
+
+instance Prelude.NFData GetStagesResponse where
+  rnf GetStagesResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetTags.hs b/gen/Amazonka/ApiGatewayV2/GetTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetTags.hs
@@ -0,0 +1,155 @@
+{-# 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.ApiGatewayV2.GetTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a collection of Tag resources.
+module Amazonka.ApiGatewayV2.GetTags
+  ( -- * Creating a Request
+    GetTags (..),
+    newGetTags,
+
+    -- * Request Lenses
+    getTags_resourceArn,
+
+    -- * Destructuring the Response
+    GetTagsResponse (..),
+    newGetTagsResponse,
+
+    -- * Response Lenses
+    getTagsResponse_tags,
+    getTagsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTags' smart constructor.
+data GetTags = GetTags'
+  { -- | The resource ARN for the tag.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getTags_resourceArn' - The resource ARN for the tag.
+newGetTags ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  GetTags
+newGetTags pResourceArn_ =
+  GetTags' {resourceArn = pResourceArn_}
+
+-- | The resource ARN for the tag.
+getTags_resourceArn :: Lens.Lens' GetTags Prelude.Text
+getTags_resourceArn = Lens.lens (\GetTags' {resourceArn} -> resourceArn) (\s@GetTags' {} a -> s {resourceArn = a} :: GetTags)
+
+instance Core.AWSRequest GetTags where
+  type AWSResponse GetTags = GetTagsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetTagsResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetTags where
+  hashWithSalt _salt GetTags' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData GetTags where
+  rnf GetTags' {..} = Prelude.rnf resourceArn
+
+instance Data.ToHeaders GetTags where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetTags where
+  toPath GetTags' {..} =
+    Prelude.mconcat
+      ["/v2/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery GetTags where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetTagsResponse' smart constructor.
+data GetTagsResponse = GetTagsResponse'
+  { 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 'GetTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getTagsResponse_tags' - Undocumented member.
+--
+-- 'httpStatus', 'getTagsResponse_httpStatus' - The response's http status code.
+newGetTagsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTagsResponse
+newGetTagsResponse pHttpStatus_ =
+  GetTagsResponse'
+    { tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getTagsResponse_tags :: Lens.Lens' GetTagsResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getTagsResponse_tags = Lens.lens (\GetTagsResponse' {tags} -> tags) (\s@GetTagsResponse' {} a -> s {tags = a} :: GetTagsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTagsResponse_httpStatus :: Lens.Lens' GetTagsResponse Prelude.Int
+getTagsResponse_httpStatus = Lens.lens (\GetTagsResponse' {httpStatus} -> httpStatus) (\s@GetTagsResponse' {} a -> s {httpStatus = a} :: GetTagsResponse)
+
+instance Prelude.NFData GetTagsResponse where
+  rnf GetTagsResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetVpcLink.hs b/gen/Amazonka/ApiGatewayV2/GetVpcLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetVpcLink.hs
@@ -0,0 +1,255 @@
+{-# 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.ApiGatewayV2.GetVpcLink
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a VPC link.
+module Amazonka.ApiGatewayV2.GetVpcLink
+  ( -- * Creating a Request
+    GetVpcLink (..),
+    newGetVpcLink,
+
+    -- * Request Lenses
+    getVpcLink_vpcLinkId,
+
+    -- * Destructuring the Response
+    GetVpcLinkResponse (..),
+    newGetVpcLinkResponse,
+
+    -- * Response Lenses
+    getVpcLinkResponse_createdDate,
+    getVpcLinkResponse_name,
+    getVpcLinkResponse_securityGroupIds,
+    getVpcLinkResponse_subnetIds,
+    getVpcLinkResponse_tags,
+    getVpcLinkResponse_vpcLinkId,
+    getVpcLinkResponse_vpcLinkStatus,
+    getVpcLinkResponse_vpcLinkStatusMessage,
+    getVpcLinkResponse_vpcLinkVersion,
+    getVpcLinkResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVpcLink' smart constructor.
+data GetVpcLink = GetVpcLink'
+  { -- | The ID of the VPC link.
+    vpcLinkId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpcLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcLinkId', 'getVpcLink_vpcLinkId' - The ID of the VPC link.
+newGetVpcLink ::
+  -- | 'vpcLinkId'
+  Prelude.Text ->
+  GetVpcLink
+newGetVpcLink pVpcLinkId_ =
+  GetVpcLink' {vpcLinkId = pVpcLinkId_}
+
+-- | The ID of the VPC link.
+getVpcLink_vpcLinkId :: Lens.Lens' GetVpcLink Prelude.Text
+getVpcLink_vpcLinkId = Lens.lens (\GetVpcLink' {vpcLinkId} -> vpcLinkId) (\s@GetVpcLink' {} a -> s {vpcLinkId = a} :: GetVpcLink)
+
+instance Core.AWSRequest GetVpcLink where
+  type AWSResponse GetVpcLink = GetVpcLinkResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetVpcLinkResponse'
+            Prelude.<$> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> ( x
+                            Data..?> "securityGroupIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "subnetIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "vpcLinkId")
+            Prelude.<*> (x Data..?> "vpcLinkStatus")
+            Prelude.<*> (x Data..?> "vpcLinkStatusMessage")
+            Prelude.<*> (x Data..?> "vpcLinkVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetVpcLink where
+  hashWithSalt _salt GetVpcLink' {..} =
+    _salt `Prelude.hashWithSalt` vpcLinkId
+
+instance Prelude.NFData GetVpcLink where
+  rnf GetVpcLink' {..} = Prelude.rnf vpcLinkId
+
+instance Data.ToHeaders GetVpcLink where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetVpcLink where
+  toPath GetVpcLink' {..} =
+    Prelude.mconcat
+      ["/v2/vpclinks/", Data.toBS vpcLinkId]
+
+instance Data.ToQuery GetVpcLink where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetVpcLinkResponse' smart constructor.
+data GetVpcLinkResponse = GetVpcLinkResponse'
+  { -- | The timestamp when the VPC link was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the VPC link.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of security group IDs for the VPC link.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | A list of subnet IDs to include in the VPC link.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | Tags for the VPC link.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the VPC link.
+    vpcLinkId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the VPC link.
+    vpcLinkStatus :: Prelude.Maybe VpcLinkStatus,
+    -- | A message summarizing the cause of the status of the VPC link.
+    vpcLinkStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The version of the VPC link.
+    vpcLinkVersion :: Prelude.Maybe VpcLinkVersion,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpcLinkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'getVpcLinkResponse_createdDate' - The timestamp when the VPC link was created.
+--
+-- 'name', 'getVpcLinkResponse_name' - The name of the VPC link.
+--
+-- 'securityGroupIds', 'getVpcLinkResponse_securityGroupIds' - A list of security group IDs for the VPC link.
+--
+-- 'subnetIds', 'getVpcLinkResponse_subnetIds' - A list of subnet IDs to include in the VPC link.
+--
+-- 'tags', 'getVpcLinkResponse_tags' - Tags for the VPC link.
+--
+-- 'vpcLinkId', 'getVpcLinkResponse_vpcLinkId' - The ID of the VPC link.
+--
+-- 'vpcLinkStatus', 'getVpcLinkResponse_vpcLinkStatus' - The status of the VPC link.
+--
+-- 'vpcLinkStatusMessage', 'getVpcLinkResponse_vpcLinkStatusMessage' - A message summarizing the cause of the status of the VPC link.
+--
+-- 'vpcLinkVersion', 'getVpcLinkResponse_vpcLinkVersion' - The version of the VPC link.
+--
+-- 'httpStatus', 'getVpcLinkResponse_httpStatus' - The response's http status code.
+newGetVpcLinkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVpcLinkResponse
+newGetVpcLinkResponse pHttpStatus_ =
+  GetVpcLinkResponse'
+    { createdDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcLinkId = Prelude.Nothing,
+      vpcLinkStatus = Prelude.Nothing,
+      vpcLinkStatusMessage = Prelude.Nothing,
+      vpcLinkVersion = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The timestamp when the VPC link was created.
+getVpcLinkResponse_createdDate :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe Prelude.UTCTime)
+getVpcLinkResponse_createdDate = Lens.lens (\GetVpcLinkResponse' {createdDate} -> createdDate) (\s@GetVpcLinkResponse' {} a -> s {createdDate = a} :: GetVpcLinkResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the VPC link.
+getVpcLinkResponse_name :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe Prelude.Text)
+getVpcLinkResponse_name = Lens.lens (\GetVpcLinkResponse' {name} -> name) (\s@GetVpcLinkResponse' {} a -> s {name = a} :: GetVpcLinkResponse)
+
+-- | A list of security group IDs for the VPC link.
+getVpcLinkResponse_securityGroupIds :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe [Prelude.Text])
+getVpcLinkResponse_securityGroupIds = Lens.lens (\GetVpcLinkResponse' {securityGroupIds} -> securityGroupIds) (\s@GetVpcLinkResponse' {} a -> s {securityGroupIds = a} :: GetVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of subnet IDs to include in the VPC link.
+getVpcLinkResponse_subnetIds :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe [Prelude.Text])
+getVpcLinkResponse_subnetIds = Lens.lens (\GetVpcLinkResponse' {subnetIds} -> subnetIds) (\s@GetVpcLinkResponse' {} a -> s {subnetIds = a} :: GetVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags for the VPC link.
+getVpcLinkResponse_tags :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getVpcLinkResponse_tags = Lens.lens (\GetVpcLinkResponse' {tags} -> tags) (\s@GetVpcLinkResponse' {} a -> s {tags = a} :: GetVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC link.
+getVpcLinkResponse_vpcLinkId :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe Prelude.Text)
+getVpcLinkResponse_vpcLinkId = Lens.lens (\GetVpcLinkResponse' {vpcLinkId} -> vpcLinkId) (\s@GetVpcLinkResponse' {} a -> s {vpcLinkId = a} :: GetVpcLinkResponse)
+
+-- | The status of the VPC link.
+getVpcLinkResponse_vpcLinkStatus :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe VpcLinkStatus)
+getVpcLinkResponse_vpcLinkStatus = Lens.lens (\GetVpcLinkResponse' {vpcLinkStatus} -> vpcLinkStatus) (\s@GetVpcLinkResponse' {} a -> s {vpcLinkStatus = a} :: GetVpcLinkResponse)
+
+-- | A message summarizing the cause of the status of the VPC link.
+getVpcLinkResponse_vpcLinkStatusMessage :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe Prelude.Text)
+getVpcLinkResponse_vpcLinkStatusMessage = Lens.lens (\GetVpcLinkResponse' {vpcLinkStatusMessage} -> vpcLinkStatusMessage) (\s@GetVpcLinkResponse' {} a -> s {vpcLinkStatusMessage = a} :: GetVpcLinkResponse)
+
+-- | The version of the VPC link.
+getVpcLinkResponse_vpcLinkVersion :: Lens.Lens' GetVpcLinkResponse (Prelude.Maybe VpcLinkVersion)
+getVpcLinkResponse_vpcLinkVersion = Lens.lens (\GetVpcLinkResponse' {vpcLinkVersion} -> vpcLinkVersion) (\s@GetVpcLinkResponse' {} a -> s {vpcLinkVersion = a} :: GetVpcLinkResponse)
+
+-- | The response's http status code.
+getVpcLinkResponse_httpStatus :: Lens.Lens' GetVpcLinkResponse Prelude.Int
+getVpcLinkResponse_httpStatus = Lens.lens (\GetVpcLinkResponse' {httpStatus} -> httpStatus) (\s@GetVpcLinkResponse' {} a -> s {httpStatus = a} :: GetVpcLinkResponse)
+
+instance Prelude.NFData GetVpcLinkResponse where
+  rnf GetVpcLinkResponse' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcLinkId
+      `Prelude.seq` Prelude.rnf vpcLinkStatus
+      `Prelude.seq` Prelude.rnf vpcLinkStatusMessage
+      `Prelude.seq` Prelude.rnf vpcLinkVersion
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/GetVpcLinks.hs b/gen/Amazonka/ApiGatewayV2/GetVpcLinks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/GetVpcLinks.hs
@@ -0,0 +1,190 @@
+{-# 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.ApiGatewayV2.GetVpcLinks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a collection of VPC links.
+module Amazonka.ApiGatewayV2.GetVpcLinks
+  ( -- * Creating a Request
+    GetVpcLinks (..),
+    newGetVpcLinks,
+
+    -- * Request Lenses
+    getVpcLinks_maxResults,
+    getVpcLinks_nextToken,
+
+    -- * Destructuring the Response
+    GetVpcLinksResponse (..),
+    newGetVpcLinksResponse,
+
+    -- * Response Lenses
+    getVpcLinksResponse_items,
+    getVpcLinksResponse_nextToken,
+    getVpcLinksResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVpcLinks' smart constructor.
+data GetVpcLinks = GetVpcLinks'
+  { -- | The maximum number of elements to be returned for this resource.
+    maxResults :: Prelude.Maybe Prelude.Text,
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpcLinks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getVpcLinks_maxResults' - The maximum number of elements to be returned for this resource.
+--
+-- 'nextToken', 'getVpcLinks_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+newGetVpcLinks ::
+  GetVpcLinks
+newGetVpcLinks =
+  GetVpcLinks'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of elements to be returned for this resource.
+getVpcLinks_maxResults :: Lens.Lens' GetVpcLinks (Prelude.Maybe Prelude.Text)
+getVpcLinks_maxResults = Lens.lens (\GetVpcLinks' {maxResults} -> maxResults) (\s@GetVpcLinks' {} a -> s {maxResults = a} :: GetVpcLinks)
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getVpcLinks_nextToken :: Lens.Lens' GetVpcLinks (Prelude.Maybe Prelude.Text)
+getVpcLinks_nextToken = Lens.lens (\GetVpcLinks' {nextToken} -> nextToken) (\s@GetVpcLinks' {} a -> s {nextToken = a} :: GetVpcLinks)
+
+instance Core.AWSRequest GetVpcLinks where
+  type AWSResponse GetVpcLinks = GetVpcLinksResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetVpcLinksResponse'
+            Prelude.<$> (x Data..?> "items" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetVpcLinks where
+  hashWithSalt _salt GetVpcLinks' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetVpcLinks where
+  rnf GetVpcLinks' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetVpcLinks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetVpcLinks where
+  toPath = Prelude.const "/v2/vpclinks"
+
+instance Data.ToQuery GetVpcLinks where
+  toQuery GetVpcLinks' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetVpcLinksResponse' smart constructor.
+data GetVpcLinksResponse = GetVpcLinksResponse'
+  { -- | A collection of VPC links.
+    items :: Prelude.Maybe [VpcLink],
+    -- | The next page of elements from this collection. Not valid for the last
+    -- element of the collection.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpcLinksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'getVpcLinksResponse_items' - A collection of VPC links.
+--
+-- 'nextToken', 'getVpcLinksResponse_nextToken' - The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+--
+-- 'httpStatus', 'getVpcLinksResponse_httpStatus' - The response's http status code.
+newGetVpcLinksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVpcLinksResponse
+newGetVpcLinksResponse pHttpStatus_ =
+  GetVpcLinksResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of VPC links.
+getVpcLinksResponse_items :: Lens.Lens' GetVpcLinksResponse (Prelude.Maybe [VpcLink])
+getVpcLinksResponse_items = Lens.lens (\GetVpcLinksResponse' {items} -> items) (\s@GetVpcLinksResponse' {} a -> s {items = a} :: GetVpcLinksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page of elements from this collection. Not valid for the last
+-- element of the collection.
+getVpcLinksResponse_nextToken :: Lens.Lens' GetVpcLinksResponse (Prelude.Maybe Prelude.Text)
+getVpcLinksResponse_nextToken = Lens.lens (\GetVpcLinksResponse' {nextToken} -> nextToken) (\s@GetVpcLinksResponse' {} a -> s {nextToken = a} :: GetVpcLinksResponse)
+
+-- | The response's http status code.
+getVpcLinksResponse_httpStatus :: Lens.Lens' GetVpcLinksResponse Prelude.Int
+getVpcLinksResponse_httpStatus = Lens.lens (\GetVpcLinksResponse' {httpStatus} -> httpStatus) (\s@GetVpcLinksResponse' {} a -> s {httpStatus = a} :: GetVpcLinksResponse)
+
+instance Prelude.NFData GetVpcLinksResponse where
+  rnf GetVpcLinksResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/ImportApi.hs b/gen/Amazonka/ApiGatewayV2/ImportApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/ImportApi.hs
@@ -0,0 +1,441 @@
+{-# 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.ApiGatewayV2.ImportApi
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports an API.
+module Amazonka.ApiGatewayV2.ImportApi
+  ( -- * Creating a Request
+    ImportApi (..),
+    newImportApi,
+
+    -- * Request Lenses
+    importApi_basepath,
+    importApi_failOnWarnings,
+    importApi_body,
+
+    -- * Destructuring the Response
+    ImportApiResponse (..),
+    newImportApiResponse,
+
+    -- * Response Lenses
+    importApiResponse_apiEndpoint,
+    importApiResponse_apiGatewayManaged,
+    importApiResponse_apiId,
+    importApiResponse_apiKeySelectionExpression,
+    importApiResponse_corsConfiguration,
+    importApiResponse_createdDate,
+    importApiResponse_description,
+    importApiResponse_disableExecuteApiEndpoint,
+    importApiResponse_disableSchemaValidation,
+    importApiResponse_importInfo,
+    importApiResponse_name,
+    importApiResponse_protocolType,
+    importApiResponse_routeSelectionExpression,
+    importApiResponse_tags,
+    importApiResponse_version,
+    importApiResponse_warnings,
+    importApiResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- |
+--
+-- /See:/ 'newImportApi' smart constructor.
+data ImportApi = ImportApi'
+  { -- | Specifies how to interpret the base path of the API during import. Valid
+    -- values are ignore, prepend, and split. The default value is ignore. To
+    -- learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html Set the OpenAPI basePath Property>.
+    -- Supported only for HTTP APIs.
+    basepath :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether to rollback the API creation when a warning is
+    -- encountered. By default, API creation continues if a warning is
+    -- encountered.
+    failOnWarnings :: Prelude.Maybe Prelude.Bool,
+    -- | The OpenAPI definition. Supported only for HTTP APIs.
+    body :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportApi' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'basepath', 'importApi_basepath' - Specifies how to interpret the base path of the API during import. Valid
+-- values are ignore, prepend, and split. The default value is ignore. To
+-- learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html Set the OpenAPI basePath Property>.
+-- Supported only for HTTP APIs.
+--
+-- 'failOnWarnings', 'importApi_failOnWarnings' - Specifies whether to rollback the API creation when a warning is
+-- encountered. By default, API creation continues if a warning is
+-- encountered.
+--
+-- 'body', 'importApi_body' - The OpenAPI definition. Supported only for HTTP APIs.
+newImportApi ::
+  -- | 'body'
+  Prelude.Text ->
+  ImportApi
+newImportApi pBody_ =
+  ImportApi'
+    { basepath = Prelude.Nothing,
+      failOnWarnings = Prelude.Nothing,
+      body = pBody_
+    }
+
+-- | Specifies how to interpret the base path of the API during import. Valid
+-- values are ignore, prepend, and split. The default value is ignore. To
+-- learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html Set the OpenAPI basePath Property>.
+-- Supported only for HTTP APIs.
+importApi_basepath :: Lens.Lens' ImportApi (Prelude.Maybe Prelude.Text)
+importApi_basepath = Lens.lens (\ImportApi' {basepath} -> basepath) (\s@ImportApi' {} a -> s {basepath = a} :: ImportApi)
+
+-- | Specifies whether to rollback the API creation when a warning is
+-- encountered. By default, API creation continues if a warning is
+-- encountered.
+importApi_failOnWarnings :: Lens.Lens' ImportApi (Prelude.Maybe Prelude.Bool)
+importApi_failOnWarnings = Lens.lens (\ImportApi' {failOnWarnings} -> failOnWarnings) (\s@ImportApi' {} a -> s {failOnWarnings = a} :: ImportApi)
+
+-- | The OpenAPI definition. Supported only for HTTP APIs.
+importApi_body :: Lens.Lens' ImportApi Prelude.Text
+importApi_body = Lens.lens (\ImportApi' {body} -> body) (\s@ImportApi' {} a -> s {body = a} :: ImportApi)
+
+instance Core.AWSRequest ImportApi where
+  type AWSResponse ImportApi = ImportApiResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportApiResponse'
+            Prelude.<$> (x Data..?> "apiEndpoint")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiKeySelectionExpression")
+            Prelude.<*> (x Data..?> "corsConfiguration")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "disableExecuteApiEndpoint")
+            Prelude.<*> (x Data..?> "disableSchemaValidation")
+            Prelude.<*> (x Data..?> "importInfo" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "protocolType")
+            Prelude.<*> (x Data..?> "routeSelectionExpression")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "warnings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportApi where
+  hashWithSalt _salt ImportApi' {..} =
+    _salt
+      `Prelude.hashWithSalt` basepath
+      `Prelude.hashWithSalt` failOnWarnings
+      `Prelude.hashWithSalt` body
+
+instance Prelude.NFData ImportApi where
+  rnf ImportApi' {..} =
+    Prelude.rnf basepath
+      `Prelude.seq` Prelude.rnf failOnWarnings
+      `Prelude.seq` Prelude.rnf body
+
+instance Data.ToHeaders ImportApi where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportApi where
+  toJSON ImportApi' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("body" Data..= body)]
+      )
+
+instance Data.ToPath ImportApi where
+  toPath = Prelude.const "/v2/apis"
+
+instance Data.ToQuery ImportApi where
+  toQuery ImportApi' {..} =
+    Prelude.mconcat
+      [ "basepath" Data.=: basepath,
+        "failOnWarnings" Data.=: failOnWarnings
+      ]
+
+-- | /See:/ 'newImportApiResponse' smart constructor.
+data ImportApiResponse = ImportApiResponse'
+  { -- | The URI of the API, of the form
+    -- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+    -- appended to this URI to form a complete path to a deployed API stage.
+    apiEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether an API is managed by API Gateway. You can\'t update or
+    -- delete a managed API by using API Gateway. A managed API can be deleted
+    -- only through the tooling or service that created it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The API ID.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | The timestamp when the API was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | The validation information during API import. This may include
+    -- particular properties of your OpenAPI definition which are ignored
+    -- during import. Supported only for HTTP APIs.
+    importInfo :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the API.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The API protocol.
+    protocolType :: Prelude.Maybe ProtocolType,
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A collection of tags associated with the API.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The warning messages reported when failonwarnings is turned on during
+    -- API import.
+    warnings :: 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 'ImportApiResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiEndpoint', 'importApiResponse_apiEndpoint' - The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+--
+-- 'apiGatewayManaged', 'importApiResponse_apiGatewayManaged' - Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+--
+-- 'apiId', 'importApiResponse_apiId' - The API ID.
+--
+-- 'apiKeySelectionExpression', 'importApiResponse_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'importApiResponse_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs.
+--
+-- 'createdDate', 'importApiResponse_createdDate' - The timestamp when the API was created.
+--
+-- 'description', 'importApiResponse_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'importApiResponse_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'importApiResponse_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'importInfo', 'importApiResponse_importInfo' - The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+--
+-- 'name', 'importApiResponse_name' - The name of the API.
+--
+-- 'protocolType', 'importApiResponse_protocolType' - The API protocol.
+--
+-- 'routeSelectionExpression', 'importApiResponse_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'tags', 'importApiResponse_tags' - A collection of tags associated with the API.
+--
+-- 'version', 'importApiResponse_version' - A version identifier for the API.
+--
+-- 'warnings', 'importApiResponse_warnings' - The warning messages reported when failonwarnings is turned on during
+-- API import.
+--
+-- 'httpStatus', 'importApiResponse_httpStatus' - The response's http status code.
+newImportApiResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportApiResponse
+newImportApiResponse pHttpStatus_ =
+  ImportApiResponse'
+    { apiEndpoint = Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      apiId = Prelude.Nothing,
+      apiKeySelectionExpression = Prelude.Nothing,
+      corsConfiguration = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disableExecuteApiEndpoint = Prelude.Nothing,
+      disableSchemaValidation = Prelude.Nothing,
+      importInfo = Prelude.Nothing,
+      name = Prelude.Nothing,
+      protocolType = Prelude.Nothing,
+      routeSelectionExpression = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      warnings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+importApiResponse_apiEndpoint :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Text)
+importApiResponse_apiEndpoint = Lens.lens (\ImportApiResponse' {apiEndpoint} -> apiEndpoint) (\s@ImportApiResponse' {} a -> s {apiEndpoint = a} :: ImportApiResponse)
+
+-- | Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+importApiResponse_apiGatewayManaged :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Bool)
+importApiResponse_apiGatewayManaged = Lens.lens (\ImportApiResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@ImportApiResponse' {} a -> s {apiGatewayManaged = a} :: ImportApiResponse)
+
+-- | The API ID.
+importApiResponse_apiId :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Text)
+importApiResponse_apiId = Lens.lens (\ImportApiResponse' {apiId} -> apiId) (\s@ImportApiResponse' {} a -> s {apiId = a} :: ImportApiResponse)
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+importApiResponse_apiKeySelectionExpression :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Text)
+importApiResponse_apiKeySelectionExpression = Lens.lens (\ImportApiResponse' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@ImportApiResponse' {} a -> s {apiKeySelectionExpression = a} :: ImportApiResponse)
+
+-- | A CORS configuration. Supported only for HTTP APIs.
+importApiResponse_corsConfiguration :: Lens.Lens' ImportApiResponse (Prelude.Maybe Cors)
+importApiResponse_corsConfiguration = Lens.lens (\ImportApiResponse' {corsConfiguration} -> corsConfiguration) (\s@ImportApiResponse' {} a -> s {corsConfiguration = a} :: ImportApiResponse)
+
+-- | The timestamp when the API was created.
+importApiResponse_createdDate :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.UTCTime)
+importApiResponse_createdDate = Lens.lens (\ImportApiResponse' {createdDate} -> createdDate) (\s@ImportApiResponse' {} a -> s {createdDate = a} :: ImportApiResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the API.
+importApiResponse_description :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Text)
+importApiResponse_description = Lens.lens (\ImportApiResponse' {description} -> description) (\s@ImportApiResponse' {} a -> s {description = a} :: ImportApiResponse)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+importApiResponse_disableExecuteApiEndpoint :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Bool)
+importApiResponse_disableExecuteApiEndpoint = Lens.lens (\ImportApiResponse' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@ImportApiResponse' {} a -> s {disableExecuteApiEndpoint = a} :: ImportApiResponse)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+importApiResponse_disableSchemaValidation :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Bool)
+importApiResponse_disableSchemaValidation = Lens.lens (\ImportApiResponse' {disableSchemaValidation} -> disableSchemaValidation) (\s@ImportApiResponse' {} a -> s {disableSchemaValidation = a} :: ImportApiResponse)
+
+-- | The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+importApiResponse_importInfo :: Lens.Lens' ImportApiResponse (Prelude.Maybe [Prelude.Text])
+importApiResponse_importInfo = Lens.lens (\ImportApiResponse' {importInfo} -> importInfo) (\s@ImportApiResponse' {} a -> s {importInfo = a} :: ImportApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the API.
+importApiResponse_name :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Text)
+importApiResponse_name = Lens.lens (\ImportApiResponse' {name} -> name) (\s@ImportApiResponse' {} a -> s {name = a} :: ImportApiResponse)
+
+-- | The API protocol.
+importApiResponse_protocolType :: Lens.Lens' ImportApiResponse (Prelude.Maybe ProtocolType)
+importApiResponse_protocolType = Lens.lens (\ImportApiResponse' {protocolType} -> protocolType) (\s@ImportApiResponse' {} a -> s {protocolType = a} :: ImportApiResponse)
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+importApiResponse_routeSelectionExpression :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Text)
+importApiResponse_routeSelectionExpression = Lens.lens (\ImportApiResponse' {routeSelectionExpression} -> routeSelectionExpression) (\s@ImportApiResponse' {} a -> s {routeSelectionExpression = a} :: ImportApiResponse)
+
+-- | A collection of tags associated with the API.
+importApiResponse_tags :: Lens.Lens' ImportApiResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+importApiResponse_tags = Lens.lens (\ImportApiResponse' {tags} -> tags) (\s@ImportApiResponse' {} a -> s {tags = a} :: ImportApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A version identifier for the API.
+importApiResponse_version :: Lens.Lens' ImportApiResponse (Prelude.Maybe Prelude.Text)
+importApiResponse_version = Lens.lens (\ImportApiResponse' {version} -> version) (\s@ImportApiResponse' {} a -> s {version = a} :: ImportApiResponse)
+
+-- | The warning messages reported when failonwarnings is turned on during
+-- API import.
+importApiResponse_warnings :: Lens.Lens' ImportApiResponse (Prelude.Maybe [Prelude.Text])
+importApiResponse_warnings = Lens.lens (\ImportApiResponse' {warnings} -> warnings) (\s@ImportApiResponse' {} a -> s {warnings = a} :: ImportApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+importApiResponse_httpStatus :: Lens.Lens' ImportApiResponse Prelude.Int
+importApiResponse_httpStatus = Lens.lens (\ImportApiResponse' {httpStatus} -> httpStatus) (\s@ImportApiResponse' {} a -> s {httpStatus = a} :: ImportApiResponse)
+
+instance Prelude.NFData ImportApiResponse where
+  rnf ImportApiResponse' {..} =
+    Prelude.rnf apiEndpoint
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf importInfo
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf warnings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/Lens.hs b/gen/Amazonka/ApiGatewayV2/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Lens.hs
@@ -0,0 +1,1215 @@
+{-# 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.ApiGatewayV2.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.ApiGatewayV2.Lens
+  ( -- * Operations
+
+    -- ** CreateApi
+    createApi_apiKeySelectionExpression,
+    createApi_corsConfiguration,
+    createApi_credentialsArn,
+    createApi_description,
+    createApi_disableExecuteApiEndpoint,
+    createApi_disableSchemaValidation,
+    createApi_routeKey,
+    createApi_routeSelectionExpression,
+    createApi_tags,
+    createApi_target,
+    createApi_version,
+    createApi_protocolType,
+    createApi_name,
+    createApiResponse_apiEndpoint,
+    createApiResponse_apiGatewayManaged,
+    createApiResponse_apiId,
+    createApiResponse_apiKeySelectionExpression,
+    createApiResponse_corsConfiguration,
+    createApiResponse_createdDate,
+    createApiResponse_description,
+    createApiResponse_disableExecuteApiEndpoint,
+    createApiResponse_disableSchemaValidation,
+    createApiResponse_importInfo,
+    createApiResponse_name,
+    createApiResponse_protocolType,
+    createApiResponse_routeSelectionExpression,
+    createApiResponse_tags,
+    createApiResponse_version,
+    createApiResponse_warnings,
+    createApiResponse_httpStatus,
+
+    -- ** CreateApiMapping
+    createApiMapping_apiMappingKey,
+    createApiMapping_domainName,
+    createApiMapping_stage,
+    createApiMapping_apiId,
+    createApiMappingResponse_apiId,
+    createApiMappingResponse_apiMappingId,
+    createApiMappingResponse_apiMappingKey,
+    createApiMappingResponse_stage,
+    createApiMappingResponse_httpStatus,
+
+    -- ** CreateAuthorizer
+    createAuthorizer_authorizerCredentialsArn,
+    createAuthorizer_authorizerPayloadFormatVersion,
+    createAuthorizer_authorizerResultTtlInSeconds,
+    createAuthorizer_authorizerUri,
+    createAuthorizer_enableSimpleResponses,
+    createAuthorizer_identityValidationExpression,
+    createAuthorizer_jwtConfiguration,
+    createAuthorizer_apiId,
+    createAuthorizer_authorizerType,
+    createAuthorizer_identitySource,
+    createAuthorizer_name,
+    createAuthorizerResponse_authorizerCredentialsArn,
+    createAuthorizerResponse_authorizerId,
+    createAuthorizerResponse_authorizerPayloadFormatVersion,
+    createAuthorizerResponse_authorizerResultTtlInSeconds,
+    createAuthorizerResponse_authorizerType,
+    createAuthorizerResponse_authorizerUri,
+    createAuthorizerResponse_enableSimpleResponses,
+    createAuthorizerResponse_identitySource,
+    createAuthorizerResponse_identityValidationExpression,
+    createAuthorizerResponse_jwtConfiguration,
+    createAuthorizerResponse_name,
+    createAuthorizerResponse_httpStatus,
+
+    -- ** CreateDeployment
+    createDeployment_description,
+    createDeployment_stageName,
+    createDeployment_apiId,
+    createDeploymentResponse_autoDeployed,
+    createDeploymentResponse_createdDate,
+    createDeploymentResponse_deploymentId,
+    createDeploymentResponse_deploymentStatus,
+    createDeploymentResponse_deploymentStatusMessage,
+    createDeploymentResponse_description,
+    createDeploymentResponse_httpStatus,
+
+    -- ** CreateDomainName
+    createDomainName_domainNameConfigurations,
+    createDomainName_mutualTlsAuthentication,
+    createDomainName_tags,
+    createDomainName_domainName,
+    createDomainNameResponse_apiMappingSelectionExpression,
+    createDomainNameResponse_domainName,
+    createDomainNameResponse_domainNameConfigurations,
+    createDomainNameResponse_mutualTlsAuthentication,
+    createDomainNameResponse_tags,
+    createDomainNameResponse_httpStatus,
+
+    -- ** CreateIntegration
+    createIntegration_connectionId,
+    createIntegration_connectionType,
+    createIntegration_contentHandlingStrategy,
+    createIntegration_credentialsArn,
+    createIntegration_description,
+    createIntegration_integrationMethod,
+    createIntegration_integrationSubtype,
+    createIntegration_integrationUri,
+    createIntegration_passthroughBehavior,
+    createIntegration_payloadFormatVersion,
+    createIntegration_requestParameters,
+    createIntegration_requestTemplates,
+    createIntegration_responseParameters,
+    createIntegration_templateSelectionExpression,
+    createIntegration_timeoutInMillis,
+    createIntegration_tlsConfig,
+    createIntegration_apiId,
+    createIntegration_integrationType,
+    createIntegrationResponse'_apiGatewayManaged,
+    createIntegrationResponse'_connectionId,
+    createIntegrationResponse'_connectionType,
+    createIntegrationResponse'_contentHandlingStrategy,
+    createIntegrationResponse'_credentialsArn,
+    createIntegrationResponse'_description,
+    createIntegrationResponse'_integrationId,
+    createIntegrationResponse'_integrationMethod,
+    createIntegrationResponse'_integrationResponseSelectionExpression,
+    createIntegrationResponse'_integrationSubtype,
+    createIntegrationResponse'_integrationType,
+    createIntegrationResponse'_integrationUri,
+    createIntegrationResponse'_passthroughBehavior,
+    createIntegrationResponse'_payloadFormatVersion,
+    createIntegrationResponse'_requestParameters,
+    createIntegrationResponse'_requestTemplates,
+    createIntegrationResponse'_responseParameters,
+    createIntegrationResponse'_templateSelectionExpression,
+    createIntegrationResponse'_timeoutInMillis,
+    createIntegrationResponse'_tlsConfig,
+    createIntegrationResponse'_httpStatus,
+
+    -- ** CreateIntegrationResponse
+    createIntegrationResponse_contentHandlingStrategy,
+    createIntegrationResponse_responseParameters,
+    createIntegrationResponse_responseTemplates,
+    createIntegrationResponse_templateSelectionExpression,
+    createIntegrationResponse_apiId,
+    createIntegrationResponse_integrationId,
+    createIntegrationResponse_integrationResponseKey,
+    createIntegrationResponseResponse_contentHandlingStrategy,
+    createIntegrationResponseResponse_integrationResponseId,
+    createIntegrationResponseResponse_integrationResponseKey,
+    createIntegrationResponseResponse_responseParameters,
+    createIntegrationResponseResponse_responseTemplates,
+    createIntegrationResponseResponse_templateSelectionExpression,
+    createIntegrationResponseResponse_httpStatus,
+
+    -- ** CreateModel
+    createModel_contentType,
+    createModel_description,
+    createModel_apiId,
+    createModel_schema,
+    createModel_name,
+    createModelResponse_contentType,
+    createModelResponse_description,
+    createModelResponse_modelId,
+    createModelResponse_name,
+    createModelResponse_schema,
+    createModelResponse_httpStatus,
+
+    -- ** CreateRoute
+    createRoute_apiKeyRequired,
+    createRoute_authorizationScopes,
+    createRoute_authorizationType,
+    createRoute_authorizerId,
+    createRoute_modelSelectionExpression,
+    createRoute_operationName,
+    createRoute_requestModels,
+    createRoute_requestParameters,
+    createRoute_routeResponseSelectionExpression,
+    createRoute_target,
+    createRoute_apiId,
+    createRoute_routeKey,
+    createRouteResponse'_apiGatewayManaged,
+    createRouteResponse'_apiKeyRequired,
+    createRouteResponse'_authorizationScopes,
+    createRouteResponse'_authorizationType,
+    createRouteResponse'_authorizerId,
+    createRouteResponse'_modelSelectionExpression,
+    createRouteResponse'_operationName,
+    createRouteResponse'_requestModels,
+    createRouteResponse'_requestParameters,
+    createRouteResponse'_routeId,
+    createRouteResponse'_routeKey,
+    createRouteResponse'_routeResponseSelectionExpression,
+    createRouteResponse'_target,
+    createRouteResponse'_httpStatus,
+
+    -- ** CreateRouteResponse
+    createRouteResponse_modelSelectionExpression,
+    createRouteResponse_responseModels,
+    createRouteResponse_responseParameters,
+    createRouteResponse_apiId,
+    createRouteResponse_routeId,
+    createRouteResponse_routeResponseKey,
+    createRouteResponseResponse_modelSelectionExpression,
+    createRouteResponseResponse_responseModels,
+    createRouteResponseResponse_responseParameters,
+    createRouteResponseResponse_routeResponseId,
+    createRouteResponseResponse_routeResponseKey,
+    createRouteResponseResponse_httpStatus,
+
+    -- ** CreateStage
+    createStage_accessLogSettings,
+    createStage_autoDeploy,
+    createStage_clientCertificateId,
+    createStage_defaultRouteSettings,
+    createStage_deploymentId,
+    createStage_description,
+    createStage_routeSettings,
+    createStage_stageVariables,
+    createStage_tags,
+    createStage_apiId,
+    createStage_stageName,
+    createStageResponse_accessLogSettings,
+    createStageResponse_apiGatewayManaged,
+    createStageResponse_autoDeploy,
+    createStageResponse_clientCertificateId,
+    createStageResponse_createdDate,
+    createStageResponse_defaultRouteSettings,
+    createStageResponse_deploymentId,
+    createStageResponse_description,
+    createStageResponse_lastDeploymentStatusMessage,
+    createStageResponse_lastUpdatedDate,
+    createStageResponse_routeSettings,
+    createStageResponse_stageName,
+    createStageResponse_stageVariables,
+    createStageResponse_tags,
+    createStageResponse_httpStatus,
+
+    -- ** CreateVpcLink
+    createVpcLink_securityGroupIds,
+    createVpcLink_tags,
+    createVpcLink_subnetIds,
+    createVpcLink_name,
+    createVpcLinkResponse_createdDate,
+    createVpcLinkResponse_name,
+    createVpcLinkResponse_securityGroupIds,
+    createVpcLinkResponse_subnetIds,
+    createVpcLinkResponse_tags,
+    createVpcLinkResponse_vpcLinkId,
+    createVpcLinkResponse_vpcLinkStatus,
+    createVpcLinkResponse_vpcLinkStatusMessage,
+    createVpcLinkResponse_vpcLinkVersion,
+    createVpcLinkResponse_httpStatus,
+
+    -- ** DeleteAccessLogSettings
+    deleteAccessLogSettings_stageName,
+    deleteAccessLogSettings_apiId,
+
+    -- ** DeleteApi
+    deleteApi_apiId,
+
+    -- ** DeleteApiMapping
+    deleteApiMapping_apiMappingId,
+    deleteApiMapping_domainName,
+
+    -- ** DeleteAuthorizer
+    deleteAuthorizer_authorizerId,
+    deleteAuthorizer_apiId,
+
+    -- ** DeleteCorsConfiguration
+    deleteCorsConfiguration_apiId,
+
+    -- ** DeleteDeployment
+    deleteDeployment_apiId,
+    deleteDeployment_deploymentId,
+
+    -- ** DeleteDomainName
+    deleteDomainName_domainName,
+
+    -- ** DeleteIntegration
+    deleteIntegration_apiId,
+    deleteIntegration_integrationId,
+
+    -- ** DeleteIntegrationResponse
+    deleteIntegrationResponse_apiId,
+    deleteIntegrationResponse_integrationResponseId,
+    deleteIntegrationResponse_integrationId,
+
+    -- ** DeleteModel
+    deleteModel_modelId,
+    deleteModel_apiId,
+
+    -- ** DeleteRoute
+    deleteRoute_apiId,
+    deleteRoute_routeId,
+
+    -- ** DeleteRouteRequestParameter
+    deleteRouteRequestParameter_requestParameterKey,
+    deleteRouteRequestParameter_apiId,
+    deleteRouteRequestParameter_routeId,
+
+    -- ** DeleteRouteResponse
+    deleteRouteResponse_routeResponseId,
+    deleteRouteResponse_apiId,
+    deleteRouteResponse_routeId,
+
+    -- ** DeleteRouteSettings
+    deleteRouteSettings_stageName,
+    deleteRouteSettings_routeKey,
+    deleteRouteSettings_apiId,
+
+    -- ** DeleteStage
+    deleteStage_stageName,
+    deleteStage_apiId,
+
+    -- ** DeleteVpcLink
+    deleteVpcLink_vpcLinkId,
+    deleteVpcLinkResponse_httpStatus,
+
+    -- ** ExportApi
+    exportApi_exportVersion,
+    exportApi_includeExtensions,
+    exportApi_stageName,
+    exportApi_specification,
+    exportApi_outputType,
+    exportApi_apiId,
+    exportApiResponse_body,
+    exportApiResponse_httpStatus,
+
+    -- ** GetApi
+    getApi_apiId,
+    getApiResponse_apiEndpoint,
+    getApiResponse_apiGatewayManaged,
+    getApiResponse_apiId,
+    getApiResponse_apiKeySelectionExpression,
+    getApiResponse_corsConfiguration,
+    getApiResponse_createdDate,
+    getApiResponse_description,
+    getApiResponse_disableExecuteApiEndpoint,
+    getApiResponse_disableSchemaValidation,
+    getApiResponse_importInfo,
+    getApiResponse_name,
+    getApiResponse_protocolType,
+    getApiResponse_routeSelectionExpression,
+    getApiResponse_tags,
+    getApiResponse_version,
+    getApiResponse_warnings,
+    getApiResponse_httpStatus,
+
+    -- ** GetApiMapping
+    getApiMapping_apiMappingId,
+    getApiMapping_domainName,
+    getApiMappingResponse_apiId,
+    getApiMappingResponse_apiMappingId,
+    getApiMappingResponse_apiMappingKey,
+    getApiMappingResponse_stage,
+    getApiMappingResponse_httpStatus,
+
+    -- ** GetApiMappings
+    getApiMappings_maxResults,
+    getApiMappings_nextToken,
+    getApiMappings_domainName,
+    getApiMappingsResponse_items,
+    getApiMappingsResponse_nextToken,
+    getApiMappingsResponse_httpStatus,
+
+    -- ** GetApis
+    getApis_maxResults,
+    getApis_nextToken,
+    getApisResponse_items,
+    getApisResponse_nextToken,
+    getApisResponse_httpStatus,
+
+    -- ** GetAuthorizer
+    getAuthorizer_authorizerId,
+    getAuthorizer_apiId,
+    getAuthorizerResponse_authorizerCredentialsArn,
+    getAuthorizerResponse_authorizerId,
+    getAuthorizerResponse_authorizerPayloadFormatVersion,
+    getAuthorizerResponse_authorizerResultTtlInSeconds,
+    getAuthorizerResponse_authorizerType,
+    getAuthorizerResponse_authorizerUri,
+    getAuthorizerResponse_enableSimpleResponses,
+    getAuthorizerResponse_identitySource,
+    getAuthorizerResponse_identityValidationExpression,
+    getAuthorizerResponse_jwtConfiguration,
+    getAuthorizerResponse_name,
+    getAuthorizerResponse_httpStatus,
+
+    -- ** GetAuthorizers
+    getAuthorizers_maxResults,
+    getAuthorizers_nextToken,
+    getAuthorizers_apiId,
+    getAuthorizersResponse_items,
+    getAuthorizersResponse_nextToken,
+    getAuthorizersResponse_httpStatus,
+
+    -- ** GetDeployment
+    getDeployment_apiId,
+    getDeployment_deploymentId,
+    getDeploymentResponse_autoDeployed,
+    getDeploymentResponse_createdDate,
+    getDeploymentResponse_deploymentId,
+    getDeploymentResponse_deploymentStatus,
+    getDeploymentResponse_deploymentStatusMessage,
+    getDeploymentResponse_description,
+    getDeploymentResponse_httpStatus,
+
+    -- ** GetDeployments
+    getDeployments_maxResults,
+    getDeployments_nextToken,
+    getDeployments_apiId,
+    getDeploymentsResponse_items,
+    getDeploymentsResponse_nextToken,
+    getDeploymentsResponse_httpStatus,
+
+    -- ** GetDomainName
+    getDomainName_domainName,
+    getDomainNameResponse_apiMappingSelectionExpression,
+    getDomainNameResponse_domainName,
+    getDomainNameResponse_domainNameConfigurations,
+    getDomainNameResponse_mutualTlsAuthentication,
+    getDomainNameResponse_tags,
+    getDomainNameResponse_httpStatus,
+
+    -- ** GetDomainNames
+    getDomainNames_maxResults,
+    getDomainNames_nextToken,
+    getDomainNamesResponse_items,
+    getDomainNamesResponse_nextToken,
+    getDomainNamesResponse_httpStatus,
+
+    -- ** GetIntegration
+    getIntegration_apiId,
+    getIntegration_integrationId,
+    getIntegrationResponse'_apiGatewayManaged,
+    getIntegrationResponse'_connectionId,
+    getIntegrationResponse'_connectionType,
+    getIntegrationResponse'_contentHandlingStrategy,
+    getIntegrationResponse'_credentialsArn,
+    getIntegrationResponse'_description,
+    getIntegrationResponse'_integrationId,
+    getIntegrationResponse'_integrationMethod,
+    getIntegrationResponse'_integrationResponseSelectionExpression,
+    getIntegrationResponse'_integrationSubtype,
+    getIntegrationResponse'_integrationType,
+    getIntegrationResponse'_integrationUri,
+    getIntegrationResponse'_passthroughBehavior,
+    getIntegrationResponse'_payloadFormatVersion,
+    getIntegrationResponse'_requestParameters,
+    getIntegrationResponse'_requestTemplates,
+    getIntegrationResponse'_responseParameters,
+    getIntegrationResponse'_templateSelectionExpression,
+    getIntegrationResponse'_timeoutInMillis,
+    getIntegrationResponse'_tlsConfig,
+    getIntegrationResponse'_httpStatus,
+
+    -- ** GetIntegrationResponse
+    getIntegrationResponse_apiId,
+    getIntegrationResponse_integrationResponseId,
+    getIntegrationResponse_integrationId,
+    getIntegrationResponseResponse_contentHandlingStrategy,
+    getIntegrationResponseResponse_integrationResponseId,
+    getIntegrationResponseResponse_integrationResponseKey,
+    getIntegrationResponseResponse_responseParameters,
+    getIntegrationResponseResponse_responseTemplates,
+    getIntegrationResponseResponse_templateSelectionExpression,
+    getIntegrationResponseResponse_httpStatus,
+
+    -- ** GetIntegrationResponses
+    getIntegrationResponses_maxResults,
+    getIntegrationResponses_nextToken,
+    getIntegrationResponses_integrationId,
+    getIntegrationResponses_apiId,
+    getIntegrationResponsesResponse_items,
+    getIntegrationResponsesResponse_nextToken,
+    getIntegrationResponsesResponse_httpStatus,
+
+    -- ** GetIntegrations
+    getIntegrations_maxResults,
+    getIntegrations_nextToken,
+    getIntegrations_apiId,
+    getIntegrationsResponse_items,
+    getIntegrationsResponse_nextToken,
+    getIntegrationsResponse_httpStatus,
+
+    -- ** GetModel
+    getModel_modelId,
+    getModel_apiId,
+    getModelResponse_contentType,
+    getModelResponse_description,
+    getModelResponse_modelId,
+    getModelResponse_name,
+    getModelResponse_schema,
+    getModelResponse_httpStatus,
+
+    -- ** GetModelTemplate
+    getModelTemplate_modelId,
+    getModelTemplate_apiId,
+    getModelTemplateResponse_value,
+    getModelTemplateResponse_httpStatus,
+
+    -- ** GetModels
+    getModels_maxResults,
+    getModels_nextToken,
+    getModels_apiId,
+    getModelsResponse_items,
+    getModelsResponse_nextToken,
+    getModelsResponse_httpStatus,
+
+    -- ** GetRoute
+    getRoute_apiId,
+    getRoute_routeId,
+    getRouteResponse'_apiGatewayManaged,
+    getRouteResponse'_apiKeyRequired,
+    getRouteResponse'_authorizationScopes,
+    getRouteResponse'_authorizationType,
+    getRouteResponse'_authorizerId,
+    getRouteResponse'_modelSelectionExpression,
+    getRouteResponse'_operationName,
+    getRouteResponse'_requestModels,
+    getRouteResponse'_requestParameters,
+    getRouteResponse'_routeId,
+    getRouteResponse'_routeKey,
+    getRouteResponse'_routeResponseSelectionExpression,
+    getRouteResponse'_target,
+    getRouteResponse'_httpStatus,
+
+    -- ** GetRouteResponse
+    getRouteResponse_routeResponseId,
+    getRouteResponse_apiId,
+    getRouteResponse_routeId,
+    getRouteResponseResponse_modelSelectionExpression,
+    getRouteResponseResponse_responseModels,
+    getRouteResponseResponse_responseParameters,
+    getRouteResponseResponse_routeResponseId,
+    getRouteResponseResponse_routeResponseKey,
+    getRouteResponseResponse_httpStatus,
+
+    -- ** GetRouteResponses
+    getRouteResponses_maxResults,
+    getRouteResponses_nextToken,
+    getRouteResponses_routeId,
+    getRouteResponses_apiId,
+    getRouteResponsesResponse_items,
+    getRouteResponsesResponse_nextToken,
+    getRouteResponsesResponse_httpStatus,
+
+    -- ** GetRoutes
+    getRoutes_maxResults,
+    getRoutes_nextToken,
+    getRoutes_apiId,
+    getRoutesResponse_items,
+    getRoutesResponse_nextToken,
+    getRoutesResponse_httpStatus,
+
+    -- ** GetStage
+    getStage_stageName,
+    getStage_apiId,
+    getStageResponse_accessLogSettings,
+    getStageResponse_apiGatewayManaged,
+    getStageResponse_autoDeploy,
+    getStageResponse_clientCertificateId,
+    getStageResponse_createdDate,
+    getStageResponse_defaultRouteSettings,
+    getStageResponse_deploymentId,
+    getStageResponse_description,
+    getStageResponse_lastDeploymentStatusMessage,
+    getStageResponse_lastUpdatedDate,
+    getStageResponse_routeSettings,
+    getStageResponse_stageName,
+    getStageResponse_stageVariables,
+    getStageResponse_tags,
+    getStageResponse_httpStatus,
+
+    -- ** GetStages
+    getStages_maxResults,
+    getStages_nextToken,
+    getStages_apiId,
+    getStagesResponse_items,
+    getStagesResponse_nextToken,
+    getStagesResponse_httpStatus,
+
+    -- ** GetTags
+    getTags_resourceArn,
+    getTagsResponse_tags,
+    getTagsResponse_httpStatus,
+
+    -- ** GetVpcLink
+    getVpcLink_vpcLinkId,
+    getVpcLinkResponse_createdDate,
+    getVpcLinkResponse_name,
+    getVpcLinkResponse_securityGroupIds,
+    getVpcLinkResponse_subnetIds,
+    getVpcLinkResponse_tags,
+    getVpcLinkResponse_vpcLinkId,
+    getVpcLinkResponse_vpcLinkStatus,
+    getVpcLinkResponse_vpcLinkStatusMessage,
+    getVpcLinkResponse_vpcLinkVersion,
+    getVpcLinkResponse_httpStatus,
+
+    -- ** GetVpcLinks
+    getVpcLinks_maxResults,
+    getVpcLinks_nextToken,
+    getVpcLinksResponse_items,
+    getVpcLinksResponse_nextToken,
+    getVpcLinksResponse_httpStatus,
+
+    -- ** ImportApi
+    importApi_basepath,
+    importApi_failOnWarnings,
+    importApi_body,
+    importApiResponse_apiEndpoint,
+    importApiResponse_apiGatewayManaged,
+    importApiResponse_apiId,
+    importApiResponse_apiKeySelectionExpression,
+    importApiResponse_corsConfiguration,
+    importApiResponse_createdDate,
+    importApiResponse_description,
+    importApiResponse_disableExecuteApiEndpoint,
+    importApiResponse_disableSchemaValidation,
+    importApiResponse_importInfo,
+    importApiResponse_name,
+    importApiResponse_protocolType,
+    importApiResponse_routeSelectionExpression,
+    importApiResponse_tags,
+    importApiResponse_version,
+    importApiResponse_warnings,
+    importApiResponse_httpStatus,
+
+    -- ** ReimportApi
+    reimportApi_basepath,
+    reimportApi_failOnWarnings,
+    reimportApi_apiId,
+    reimportApi_body,
+    reimportApiResponse_apiEndpoint,
+    reimportApiResponse_apiGatewayManaged,
+    reimportApiResponse_apiId,
+    reimportApiResponse_apiKeySelectionExpression,
+    reimportApiResponse_corsConfiguration,
+    reimportApiResponse_createdDate,
+    reimportApiResponse_description,
+    reimportApiResponse_disableExecuteApiEndpoint,
+    reimportApiResponse_disableSchemaValidation,
+    reimportApiResponse_importInfo,
+    reimportApiResponse_name,
+    reimportApiResponse_protocolType,
+    reimportApiResponse_routeSelectionExpression,
+    reimportApiResponse_tags,
+    reimportApiResponse_version,
+    reimportApiResponse_warnings,
+    reimportApiResponse_httpStatus,
+
+    -- ** ResetAuthorizersCache
+    resetAuthorizersCache_stageName,
+    resetAuthorizersCache_apiId,
+
+    -- ** TagResource
+    tagResource_tags,
+    tagResource_resourceArn,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- ** UpdateApi
+    updateApi_apiKeySelectionExpression,
+    updateApi_corsConfiguration,
+    updateApi_credentialsArn,
+    updateApi_description,
+    updateApi_disableExecuteApiEndpoint,
+    updateApi_disableSchemaValidation,
+    updateApi_name,
+    updateApi_routeKey,
+    updateApi_routeSelectionExpression,
+    updateApi_target,
+    updateApi_version,
+    updateApi_apiId,
+    updateApiResponse_apiEndpoint,
+    updateApiResponse_apiGatewayManaged,
+    updateApiResponse_apiId,
+    updateApiResponse_apiKeySelectionExpression,
+    updateApiResponse_corsConfiguration,
+    updateApiResponse_createdDate,
+    updateApiResponse_description,
+    updateApiResponse_disableExecuteApiEndpoint,
+    updateApiResponse_disableSchemaValidation,
+    updateApiResponse_importInfo,
+    updateApiResponse_name,
+    updateApiResponse_protocolType,
+    updateApiResponse_routeSelectionExpression,
+    updateApiResponse_tags,
+    updateApiResponse_version,
+    updateApiResponse_warnings,
+    updateApiResponse_httpStatus,
+
+    -- ** UpdateApiMapping
+    updateApiMapping_apiMappingKey,
+    updateApiMapping_stage,
+    updateApiMapping_apiMappingId,
+    updateApiMapping_apiId,
+    updateApiMapping_domainName,
+    updateApiMappingResponse_apiId,
+    updateApiMappingResponse_apiMappingId,
+    updateApiMappingResponse_apiMappingKey,
+    updateApiMappingResponse_stage,
+    updateApiMappingResponse_httpStatus,
+
+    -- ** UpdateAuthorizer
+    updateAuthorizer_authorizerCredentialsArn,
+    updateAuthorizer_authorizerPayloadFormatVersion,
+    updateAuthorizer_authorizerResultTtlInSeconds,
+    updateAuthorizer_authorizerType,
+    updateAuthorizer_authorizerUri,
+    updateAuthorizer_enableSimpleResponses,
+    updateAuthorizer_identitySource,
+    updateAuthorizer_identityValidationExpression,
+    updateAuthorizer_jwtConfiguration,
+    updateAuthorizer_name,
+    updateAuthorizer_authorizerId,
+    updateAuthorizer_apiId,
+    updateAuthorizerResponse_authorizerCredentialsArn,
+    updateAuthorizerResponse_authorizerId,
+    updateAuthorizerResponse_authorizerPayloadFormatVersion,
+    updateAuthorizerResponse_authorizerResultTtlInSeconds,
+    updateAuthorizerResponse_authorizerType,
+    updateAuthorizerResponse_authorizerUri,
+    updateAuthorizerResponse_enableSimpleResponses,
+    updateAuthorizerResponse_identitySource,
+    updateAuthorizerResponse_identityValidationExpression,
+    updateAuthorizerResponse_jwtConfiguration,
+    updateAuthorizerResponse_name,
+    updateAuthorizerResponse_httpStatus,
+
+    -- ** UpdateDeployment
+    updateDeployment_description,
+    updateDeployment_apiId,
+    updateDeployment_deploymentId,
+    updateDeploymentResponse_autoDeployed,
+    updateDeploymentResponse_createdDate,
+    updateDeploymentResponse_deploymentId,
+    updateDeploymentResponse_deploymentStatus,
+    updateDeploymentResponse_deploymentStatusMessage,
+    updateDeploymentResponse_description,
+    updateDeploymentResponse_httpStatus,
+
+    -- ** UpdateDomainName
+    updateDomainName_domainNameConfigurations,
+    updateDomainName_mutualTlsAuthentication,
+    updateDomainName_domainName,
+    updateDomainNameResponse_apiMappingSelectionExpression,
+    updateDomainNameResponse_domainName,
+    updateDomainNameResponse_domainNameConfigurations,
+    updateDomainNameResponse_mutualTlsAuthentication,
+    updateDomainNameResponse_tags,
+    updateDomainNameResponse_httpStatus,
+
+    -- ** UpdateIntegration
+    updateIntegration_connectionId,
+    updateIntegration_connectionType,
+    updateIntegration_contentHandlingStrategy,
+    updateIntegration_credentialsArn,
+    updateIntegration_description,
+    updateIntegration_integrationMethod,
+    updateIntegration_integrationSubtype,
+    updateIntegration_integrationType,
+    updateIntegration_integrationUri,
+    updateIntegration_passthroughBehavior,
+    updateIntegration_payloadFormatVersion,
+    updateIntegration_requestParameters,
+    updateIntegration_requestTemplates,
+    updateIntegration_responseParameters,
+    updateIntegration_templateSelectionExpression,
+    updateIntegration_timeoutInMillis,
+    updateIntegration_tlsConfig,
+    updateIntegration_apiId,
+    updateIntegration_integrationId,
+    updateIntegrationResponse'_apiGatewayManaged,
+    updateIntegrationResponse'_connectionId,
+    updateIntegrationResponse'_connectionType,
+    updateIntegrationResponse'_contentHandlingStrategy,
+    updateIntegrationResponse'_credentialsArn,
+    updateIntegrationResponse'_description,
+    updateIntegrationResponse'_integrationId,
+    updateIntegrationResponse'_integrationMethod,
+    updateIntegrationResponse'_integrationResponseSelectionExpression,
+    updateIntegrationResponse'_integrationSubtype,
+    updateIntegrationResponse'_integrationType,
+    updateIntegrationResponse'_integrationUri,
+    updateIntegrationResponse'_passthroughBehavior,
+    updateIntegrationResponse'_payloadFormatVersion,
+    updateIntegrationResponse'_requestParameters,
+    updateIntegrationResponse'_requestTemplates,
+    updateIntegrationResponse'_responseParameters,
+    updateIntegrationResponse'_templateSelectionExpression,
+    updateIntegrationResponse'_timeoutInMillis,
+    updateIntegrationResponse'_tlsConfig,
+    updateIntegrationResponse'_httpStatus,
+
+    -- ** UpdateIntegrationResponse
+    updateIntegrationResponse_contentHandlingStrategy,
+    updateIntegrationResponse_integrationResponseKey,
+    updateIntegrationResponse_responseParameters,
+    updateIntegrationResponse_responseTemplates,
+    updateIntegrationResponse_templateSelectionExpression,
+    updateIntegrationResponse_apiId,
+    updateIntegrationResponse_integrationResponseId,
+    updateIntegrationResponse_integrationId,
+    updateIntegrationResponseResponse_contentHandlingStrategy,
+    updateIntegrationResponseResponse_integrationResponseId,
+    updateIntegrationResponseResponse_integrationResponseKey,
+    updateIntegrationResponseResponse_responseParameters,
+    updateIntegrationResponseResponse_responseTemplates,
+    updateIntegrationResponseResponse_templateSelectionExpression,
+    updateIntegrationResponseResponse_httpStatus,
+
+    -- ** UpdateModel
+    updateModel_contentType,
+    updateModel_description,
+    updateModel_name,
+    updateModel_schema,
+    updateModel_modelId,
+    updateModel_apiId,
+    updateModelResponse_contentType,
+    updateModelResponse_description,
+    updateModelResponse_modelId,
+    updateModelResponse_name,
+    updateModelResponse_schema,
+    updateModelResponse_httpStatus,
+
+    -- ** UpdateRoute
+    updateRoute_apiKeyRequired,
+    updateRoute_authorizationScopes,
+    updateRoute_authorizationType,
+    updateRoute_authorizerId,
+    updateRoute_modelSelectionExpression,
+    updateRoute_operationName,
+    updateRoute_requestModels,
+    updateRoute_requestParameters,
+    updateRoute_routeKey,
+    updateRoute_routeResponseSelectionExpression,
+    updateRoute_target,
+    updateRoute_apiId,
+    updateRoute_routeId,
+    updateRouteResponse'_apiGatewayManaged,
+    updateRouteResponse'_apiKeyRequired,
+    updateRouteResponse'_authorizationScopes,
+    updateRouteResponse'_authorizationType,
+    updateRouteResponse'_authorizerId,
+    updateRouteResponse'_modelSelectionExpression,
+    updateRouteResponse'_operationName,
+    updateRouteResponse'_requestModels,
+    updateRouteResponse'_requestParameters,
+    updateRouteResponse'_routeId,
+    updateRouteResponse'_routeKey,
+    updateRouteResponse'_routeResponseSelectionExpression,
+    updateRouteResponse'_target,
+    updateRouteResponse'_httpStatus,
+
+    -- ** UpdateRouteResponse
+    updateRouteResponse_modelSelectionExpression,
+    updateRouteResponse_responseModels,
+    updateRouteResponse_responseParameters,
+    updateRouteResponse_routeResponseKey,
+    updateRouteResponse_routeResponseId,
+    updateRouteResponse_apiId,
+    updateRouteResponse_routeId,
+    updateRouteResponseResponse_modelSelectionExpression,
+    updateRouteResponseResponse_responseModels,
+    updateRouteResponseResponse_responseParameters,
+    updateRouteResponseResponse_routeResponseId,
+    updateRouteResponseResponse_routeResponseKey,
+    updateRouteResponseResponse_httpStatus,
+
+    -- ** UpdateStage
+    updateStage_accessLogSettings,
+    updateStage_autoDeploy,
+    updateStage_clientCertificateId,
+    updateStage_defaultRouteSettings,
+    updateStage_deploymentId,
+    updateStage_description,
+    updateStage_routeSettings,
+    updateStage_stageVariables,
+    updateStage_stageName,
+    updateStage_apiId,
+    updateStageResponse_accessLogSettings,
+    updateStageResponse_apiGatewayManaged,
+    updateStageResponse_autoDeploy,
+    updateStageResponse_clientCertificateId,
+    updateStageResponse_createdDate,
+    updateStageResponse_defaultRouteSettings,
+    updateStageResponse_deploymentId,
+    updateStageResponse_description,
+    updateStageResponse_lastDeploymentStatusMessage,
+    updateStageResponse_lastUpdatedDate,
+    updateStageResponse_routeSettings,
+    updateStageResponse_stageName,
+    updateStageResponse_stageVariables,
+    updateStageResponse_tags,
+    updateStageResponse_httpStatus,
+
+    -- ** UpdateVpcLink
+    updateVpcLink_name,
+    updateVpcLink_vpcLinkId,
+    updateVpcLinkResponse_createdDate,
+    updateVpcLinkResponse_name,
+    updateVpcLinkResponse_securityGroupIds,
+    updateVpcLinkResponse_subnetIds,
+    updateVpcLinkResponse_tags,
+    updateVpcLinkResponse_vpcLinkId,
+    updateVpcLinkResponse_vpcLinkStatus,
+    updateVpcLinkResponse_vpcLinkStatusMessage,
+    updateVpcLinkResponse_vpcLinkVersion,
+    updateVpcLinkResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccessLogSettings
+    accessLogSettings_destinationArn,
+    accessLogSettings_format,
+
+    -- ** Api
+    api_apiEndpoint,
+    api_apiGatewayManaged,
+    api_apiId,
+    api_apiKeySelectionExpression,
+    api_corsConfiguration,
+    api_createdDate,
+    api_description,
+    api_disableExecuteApiEndpoint,
+    api_disableSchemaValidation,
+    api_importInfo,
+    api_tags,
+    api_version,
+    api_warnings,
+    api_routeSelectionExpression,
+    api_name,
+    api_protocolType,
+
+    -- ** ApiMapping
+    apiMapping_apiMappingId,
+    apiMapping_apiMappingKey,
+    apiMapping_stage,
+    apiMapping_apiId,
+
+    -- ** Authorizer
+    authorizer_authorizerCredentialsArn,
+    authorizer_authorizerId,
+    authorizer_authorizerPayloadFormatVersion,
+    authorizer_authorizerResultTtlInSeconds,
+    authorizer_authorizerType,
+    authorizer_authorizerUri,
+    authorizer_enableSimpleResponses,
+    authorizer_identitySource,
+    authorizer_identityValidationExpression,
+    authorizer_jwtConfiguration,
+    authorizer_name,
+
+    -- ** Cors
+    cors_allowCredentials,
+    cors_allowHeaders,
+    cors_allowMethods,
+    cors_allowOrigins,
+    cors_exposeHeaders,
+    cors_maxAge,
+
+    -- ** Deployment
+    deployment_autoDeployed,
+    deployment_createdDate,
+    deployment_deploymentId,
+    deployment_deploymentStatus,
+    deployment_deploymentStatusMessage,
+    deployment_description,
+
+    -- ** DomainName
+    domainName_apiMappingSelectionExpression,
+    domainName_domainNameConfigurations,
+    domainName_mutualTlsAuthentication,
+    domainName_tags,
+    domainName_domainName,
+
+    -- ** DomainNameConfiguration
+    domainNameConfiguration_apiGatewayDomainName,
+    domainNameConfiguration_certificateArn,
+    domainNameConfiguration_certificateName,
+    domainNameConfiguration_certificateUploadDate,
+    domainNameConfiguration_domainNameStatus,
+    domainNameConfiguration_domainNameStatusMessage,
+    domainNameConfiguration_endpointType,
+    domainNameConfiguration_hostedZoneId,
+    domainNameConfiguration_ownershipVerificationCertificateArn,
+    domainNameConfiguration_securityPolicy,
+
+    -- ** Integration
+    integration_apiGatewayManaged,
+    integration_connectionId,
+    integration_connectionType,
+    integration_contentHandlingStrategy,
+    integration_credentialsArn,
+    integration_description,
+    integration_integrationId,
+    integration_integrationMethod,
+    integration_integrationResponseSelectionExpression,
+    integration_integrationSubtype,
+    integration_integrationType,
+    integration_integrationUri,
+    integration_passthroughBehavior,
+    integration_payloadFormatVersion,
+    integration_requestParameters,
+    integration_requestTemplates,
+    integration_responseParameters,
+    integration_templateSelectionExpression,
+    integration_timeoutInMillis,
+    integration_tlsConfig,
+
+    -- ** IntegrationResponse
+    integrationResponse_contentHandlingStrategy,
+    integrationResponse_integrationResponseId,
+    integrationResponse_responseParameters,
+    integrationResponse_responseTemplates,
+    integrationResponse_templateSelectionExpression,
+    integrationResponse_integrationResponseKey,
+
+    -- ** JWTConfiguration
+    jWTConfiguration_audience,
+    jWTConfiguration_issuer,
+
+    -- ** Model
+    model_contentType,
+    model_description,
+    model_modelId,
+    model_schema,
+    model_name,
+
+    -- ** MutualTlsAuthentication
+    mutualTlsAuthentication_truststoreUri,
+    mutualTlsAuthentication_truststoreVersion,
+    mutualTlsAuthentication_truststoreWarnings,
+
+    -- ** MutualTlsAuthenticationInput
+    mutualTlsAuthenticationInput_truststoreUri,
+    mutualTlsAuthenticationInput_truststoreVersion,
+
+    -- ** ParameterConstraints
+    parameterConstraints_required,
+
+    -- ** Route
+    route_apiGatewayManaged,
+    route_apiKeyRequired,
+    route_authorizationScopes,
+    route_authorizationType,
+    route_authorizerId,
+    route_modelSelectionExpression,
+    route_operationName,
+    route_requestModels,
+    route_requestParameters,
+    route_routeId,
+    route_routeResponseSelectionExpression,
+    route_target,
+    route_routeKey,
+
+    -- ** RouteResponse
+    routeResponse_modelSelectionExpression,
+    routeResponse_responseModels,
+    routeResponse_responseParameters,
+    routeResponse_routeResponseId,
+    routeResponse_routeResponseKey,
+
+    -- ** RouteSettings
+    routeSettings_dataTraceEnabled,
+    routeSettings_detailedMetricsEnabled,
+    routeSettings_loggingLevel,
+    routeSettings_throttlingBurstLimit,
+    routeSettings_throttlingRateLimit,
+
+    -- ** Stage
+    stage_accessLogSettings,
+    stage_apiGatewayManaged,
+    stage_autoDeploy,
+    stage_clientCertificateId,
+    stage_createdDate,
+    stage_defaultRouteSettings,
+    stage_deploymentId,
+    stage_description,
+    stage_lastDeploymentStatusMessage,
+    stage_lastUpdatedDate,
+    stage_routeSettings,
+    stage_stageVariables,
+    stage_tags,
+    stage_stageName,
+
+    -- ** TlsConfig
+    tlsConfig_serverNameToVerify,
+
+    -- ** TlsConfigInput
+    tlsConfigInput_serverNameToVerify,
+
+    -- ** VpcLink
+    vpcLink_createdDate,
+    vpcLink_tags,
+    vpcLink_vpcLinkStatus,
+    vpcLink_vpcLinkStatusMessage,
+    vpcLink_vpcLinkVersion,
+    vpcLink_vpcLinkId,
+    vpcLink_securityGroupIds,
+    vpcLink_subnetIds,
+    vpcLink_name,
+  )
+where
+
+import Amazonka.ApiGatewayV2.CreateApi
+import Amazonka.ApiGatewayV2.CreateApiMapping
+import Amazonka.ApiGatewayV2.CreateAuthorizer
+import Amazonka.ApiGatewayV2.CreateDeployment
+import Amazonka.ApiGatewayV2.CreateDomainName
+import Amazonka.ApiGatewayV2.CreateIntegration
+import Amazonka.ApiGatewayV2.CreateIntegrationResponse
+import Amazonka.ApiGatewayV2.CreateModel
+import Amazonka.ApiGatewayV2.CreateRoute
+import Amazonka.ApiGatewayV2.CreateRouteResponse
+import Amazonka.ApiGatewayV2.CreateStage
+import Amazonka.ApiGatewayV2.CreateVpcLink
+import Amazonka.ApiGatewayV2.DeleteAccessLogSettings
+import Amazonka.ApiGatewayV2.DeleteApi
+import Amazonka.ApiGatewayV2.DeleteApiMapping
+import Amazonka.ApiGatewayV2.DeleteAuthorizer
+import Amazonka.ApiGatewayV2.DeleteCorsConfiguration
+import Amazonka.ApiGatewayV2.DeleteDeployment
+import Amazonka.ApiGatewayV2.DeleteDomainName
+import Amazonka.ApiGatewayV2.DeleteIntegration
+import Amazonka.ApiGatewayV2.DeleteIntegrationResponse
+import Amazonka.ApiGatewayV2.DeleteModel
+import Amazonka.ApiGatewayV2.DeleteRoute
+import Amazonka.ApiGatewayV2.DeleteRouteRequestParameter
+import Amazonka.ApiGatewayV2.DeleteRouteResponse
+import Amazonka.ApiGatewayV2.DeleteRouteSettings
+import Amazonka.ApiGatewayV2.DeleteStage
+import Amazonka.ApiGatewayV2.DeleteVpcLink
+import Amazonka.ApiGatewayV2.ExportApi
+import Amazonka.ApiGatewayV2.GetApi
+import Amazonka.ApiGatewayV2.GetApiMapping
+import Amazonka.ApiGatewayV2.GetApiMappings
+import Amazonka.ApiGatewayV2.GetApis
+import Amazonka.ApiGatewayV2.GetAuthorizer
+import Amazonka.ApiGatewayV2.GetAuthorizers
+import Amazonka.ApiGatewayV2.GetDeployment
+import Amazonka.ApiGatewayV2.GetDeployments
+import Amazonka.ApiGatewayV2.GetDomainName
+import Amazonka.ApiGatewayV2.GetDomainNames
+import Amazonka.ApiGatewayV2.GetIntegration
+import Amazonka.ApiGatewayV2.GetIntegrationResponse
+import Amazonka.ApiGatewayV2.GetIntegrationResponses
+import Amazonka.ApiGatewayV2.GetIntegrations
+import Amazonka.ApiGatewayV2.GetModel
+import Amazonka.ApiGatewayV2.GetModelTemplate
+import Amazonka.ApiGatewayV2.GetModels
+import Amazonka.ApiGatewayV2.GetRoute
+import Amazonka.ApiGatewayV2.GetRouteResponse
+import Amazonka.ApiGatewayV2.GetRouteResponses
+import Amazonka.ApiGatewayV2.GetRoutes
+import Amazonka.ApiGatewayV2.GetStage
+import Amazonka.ApiGatewayV2.GetStages
+import Amazonka.ApiGatewayV2.GetTags
+import Amazonka.ApiGatewayV2.GetVpcLink
+import Amazonka.ApiGatewayV2.GetVpcLinks
+import Amazonka.ApiGatewayV2.ImportApi
+import Amazonka.ApiGatewayV2.ReimportApi
+import Amazonka.ApiGatewayV2.ResetAuthorizersCache
+import Amazonka.ApiGatewayV2.TagResource
+import Amazonka.ApiGatewayV2.Types.AccessLogSettings
+import Amazonka.ApiGatewayV2.Types.Api
+import Amazonka.ApiGatewayV2.Types.ApiMapping
+import Amazonka.ApiGatewayV2.Types.Authorizer
+import Amazonka.ApiGatewayV2.Types.Cors
+import Amazonka.ApiGatewayV2.Types.Deployment
+import Amazonka.ApiGatewayV2.Types.DomainName
+import Amazonka.ApiGatewayV2.Types.DomainNameConfiguration
+import Amazonka.ApiGatewayV2.Types.Integration
+import Amazonka.ApiGatewayV2.Types.IntegrationResponse
+import Amazonka.ApiGatewayV2.Types.JWTConfiguration
+import Amazonka.ApiGatewayV2.Types.Model
+import Amazonka.ApiGatewayV2.Types.MutualTlsAuthentication
+import Amazonka.ApiGatewayV2.Types.MutualTlsAuthenticationInput
+import Amazonka.ApiGatewayV2.Types.ParameterConstraints
+import Amazonka.ApiGatewayV2.Types.Route
+import Amazonka.ApiGatewayV2.Types.RouteResponse
+import Amazonka.ApiGatewayV2.Types.RouteSettings
+import Amazonka.ApiGatewayV2.Types.Stage
+import Amazonka.ApiGatewayV2.Types.TlsConfig
+import Amazonka.ApiGatewayV2.Types.TlsConfigInput
+import Amazonka.ApiGatewayV2.Types.VpcLink
+import Amazonka.ApiGatewayV2.UntagResource
+import Amazonka.ApiGatewayV2.UpdateApi
+import Amazonka.ApiGatewayV2.UpdateApiMapping
+import Amazonka.ApiGatewayV2.UpdateAuthorizer
+import Amazonka.ApiGatewayV2.UpdateDeployment
+import Amazonka.ApiGatewayV2.UpdateDomainName
+import Amazonka.ApiGatewayV2.UpdateIntegration
+import Amazonka.ApiGatewayV2.UpdateIntegrationResponse
+import Amazonka.ApiGatewayV2.UpdateModel
+import Amazonka.ApiGatewayV2.UpdateRoute
+import Amazonka.ApiGatewayV2.UpdateRouteResponse
+import Amazonka.ApiGatewayV2.UpdateStage
+import Amazonka.ApiGatewayV2.UpdateVpcLink
diff --git a/gen/Amazonka/ApiGatewayV2/ReimportApi.hs b/gen/Amazonka/ApiGatewayV2/ReimportApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/ReimportApi.hs
@@ -0,0 +1,456 @@
+{-# 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.ApiGatewayV2.ReimportApi
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Puts an Api resource.
+module Amazonka.ApiGatewayV2.ReimportApi
+  ( -- * Creating a Request
+    ReimportApi (..),
+    newReimportApi,
+
+    -- * Request Lenses
+    reimportApi_basepath,
+    reimportApi_failOnWarnings,
+    reimportApi_apiId,
+    reimportApi_body,
+
+    -- * Destructuring the Response
+    ReimportApiResponse (..),
+    newReimportApiResponse,
+
+    -- * Response Lenses
+    reimportApiResponse_apiEndpoint,
+    reimportApiResponse_apiGatewayManaged,
+    reimportApiResponse_apiId,
+    reimportApiResponse_apiKeySelectionExpression,
+    reimportApiResponse_corsConfiguration,
+    reimportApiResponse_createdDate,
+    reimportApiResponse_description,
+    reimportApiResponse_disableExecuteApiEndpoint,
+    reimportApiResponse_disableSchemaValidation,
+    reimportApiResponse_importInfo,
+    reimportApiResponse_name,
+    reimportApiResponse_protocolType,
+    reimportApiResponse_routeSelectionExpression,
+    reimportApiResponse_tags,
+    reimportApiResponse_version,
+    reimportApiResponse_warnings,
+    reimportApiResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- |
+--
+-- /See:/ 'newReimportApi' smart constructor.
+data ReimportApi = ReimportApi'
+  { -- | Specifies how to interpret the base path of the API during import. Valid
+    -- values are ignore, prepend, and split. The default value is ignore. To
+    -- learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html Set the OpenAPI basePath Property>.
+    -- Supported only for HTTP APIs.
+    basepath :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether to rollback the API creation when a warning is
+    -- encountered. By default, API creation continues if a warning is
+    -- encountered.
+    failOnWarnings :: Prelude.Maybe Prelude.Bool,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The OpenAPI definition. Supported only for HTTP APIs.
+    body :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReimportApi' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'basepath', 'reimportApi_basepath' - Specifies how to interpret the base path of the API during import. Valid
+-- values are ignore, prepend, and split. The default value is ignore. To
+-- learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html Set the OpenAPI basePath Property>.
+-- Supported only for HTTP APIs.
+--
+-- 'failOnWarnings', 'reimportApi_failOnWarnings' - Specifies whether to rollback the API creation when a warning is
+-- encountered. By default, API creation continues if a warning is
+-- encountered.
+--
+-- 'apiId', 'reimportApi_apiId' - The API identifier.
+--
+-- 'body', 'reimportApi_body' - The OpenAPI definition. Supported only for HTTP APIs.
+newReimportApi ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'body'
+  Prelude.Text ->
+  ReimportApi
+newReimportApi pApiId_ pBody_ =
+  ReimportApi'
+    { basepath = Prelude.Nothing,
+      failOnWarnings = Prelude.Nothing,
+      apiId = pApiId_,
+      body = pBody_
+    }
+
+-- | Specifies how to interpret the base path of the API during import. Valid
+-- values are ignore, prepend, and split. The default value is ignore. To
+-- learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html Set the OpenAPI basePath Property>.
+-- Supported only for HTTP APIs.
+reimportApi_basepath :: Lens.Lens' ReimportApi (Prelude.Maybe Prelude.Text)
+reimportApi_basepath = Lens.lens (\ReimportApi' {basepath} -> basepath) (\s@ReimportApi' {} a -> s {basepath = a} :: ReimportApi)
+
+-- | Specifies whether to rollback the API creation when a warning is
+-- encountered. By default, API creation continues if a warning is
+-- encountered.
+reimportApi_failOnWarnings :: Lens.Lens' ReimportApi (Prelude.Maybe Prelude.Bool)
+reimportApi_failOnWarnings = Lens.lens (\ReimportApi' {failOnWarnings} -> failOnWarnings) (\s@ReimportApi' {} a -> s {failOnWarnings = a} :: ReimportApi)
+
+-- | The API identifier.
+reimportApi_apiId :: Lens.Lens' ReimportApi Prelude.Text
+reimportApi_apiId = Lens.lens (\ReimportApi' {apiId} -> apiId) (\s@ReimportApi' {} a -> s {apiId = a} :: ReimportApi)
+
+-- | The OpenAPI definition. Supported only for HTTP APIs.
+reimportApi_body :: Lens.Lens' ReimportApi Prelude.Text
+reimportApi_body = Lens.lens (\ReimportApi' {body} -> body) (\s@ReimportApi' {} a -> s {body = a} :: ReimportApi)
+
+instance Core.AWSRequest ReimportApi where
+  type AWSResponse ReimportApi = ReimportApiResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ReimportApiResponse'
+            Prelude.<$> (x Data..?> "apiEndpoint")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiKeySelectionExpression")
+            Prelude.<*> (x Data..?> "corsConfiguration")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "disableExecuteApiEndpoint")
+            Prelude.<*> (x Data..?> "disableSchemaValidation")
+            Prelude.<*> (x Data..?> "importInfo" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "protocolType")
+            Prelude.<*> (x Data..?> "routeSelectionExpression")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "warnings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ReimportApi where
+  hashWithSalt _salt ReimportApi' {..} =
+    _salt
+      `Prelude.hashWithSalt` basepath
+      `Prelude.hashWithSalt` failOnWarnings
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` body
+
+instance Prelude.NFData ReimportApi where
+  rnf ReimportApi' {..} =
+    Prelude.rnf basepath
+      `Prelude.seq` Prelude.rnf failOnWarnings
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf body
+
+instance Data.ToHeaders ReimportApi where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ReimportApi where
+  toJSON ReimportApi' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("body" Data..= body)]
+      )
+
+instance Data.ToPath ReimportApi where
+  toPath ReimportApi' {..} =
+    Prelude.mconcat ["/v2/apis/", Data.toBS apiId]
+
+instance Data.ToQuery ReimportApi where
+  toQuery ReimportApi' {..} =
+    Prelude.mconcat
+      [ "basepath" Data.=: basepath,
+        "failOnWarnings" Data.=: failOnWarnings
+      ]
+
+-- | /See:/ 'newReimportApiResponse' smart constructor.
+data ReimportApiResponse = ReimportApiResponse'
+  { -- | The URI of the API, of the form
+    -- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+    -- appended to this URI to form a complete path to a deployed API stage.
+    apiEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether an API is managed by API Gateway. You can\'t update or
+    -- delete a managed API by using API Gateway. A managed API can be deleted
+    -- only through the tooling or service that created it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The API ID.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | The timestamp when the API was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | The validation information during API import. This may include
+    -- particular properties of your OpenAPI definition which are ignored
+    -- during import. Supported only for HTTP APIs.
+    importInfo :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the API.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The API protocol.
+    protocolType :: Prelude.Maybe ProtocolType,
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A collection of tags associated with the API.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The warning messages reported when failonwarnings is turned on during
+    -- API import.
+    warnings :: 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 'ReimportApiResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiEndpoint', 'reimportApiResponse_apiEndpoint' - The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+--
+-- 'apiGatewayManaged', 'reimportApiResponse_apiGatewayManaged' - Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+--
+-- 'apiId', 'reimportApiResponse_apiId' - The API ID.
+--
+-- 'apiKeySelectionExpression', 'reimportApiResponse_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'reimportApiResponse_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs.
+--
+-- 'createdDate', 'reimportApiResponse_createdDate' - The timestamp when the API was created.
+--
+-- 'description', 'reimportApiResponse_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'reimportApiResponse_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'reimportApiResponse_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'importInfo', 'reimportApiResponse_importInfo' - The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+--
+-- 'name', 'reimportApiResponse_name' - The name of the API.
+--
+-- 'protocolType', 'reimportApiResponse_protocolType' - The API protocol.
+--
+-- 'routeSelectionExpression', 'reimportApiResponse_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'tags', 'reimportApiResponse_tags' - A collection of tags associated with the API.
+--
+-- 'version', 'reimportApiResponse_version' - A version identifier for the API.
+--
+-- 'warnings', 'reimportApiResponse_warnings' - The warning messages reported when failonwarnings is turned on during
+-- API import.
+--
+-- 'httpStatus', 'reimportApiResponse_httpStatus' - The response's http status code.
+newReimportApiResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReimportApiResponse
+newReimportApiResponse pHttpStatus_ =
+  ReimportApiResponse'
+    { apiEndpoint = Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      apiId = Prelude.Nothing,
+      apiKeySelectionExpression = Prelude.Nothing,
+      corsConfiguration = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disableExecuteApiEndpoint = Prelude.Nothing,
+      disableSchemaValidation = Prelude.Nothing,
+      importInfo = Prelude.Nothing,
+      name = Prelude.Nothing,
+      protocolType = Prelude.Nothing,
+      routeSelectionExpression = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      warnings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+reimportApiResponse_apiEndpoint :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Text)
+reimportApiResponse_apiEndpoint = Lens.lens (\ReimportApiResponse' {apiEndpoint} -> apiEndpoint) (\s@ReimportApiResponse' {} a -> s {apiEndpoint = a} :: ReimportApiResponse)
+
+-- | Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+reimportApiResponse_apiGatewayManaged :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Bool)
+reimportApiResponse_apiGatewayManaged = Lens.lens (\ReimportApiResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@ReimportApiResponse' {} a -> s {apiGatewayManaged = a} :: ReimportApiResponse)
+
+-- | The API ID.
+reimportApiResponse_apiId :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Text)
+reimportApiResponse_apiId = Lens.lens (\ReimportApiResponse' {apiId} -> apiId) (\s@ReimportApiResponse' {} a -> s {apiId = a} :: ReimportApiResponse)
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+reimportApiResponse_apiKeySelectionExpression :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Text)
+reimportApiResponse_apiKeySelectionExpression = Lens.lens (\ReimportApiResponse' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@ReimportApiResponse' {} a -> s {apiKeySelectionExpression = a} :: ReimportApiResponse)
+
+-- | A CORS configuration. Supported only for HTTP APIs.
+reimportApiResponse_corsConfiguration :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Cors)
+reimportApiResponse_corsConfiguration = Lens.lens (\ReimportApiResponse' {corsConfiguration} -> corsConfiguration) (\s@ReimportApiResponse' {} a -> s {corsConfiguration = a} :: ReimportApiResponse)
+
+-- | The timestamp when the API was created.
+reimportApiResponse_createdDate :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.UTCTime)
+reimportApiResponse_createdDate = Lens.lens (\ReimportApiResponse' {createdDate} -> createdDate) (\s@ReimportApiResponse' {} a -> s {createdDate = a} :: ReimportApiResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the API.
+reimportApiResponse_description :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Text)
+reimportApiResponse_description = Lens.lens (\ReimportApiResponse' {description} -> description) (\s@ReimportApiResponse' {} a -> s {description = a} :: ReimportApiResponse)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+reimportApiResponse_disableExecuteApiEndpoint :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Bool)
+reimportApiResponse_disableExecuteApiEndpoint = Lens.lens (\ReimportApiResponse' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@ReimportApiResponse' {} a -> s {disableExecuteApiEndpoint = a} :: ReimportApiResponse)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+reimportApiResponse_disableSchemaValidation :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Bool)
+reimportApiResponse_disableSchemaValidation = Lens.lens (\ReimportApiResponse' {disableSchemaValidation} -> disableSchemaValidation) (\s@ReimportApiResponse' {} a -> s {disableSchemaValidation = a} :: ReimportApiResponse)
+
+-- | The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+reimportApiResponse_importInfo :: Lens.Lens' ReimportApiResponse (Prelude.Maybe [Prelude.Text])
+reimportApiResponse_importInfo = Lens.lens (\ReimportApiResponse' {importInfo} -> importInfo) (\s@ReimportApiResponse' {} a -> s {importInfo = a} :: ReimportApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the API.
+reimportApiResponse_name :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Text)
+reimportApiResponse_name = Lens.lens (\ReimportApiResponse' {name} -> name) (\s@ReimportApiResponse' {} a -> s {name = a} :: ReimportApiResponse)
+
+-- | The API protocol.
+reimportApiResponse_protocolType :: Lens.Lens' ReimportApiResponse (Prelude.Maybe ProtocolType)
+reimportApiResponse_protocolType = Lens.lens (\ReimportApiResponse' {protocolType} -> protocolType) (\s@ReimportApiResponse' {} a -> s {protocolType = a} :: ReimportApiResponse)
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+reimportApiResponse_routeSelectionExpression :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Text)
+reimportApiResponse_routeSelectionExpression = Lens.lens (\ReimportApiResponse' {routeSelectionExpression} -> routeSelectionExpression) (\s@ReimportApiResponse' {} a -> s {routeSelectionExpression = a} :: ReimportApiResponse)
+
+-- | A collection of tags associated with the API.
+reimportApiResponse_tags :: Lens.Lens' ReimportApiResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+reimportApiResponse_tags = Lens.lens (\ReimportApiResponse' {tags} -> tags) (\s@ReimportApiResponse' {} a -> s {tags = a} :: ReimportApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A version identifier for the API.
+reimportApiResponse_version :: Lens.Lens' ReimportApiResponse (Prelude.Maybe Prelude.Text)
+reimportApiResponse_version = Lens.lens (\ReimportApiResponse' {version} -> version) (\s@ReimportApiResponse' {} a -> s {version = a} :: ReimportApiResponse)
+
+-- | The warning messages reported when failonwarnings is turned on during
+-- API import.
+reimportApiResponse_warnings :: Lens.Lens' ReimportApiResponse (Prelude.Maybe [Prelude.Text])
+reimportApiResponse_warnings = Lens.lens (\ReimportApiResponse' {warnings} -> warnings) (\s@ReimportApiResponse' {} a -> s {warnings = a} :: ReimportApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+reimportApiResponse_httpStatus :: Lens.Lens' ReimportApiResponse Prelude.Int
+reimportApiResponse_httpStatus = Lens.lens (\ReimportApiResponse' {httpStatus} -> httpStatus) (\s@ReimportApiResponse' {} a -> s {httpStatus = a} :: ReimportApiResponse)
+
+instance Prelude.NFData ReimportApiResponse where
+  rnf ReimportApiResponse' {..} =
+    Prelude.rnf apiEndpoint
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf importInfo
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf warnings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/ResetAuthorizersCache.hs b/gen/Amazonka/ApiGatewayV2/ResetAuthorizersCache.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/ResetAuthorizersCache.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.ResetAuthorizersCache
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets all authorizer cache entries on a stage. Supported only for HTTP
+-- APIs.
+module Amazonka.ApiGatewayV2.ResetAuthorizersCache
+  ( -- * Creating a Request
+    ResetAuthorizersCache (..),
+    newResetAuthorizersCache,
+
+    -- * Request Lenses
+    resetAuthorizersCache_stageName,
+    resetAuthorizersCache_apiId,
+
+    -- * Destructuring the Response
+    ResetAuthorizersCacheResponse (..),
+    newResetAuthorizersCacheResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetAuthorizersCache' smart constructor.
+data ResetAuthorizersCache = ResetAuthorizersCache'
+  { -- | The stage name. Stage names can contain only alphanumeric characters,
+    -- hyphens, and underscores, or be $default. Maximum length is 128
+    -- characters.
+    stageName :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetAuthorizersCache' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stageName', 'resetAuthorizersCache_stageName' - The stage name. Stage names can contain only alphanumeric characters,
+-- hyphens, and underscores, or be $default. Maximum length is 128
+-- characters.
+--
+-- 'apiId', 'resetAuthorizersCache_apiId' - The API identifier.
+newResetAuthorizersCache ::
+  -- | 'stageName'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  ResetAuthorizersCache
+newResetAuthorizersCache pStageName_ pApiId_ =
+  ResetAuthorizersCache'
+    { stageName = pStageName_,
+      apiId = pApiId_
+    }
+
+-- | The stage name. Stage names can contain only alphanumeric characters,
+-- hyphens, and underscores, or be $default. Maximum length is 128
+-- characters.
+resetAuthorizersCache_stageName :: Lens.Lens' ResetAuthorizersCache Prelude.Text
+resetAuthorizersCache_stageName = Lens.lens (\ResetAuthorizersCache' {stageName} -> stageName) (\s@ResetAuthorizersCache' {} a -> s {stageName = a} :: ResetAuthorizersCache)
+
+-- | The API identifier.
+resetAuthorizersCache_apiId :: Lens.Lens' ResetAuthorizersCache Prelude.Text
+resetAuthorizersCache_apiId = Lens.lens (\ResetAuthorizersCache' {apiId} -> apiId) (\s@ResetAuthorizersCache' {} a -> s {apiId = a} :: ResetAuthorizersCache)
+
+instance Core.AWSRequest ResetAuthorizersCache where
+  type
+    AWSResponse ResetAuthorizersCache =
+      ResetAuthorizersCacheResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull ResetAuthorizersCacheResponse'
+
+instance Prelude.Hashable ResetAuthorizersCache where
+  hashWithSalt _salt ResetAuthorizersCache' {..} =
+    _salt
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData ResetAuthorizersCache where
+  rnf ResetAuthorizersCache' {..} =
+    Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders ResetAuthorizersCache where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ResetAuthorizersCache where
+  toPath ResetAuthorizersCache' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/stages/",
+        Data.toBS stageName,
+        "/cache/authorizers"
+      ]
+
+instance Data.ToQuery ResetAuthorizersCache where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newResetAuthorizersCacheResponse' smart constructor.
+data ResetAuthorizersCacheResponse = ResetAuthorizersCacheResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetAuthorizersCacheResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newResetAuthorizersCacheResponse ::
+  ResetAuthorizersCacheResponse
+newResetAuthorizersCacheResponse =
+  ResetAuthorizersCacheResponse'
+
+instance Prelude.NFData ResetAuthorizersCacheResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ApiGatewayV2/TagResource.hs b/gen/Amazonka/ApiGatewayV2/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/TagResource.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.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)
+--
+-- Creates a new Tag resource to represent a tag.
+module Amazonka.ApiGatewayV2.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_tags,
+    tagResource_resourceArn,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Creates a new Tag resource to represent a tag.
+--
+-- /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The collection of tags. Each tag element is associated with a given
+    -- resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The resource ARN for the tag.
+    resourceArn :: 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:
+--
+-- 'tags', 'tagResource_tags' - The collection of tags. Each tag element is associated with a given
+-- resource.
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The resource ARN for the tag.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { tags = Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | The collection of tags. Each tag element is associated with a given
+-- resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resource ARN for the tag.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf resourceArn
+
+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
+          [("tags" Data..=) Prelude.<$> tags]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat
+      ["/v2/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  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.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/Types.hs b/gen/Amazonka/ApiGatewayV2/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types.hs
@@ -0,0 +1,461 @@
+{-# 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.ApiGatewayV2.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.ApiGatewayV2.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _BadRequestException,
+    _ConflictException,
+    _NotFoundException,
+    _TooManyRequestsException,
+
+    -- * AuthorizationType
+    AuthorizationType (..),
+
+    -- * AuthorizerType
+    AuthorizerType (..),
+
+    -- * ConnectionType
+    ConnectionType (..),
+
+    -- * ContentHandlingStrategy
+    ContentHandlingStrategy (..),
+
+    -- * DeploymentStatus
+    DeploymentStatus (..),
+
+    -- * DomainNameStatus
+    DomainNameStatus (..),
+
+    -- * EndpointType
+    EndpointType (..),
+
+    -- * IntegrationType
+    IntegrationType (..),
+
+    -- * LoggingLevel
+    LoggingLevel (..),
+
+    -- * PassthroughBehavior
+    PassthroughBehavior (..),
+
+    -- * ProtocolType
+    ProtocolType (..),
+
+    -- * SecurityPolicy
+    SecurityPolicy (..),
+
+    -- * VpcLinkStatus
+    VpcLinkStatus (..),
+
+    -- * VpcLinkVersion
+    VpcLinkVersion (..),
+
+    -- * AccessLogSettings
+    AccessLogSettings (..),
+    newAccessLogSettings,
+    accessLogSettings_destinationArn,
+    accessLogSettings_format,
+
+    -- * Api
+    Api (..),
+    newApi,
+    api_apiEndpoint,
+    api_apiGatewayManaged,
+    api_apiId,
+    api_apiKeySelectionExpression,
+    api_corsConfiguration,
+    api_createdDate,
+    api_description,
+    api_disableExecuteApiEndpoint,
+    api_disableSchemaValidation,
+    api_importInfo,
+    api_tags,
+    api_version,
+    api_warnings,
+    api_routeSelectionExpression,
+    api_name,
+    api_protocolType,
+
+    -- * ApiMapping
+    ApiMapping (..),
+    newApiMapping,
+    apiMapping_apiMappingId,
+    apiMapping_apiMappingKey,
+    apiMapping_stage,
+    apiMapping_apiId,
+
+    -- * Authorizer
+    Authorizer (..),
+    newAuthorizer,
+    authorizer_authorizerCredentialsArn,
+    authorizer_authorizerId,
+    authorizer_authorizerPayloadFormatVersion,
+    authorizer_authorizerResultTtlInSeconds,
+    authorizer_authorizerType,
+    authorizer_authorizerUri,
+    authorizer_enableSimpleResponses,
+    authorizer_identitySource,
+    authorizer_identityValidationExpression,
+    authorizer_jwtConfiguration,
+    authorizer_name,
+
+    -- * Cors
+    Cors (..),
+    newCors,
+    cors_allowCredentials,
+    cors_allowHeaders,
+    cors_allowMethods,
+    cors_allowOrigins,
+    cors_exposeHeaders,
+    cors_maxAge,
+
+    -- * Deployment
+    Deployment (..),
+    newDeployment,
+    deployment_autoDeployed,
+    deployment_createdDate,
+    deployment_deploymentId,
+    deployment_deploymentStatus,
+    deployment_deploymentStatusMessage,
+    deployment_description,
+
+    -- * DomainName
+    DomainName (..),
+    newDomainName,
+    domainName_apiMappingSelectionExpression,
+    domainName_domainNameConfigurations,
+    domainName_mutualTlsAuthentication,
+    domainName_tags,
+    domainName_domainName,
+
+    -- * DomainNameConfiguration
+    DomainNameConfiguration (..),
+    newDomainNameConfiguration,
+    domainNameConfiguration_apiGatewayDomainName,
+    domainNameConfiguration_certificateArn,
+    domainNameConfiguration_certificateName,
+    domainNameConfiguration_certificateUploadDate,
+    domainNameConfiguration_domainNameStatus,
+    domainNameConfiguration_domainNameStatusMessage,
+    domainNameConfiguration_endpointType,
+    domainNameConfiguration_hostedZoneId,
+    domainNameConfiguration_ownershipVerificationCertificateArn,
+    domainNameConfiguration_securityPolicy,
+
+    -- * Integration
+    Integration (..),
+    newIntegration,
+    integration_apiGatewayManaged,
+    integration_connectionId,
+    integration_connectionType,
+    integration_contentHandlingStrategy,
+    integration_credentialsArn,
+    integration_description,
+    integration_integrationId,
+    integration_integrationMethod,
+    integration_integrationResponseSelectionExpression,
+    integration_integrationSubtype,
+    integration_integrationType,
+    integration_integrationUri,
+    integration_passthroughBehavior,
+    integration_payloadFormatVersion,
+    integration_requestParameters,
+    integration_requestTemplates,
+    integration_responseParameters,
+    integration_templateSelectionExpression,
+    integration_timeoutInMillis,
+    integration_tlsConfig,
+
+    -- * IntegrationResponse
+    IntegrationResponse (..),
+    newIntegrationResponse,
+    integrationResponse_contentHandlingStrategy,
+    integrationResponse_integrationResponseId,
+    integrationResponse_responseParameters,
+    integrationResponse_responseTemplates,
+    integrationResponse_templateSelectionExpression,
+    integrationResponse_integrationResponseKey,
+
+    -- * JWTConfiguration
+    JWTConfiguration (..),
+    newJWTConfiguration,
+    jWTConfiguration_audience,
+    jWTConfiguration_issuer,
+
+    -- * Model
+    Model (..),
+    newModel,
+    model_contentType,
+    model_description,
+    model_modelId,
+    model_schema,
+    model_name,
+
+    -- * MutualTlsAuthentication
+    MutualTlsAuthentication (..),
+    newMutualTlsAuthentication,
+    mutualTlsAuthentication_truststoreUri,
+    mutualTlsAuthentication_truststoreVersion,
+    mutualTlsAuthentication_truststoreWarnings,
+
+    -- * MutualTlsAuthenticationInput
+    MutualTlsAuthenticationInput (..),
+    newMutualTlsAuthenticationInput,
+    mutualTlsAuthenticationInput_truststoreUri,
+    mutualTlsAuthenticationInput_truststoreVersion,
+
+    -- * ParameterConstraints
+    ParameterConstraints (..),
+    newParameterConstraints,
+    parameterConstraints_required,
+
+    -- * Route
+    Route (..),
+    newRoute,
+    route_apiGatewayManaged,
+    route_apiKeyRequired,
+    route_authorizationScopes,
+    route_authorizationType,
+    route_authorizerId,
+    route_modelSelectionExpression,
+    route_operationName,
+    route_requestModels,
+    route_requestParameters,
+    route_routeId,
+    route_routeResponseSelectionExpression,
+    route_target,
+    route_routeKey,
+
+    -- * RouteResponse
+    RouteResponse (..),
+    newRouteResponse,
+    routeResponse_modelSelectionExpression,
+    routeResponse_responseModels,
+    routeResponse_responseParameters,
+    routeResponse_routeResponseId,
+    routeResponse_routeResponseKey,
+
+    -- * RouteSettings
+    RouteSettings (..),
+    newRouteSettings,
+    routeSettings_dataTraceEnabled,
+    routeSettings_detailedMetricsEnabled,
+    routeSettings_loggingLevel,
+    routeSettings_throttlingBurstLimit,
+    routeSettings_throttlingRateLimit,
+
+    -- * Stage
+    Stage (..),
+    newStage,
+    stage_accessLogSettings,
+    stage_apiGatewayManaged,
+    stage_autoDeploy,
+    stage_clientCertificateId,
+    stage_createdDate,
+    stage_defaultRouteSettings,
+    stage_deploymentId,
+    stage_description,
+    stage_lastDeploymentStatusMessage,
+    stage_lastUpdatedDate,
+    stage_routeSettings,
+    stage_stageVariables,
+    stage_tags,
+    stage_stageName,
+
+    -- * TlsConfig
+    TlsConfig (..),
+    newTlsConfig,
+    tlsConfig_serverNameToVerify,
+
+    -- * TlsConfigInput
+    TlsConfigInput (..),
+    newTlsConfigInput,
+    tlsConfigInput_serverNameToVerify,
+
+    -- * VpcLink
+    VpcLink (..),
+    newVpcLink,
+    vpcLink_createdDate,
+    vpcLink_tags,
+    vpcLink_vpcLinkStatus,
+    vpcLink_vpcLinkStatusMessage,
+    vpcLink_vpcLinkVersion,
+    vpcLink_vpcLinkId,
+    vpcLink_securityGroupIds,
+    vpcLink_subnetIds,
+    vpcLink_name,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types.AccessLogSettings
+import Amazonka.ApiGatewayV2.Types.Api
+import Amazonka.ApiGatewayV2.Types.ApiMapping
+import Amazonka.ApiGatewayV2.Types.AuthorizationType
+import Amazonka.ApiGatewayV2.Types.Authorizer
+import Amazonka.ApiGatewayV2.Types.AuthorizerType
+import Amazonka.ApiGatewayV2.Types.ConnectionType
+import Amazonka.ApiGatewayV2.Types.ContentHandlingStrategy
+import Amazonka.ApiGatewayV2.Types.Cors
+import Amazonka.ApiGatewayV2.Types.Deployment
+import Amazonka.ApiGatewayV2.Types.DeploymentStatus
+import Amazonka.ApiGatewayV2.Types.DomainName
+import Amazonka.ApiGatewayV2.Types.DomainNameConfiguration
+import Amazonka.ApiGatewayV2.Types.DomainNameStatus
+import Amazonka.ApiGatewayV2.Types.EndpointType
+import Amazonka.ApiGatewayV2.Types.Integration
+import Amazonka.ApiGatewayV2.Types.IntegrationResponse
+import Amazonka.ApiGatewayV2.Types.IntegrationType
+import Amazonka.ApiGatewayV2.Types.JWTConfiguration
+import Amazonka.ApiGatewayV2.Types.LoggingLevel
+import Amazonka.ApiGatewayV2.Types.Model
+import Amazonka.ApiGatewayV2.Types.MutualTlsAuthentication
+import Amazonka.ApiGatewayV2.Types.MutualTlsAuthenticationInput
+import Amazonka.ApiGatewayV2.Types.ParameterConstraints
+import Amazonka.ApiGatewayV2.Types.PassthroughBehavior
+import Amazonka.ApiGatewayV2.Types.ProtocolType
+import Amazonka.ApiGatewayV2.Types.Route
+import Amazonka.ApiGatewayV2.Types.RouteResponse
+import Amazonka.ApiGatewayV2.Types.RouteSettings
+import Amazonka.ApiGatewayV2.Types.SecurityPolicy
+import Amazonka.ApiGatewayV2.Types.Stage
+import Amazonka.ApiGatewayV2.Types.TlsConfig
+import Amazonka.ApiGatewayV2.Types.TlsConfigInput
+import Amazonka.ApiGatewayV2.Types.VpcLink
+import Amazonka.ApiGatewayV2.Types.VpcLinkStatus
+import Amazonka.ApiGatewayV2.Types.VpcLinkVersion
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-11-29@ of the Amazon ApiGatewayV2 SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ApiGatewayV2",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "apigateway",
+      Core.signingName = "apigateway",
+      Core.version = "2018-11-29",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ApiGatewayV2",
+      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
+
+-- | Prism for AccessDeniedException' errors.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The request is not valid, for example, the input is incomplete or
+-- incorrect. See the accompanying error message for details.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | The requested operation would cause a conflict with the current state of
+-- a service resource associated with the request. Resolve the conflict
+-- before retrying this request. See the accompanying error message for
+-- details.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The resource specified in the request was not found. See the message
+-- field for more information.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | A limit has been exceeded. See the accompanying error message for
+-- details.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
diff --git a/gen/Amazonka/ApiGatewayV2/Types/AccessLogSettings.hs b/gen/Amazonka/ApiGatewayV2/Types/AccessLogSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/AccessLogSettings.hs
@@ -0,0 +1,101 @@
+{-# 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.ApiGatewayV2.Types.AccessLogSettings
+-- 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.ApiGatewayV2.Types.AccessLogSettings 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
+
+-- | Settings for logging access in a stage.
+--
+-- /See:/ 'newAccessLogSettings' smart constructor.
+data AccessLogSettings = AccessLogSettings'
+  { -- | The ARN of the CloudWatch Logs log group to receive access logs.
+    destinationArn :: Prelude.Maybe Prelude.Text,
+    -- | A single line format of the access logs of data, as specified by
+    -- selected $context variables. The format must include at least
+    -- \$context.requestId.
+    format :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessLogSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationArn', 'accessLogSettings_destinationArn' - The ARN of the CloudWatch Logs log group to receive access logs.
+--
+-- 'format', 'accessLogSettings_format' - A single line format of the access logs of data, as specified by
+-- selected $context variables. The format must include at least
+-- \$context.requestId.
+newAccessLogSettings ::
+  AccessLogSettings
+newAccessLogSettings =
+  AccessLogSettings'
+    { destinationArn =
+        Prelude.Nothing,
+      format = Prelude.Nothing
+    }
+
+-- | The ARN of the CloudWatch Logs log group to receive access logs.
+accessLogSettings_destinationArn :: Lens.Lens' AccessLogSettings (Prelude.Maybe Prelude.Text)
+accessLogSettings_destinationArn = Lens.lens (\AccessLogSettings' {destinationArn} -> destinationArn) (\s@AccessLogSettings' {} a -> s {destinationArn = a} :: AccessLogSettings)
+
+-- | A single line format of the access logs of data, as specified by
+-- selected $context variables. The format must include at least
+-- \$context.requestId.
+accessLogSettings_format :: Lens.Lens' AccessLogSettings (Prelude.Maybe Prelude.Text)
+accessLogSettings_format = Lens.lens (\AccessLogSettings' {format} -> format) (\s@AccessLogSettings' {} a -> s {format = a} :: AccessLogSettings)
+
+instance Data.FromJSON AccessLogSettings where
+  parseJSON =
+    Data.withObject
+      "AccessLogSettings"
+      ( \x ->
+          AccessLogSettings'
+            Prelude.<$> (x Data..:? "destinationArn")
+            Prelude.<*> (x Data..:? "format")
+      )
+
+instance Prelude.Hashable AccessLogSettings where
+  hashWithSalt _salt AccessLogSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationArn
+      `Prelude.hashWithSalt` format
+
+instance Prelude.NFData AccessLogSettings where
+  rnf AccessLogSettings' {..} =
+    Prelude.rnf destinationArn
+      `Prelude.seq` Prelude.rnf format
+
+instance Data.ToJSON AccessLogSettings where
+  toJSON AccessLogSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("destinationArn" Data..=)
+              Prelude.<$> destinationArn,
+            ("format" Data..=) Prelude.<$> format
+          ]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Api.hs b/gen/Amazonka/ApiGatewayV2/Types/Api.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Api.hs
@@ -0,0 +1,312 @@
+{-# 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.ApiGatewayV2.Types.Api
+-- 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.ApiGatewayV2.Types.Api where
+
+import Amazonka.ApiGatewayV2.Types.Cors
+import Amazonka.ApiGatewayV2.Types.ProtocolType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an API.
+--
+-- /See:/ 'newApi' smart constructor.
+data Api = Api'
+  { -- | The URI of the API, of the form
+    -- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+    -- appended to this URI to form a complete path to a deployed API stage.
+    apiEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether an API is managed by API Gateway. You can\'t update or
+    -- delete a managed API by using API Gateway. A managed API can be deleted
+    -- only through the tooling or service that created it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The API ID.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | The timestamp when the API was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | The validation information during API import. This may include
+    -- particular properties of your OpenAPI definition which are ignored
+    -- during import. Supported only for HTTP APIs.
+    importInfo :: Prelude.Maybe [Prelude.Text],
+    -- | A collection of tags associated with the API.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The warning messages reported when failonwarnings is turned on during
+    -- API import.
+    warnings :: Prelude.Maybe [Prelude.Text],
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Text,
+    -- | The name of the API.
+    name :: Prelude.Text,
+    -- | The API protocol.
+    protocolType :: ProtocolType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Api' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiEndpoint', 'api_apiEndpoint' - The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+--
+-- 'apiGatewayManaged', 'api_apiGatewayManaged' - Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+--
+-- 'apiId', 'api_apiId' - The API ID.
+--
+-- 'apiKeySelectionExpression', 'api_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'api_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs.
+--
+-- 'createdDate', 'api_createdDate' - The timestamp when the API was created.
+--
+-- 'description', 'api_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'api_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'api_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'importInfo', 'api_importInfo' - The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+--
+-- 'tags', 'api_tags' - A collection of tags associated with the API.
+--
+-- 'version', 'api_version' - A version identifier for the API.
+--
+-- 'warnings', 'api_warnings' - The warning messages reported when failonwarnings is turned on during
+-- API import.
+--
+-- 'routeSelectionExpression', 'api_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'name', 'api_name' - The name of the API.
+--
+-- 'protocolType', 'api_protocolType' - The API protocol.
+newApi ::
+  -- | 'routeSelectionExpression'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'protocolType'
+  ProtocolType ->
+  Api
+newApi
+  pRouteSelectionExpression_
+  pName_
+  pProtocolType_ =
+    Api'
+      { apiEndpoint = Prelude.Nothing,
+        apiGatewayManaged = Prelude.Nothing,
+        apiId = Prelude.Nothing,
+        apiKeySelectionExpression = Prelude.Nothing,
+        corsConfiguration = Prelude.Nothing,
+        createdDate = Prelude.Nothing,
+        description = Prelude.Nothing,
+        disableExecuteApiEndpoint = Prelude.Nothing,
+        disableSchemaValidation = Prelude.Nothing,
+        importInfo = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        version = Prelude.Nothing,
+        warnings = Prelude.Nothing,
+        routeSelectionExpression =
+          pRouteSelectionExpression_,
+        name = pName_,
+        protocolType = pProtocolType_
+      }
+
+-- | The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+api_apiEndpoint :: Lens.Lens' Api (Prelude.Maybe Prelude.Text)
+api_apiEndpoint = Lens.lens (\Api' {apiEndpoint} -> apiEndpoint) (\s@Api' {} a -> s {apiEndpoint = a} :: Api)
+
+-- | Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+api_apiGatewayManaged :: Lens.Lens' Api (Prelude.Maybe Prelude.Bool)
+api_apiGatewayManaged = Lens.lens (\Api' {apiGatewayManaged} -> apiGatewayManaged) (\s@Api' {} a -> s {apiGatewayManaged = a} :: Api)
+
+-- | The API ID.
+api_apiId :: Lens.Lens' Api (Prelude.Maybe Prelude.Text)
+api_apiId = Lens.lens (\Api' {apiId} -> apiId) (\s@Api' {} a -> s {apiId = a} :: Api)
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+api_apiKeySelectionExpression :: Lens.Lens' Api (Prelude.Maybe Prelude.Text)
+api_apiKeySelectionExpression = Lens.lens (\Api' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@Api' {} a -> s {apiKeySelectionExpression = a} :: Api)
+
+-- | A CORS configuration. Supported only for HTTP APIs.
+api_corsConfiguration :: Lens.Lens' Api (Prelude.Maybe Cors)
+api_corsConfiguration = Lens.lens (\Api' {corsConfiguration} -> corsConfiguration) (\s@Api' {} a -> s {corsConfiguration = a} :: Api)
+
+-- | The timestamp when the API was created.
+api_createdDate :: Lens.Lens' Api (Prelude.Maybe Prelude.UTCTime)
+api_createdDate = Lens.lens (\Api' {createdDate} -> createdDate) (\s@Api' {} a -> s {createdDate = a} :: Api) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the API.
+api_description :: Lens.Lens' Api (Prelude.Maybe Prelude.Text)
+api_description = Lens.lens (\Api' {description} -> description) (\s@Api' {} a -> s {description = a} :: Api)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+api_disableExecuteApiEndpoint :: Lens.Lens' Api (Prelude.Maybe Prelude.Bool)
+api_disableExecuteApiEndpoint = Lens.lens (\Api' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@Api' {} a -> s {disableExecuteApiEndpoint = a} :: Api)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+api_disableSchemaValidation :: Lens.Lens' Api (Prelude.Maybe Prelude.Bool)
+api_disableSchemaValidation = Lens.lens (\Api' {disableSchemaValidation} -> disableSchemaValidation) (\s@Api' {} a -> s {disableSchemaValidation = a} :: Api)
+
+-- | The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+api_importInfo :: Lens.Lens' Api (Prelude.Maybe [Prelude.Text])
+api_importInfo = Lens.lens (\Api' {importInfo} -> importInfo) (\s@Api' {} a -> s {importInfo = a} :: Api) Prelude.. Lens.mapping Lens.coerced
+
+-- | A collection of tags associated with the API.
+api_tags :: Lens.Lens' Api (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+api_tags = Lens.lens (\Api' {tags} -> tags) (\s@Api' {} a -> s {tags = a} :: Api) Prelude.. Lens.mapping Lens.coerced
+
+-- | A version identifier for the API.
+api_version :: Lens.Lens' Api (Prelude.Maybe Prelude.Text)
+api_version = Lens.lens (\Api' {version} -> version) (\s@Api' {} a -> s {version = a} :: Api)
+
+-- | The warning messages reported when failonwarnings is turned on during
+-- API import.
+api_warnings :: Lens.Lens' Api (Prelude.Maybe [Prelude.Text])
+api_warnings = Lens.lens (\Api' {warnings} -> warnings) (\s@Api' {} a -> s {warnings = a} :: Api) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+api_routeSelectionExpression :: Lens.Lens' Api Prelude.Text
+api_routeSelectionExpression = Lens.lens (\Api' {routeSelectionExpression} -> routeSelectionExpression) (\s@Api' {} a -> s {routeSelectionExpression = a} :: Api)
+
+-- | The name of the API.
+api_name :: Lens.Lens' Api Prelude.Text
+api_name = Lens.lens (\Api' {name} -> name) (\s@Api' {} a -> s {name = a} :: Api)
+
+-- | The API protocol.
+api_protocolType :: Lens.Lens' Api ProtocolType
+api_protocolType = Lens.lens (\Api' {protocolType} -> protocolType) (\s@Api' {} a -> s {protocolType = a} :: Api)
+
+instance Data.FromJSON Api where
+  parseJSON =
+    Data.withObject
+      "Api"
+      ( \x ->
+          Api'
+            Prelude.<$> (x Data..:? "apiEndpoint")
+            Prelude.<*> (x Data..:? "apiGatewayManaged")
+            Prelude.<*> (x Data..:? "apiId")
+            Prelude.<*> (x Data..:? "apiKeySelectionExpression")
+            Prelude.<*> (x Data..:? "corsConfiguration")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "disableExecuteApiEndpoint")
+            Prelude.<*> (x Data..:? "disableSchemaValidation")
+            Prelude.<*> (x Data..:? "importInfo" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "version")
+            Prelude.<*> (x Data..:? "warnings" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "routeSelectionExpression")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "protocolType")
+      )
+
+instance Prelude.Hashable Api where
+  hashWithSalt _salt Api' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiEndpoint
+      `Prelude.hashWithSalt` apiGatewayManaged
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` apiKeySelectionExpression
+      `Prelude.hashWithSalt` corsConfiguration
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` disableExecuteApiEndpoint
+      `Prelude.hashWithSalt` disableSchemaValidation
+      `Prelude.hashWithSalt` importInfo
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` warnings
+      `Prelude.hashWithSalt` routeSelectionExpression
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` protocolType
+
+instance Prelude.NFData Api where
+  rnf Api' {..} =
+    Prelude.rnf apiEndpoint
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf importInfo
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf warnings
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf protocolType
diff --git a/gen/Amazonka/ApiGatewayV2/Types/ApiMapping.hs b/gen/Amazonka/ApiGatewayV2/Types/ApiMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/ApiMapping.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.Types.ApiMapping
+-- 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.ApiGatewayV2.Types.ApiMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an API mapping.
+--
+-- /See:/ 'newApiMapping' smart constructor.
+data ApiMapping = ApiMapping'
+  { -- | The API mapping identifier.
+    apiMappingId :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping key.
+    apiMappingKey :: Prelude.Maybe Prelude.Text,
+    -- | The API stage.
+    stage :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApiMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingId', 'apiMapping_apiMappingId' - The API mapping identifier.
+--
+-- 'apiMappingKey', 'apiMapping_apiMappingKey' - The API mapping key.
+--
+-- 'stage', 'apiMapping_stage' - The API stage.
+--
+-- 'apiId', 'apiMapping_apiId' - The API identifier.
+newApiMapping ::
+  -- | 'stage'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  ApiMapping
+newApiMapping pStage_ pApiId_ =
+  ApiMapping'
+    { apiMappingId = Prelude.Nothing,
+      apiMappingKey = Prelude.Nothing,
+      stage = pStage_,
+      apiId = pApiId_
+    }
+
+-- | The API mapping identifier.
+apiMapping_apiMappingId :: Lens.Lens' ApiMapping (Prelude.Maybe Prelude.Text)
+apiMapping_apiMappingId = Lens.lens (\ApiMapping' {apiMappingId} -> apiMappingId) (\s@ApiMapping' {} a -> s {apiMappingId = a} :: ApiMapping)
+
+-- | The API mapping key.
+apiMapping_apiMappingKey :: Lens.Lens' ApiMapping (Prelude.Maybe Prelude.Text)
+apiMapping_apiMappingKey = Lens.lens (\ApiMapping' {apiMappingKey} -> apiMappingKey) (\s@ApiMapping' {} a -> s {apiMappingKey = a} :: ApiMapping)
+
+-- | The API stage.
+apiMapping_stage :: Lens.Lens' ApiMapping Prelude.Text
+apiMapping_stage = Lens.lens (\ApiMapping' {stage} -> stage) (\s@ApiMapping' {} a -> s {stage = a} :: ApiMapping)
+
+-- | The API identifier.
+apiMapping_apiId :: Lens.Lens' ApiMapping Prelude.Text
+apiMapping_apiId = Lens.lens (\ApiMapping' {apiId} -> apiId) (\s@ApiMapping' {} a -> s {apiId = a} :: ApiMapping)
+
+instance Data.FromJSON ApiMapping where
+  parseJSON =
+    Data.withObject
+      "ApiMapping"
+      ( \x ->
+          ApiMapping'
+            Prelude.<$> (x Data..:? "apiMappingId")
+            Prelude.<*> (x Data..:? "apiMappingKey")
+            Prelude.<*> (x Data..: "stage")
+            Prelude.<*> (x Data..: "apiId")
+      )
+
+instance Prelude.Hashable ApiMapping where
+  hashWithSalt _salt ApiMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiMappingId
+      `Prelude.hashWithSalt` apiMappingKey
+      `Prelude.hashWithSalt` stage
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData ApiMapping where
+  rnf ApiMapping' {..} =
+    Prelude.rnf apiMappingId
+      `Prelude.seq` Prelude.rnf apiMappingKey
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf apiId
diff --git a/gen/Amazonka/ApiGatewayV2/Types/AuthorizationType.hs b/gen/Amazonka/ApiGatewayV2/Types/AuthorizationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/AuthorizationType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.Types.AuthorizationType
+-- 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.ApiGatewayV2.Types.AuthorizationType
+  ( AuthorizationType
+      ( ..,
+        AuthorizationType_AWS_IAM,
+        AuthorizationType_CUSTOM,
+        AuthorizationType_JWT,
+        AuthorizationType_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The authorization type. For WebSocket APIs, valid values are NONE for
+-- open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using
+-- a Lambda authorizer. For HTTP APIs, valid values are NONE for open
+-- access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM
+-- permissions, and CUSTOM for using a Lambda authorizer.
+newtype AuthorizationType = AuthorizationType'
+  { fromAuthorizationType ::
+      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 AuthorizationType_AWS_IAM :: AuthorizationType
+pattern AuthorizationType_AWS_IAM = AuthorizationType' "AWS_IAM"
+
+pattern AuthorizationType_CUSTOM :: AuthorizationType
+pattern AuthorizationType_CUSTOM = AuthorizationType' "CUSTOM"
+
+pattern AuthorizationType_JWT :: AuthorizationType
+pattern AuthorizationType_JWT = AuthorizationType' "JWT"
+
+pattern AuthorizationType_NONE :: AuthorizationType
+pattern AuthorizationType_NONE = AuthorizationType' "NONE"
+
+{-# COMPLETE
+  AuthorizationType_AWS_IAM,
+  AuthorizationType_CUSTOM,
+  AuthorizationType_JWT,
+  AuthorizationType_NONE,
+  AuthorizationType'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Authorizer.hs b/gen/Amazonka/ApiGatewayV2/Types/Authorizer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Authorizer.hs
@@ -0,0 +1,344 @@
+{-# 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.ApiGatewayV2.Types.Authorizer
+-- 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.ApiGatewayV2.Types.Authorizer where
+
+import Amazonka.ApiGatewayV2.Types.AuthorizerType
+import Amazonka.ApiGatewayV2.Types.JWTConfiguration
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an authorizer.
+--
+-- /See:/ 'newAuthorizer' smart constructor.
+data Authorizer = Authorizer'
+  { -- | Specifies the required credentials as an IAM role for API Gateway to
+    -- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To use resource-based
+    -- permissions on the Lambda function, don\'t specify this parameter.
+    -- Supported only for REQUEST authorizers.
+    authorizerCredentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The authorizer identifier.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format of the payload sent to an HTTP API Lambda
+    -- authorizer. Required for HTTP API Lambda authorizers. Supported values
+    -- are 1.0 and 2.0. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    authorizerPayloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time to live (TTL) for cached authorizer results, in seconds. If it
+    -- equals 0, authorization caching is disabled. If it is greater than 0,
+    -- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+    -- hour. Supported only for HTTP API Lambda authorizers.
+    authorizerResultTtlInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The authorizer type. Specify REQUEST for a Lambda function using
+    -- incoming request parameters. Specify JWT to use JSON Web Tokens
+    -- (supported only for HTTP APIs).
+    authorizerType :: Prelude.Maybe AuthorizerType,
+    -- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+    -- authorizers, this must be a well-formed Lambda function URI, for
+    -- example,
+    -- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+    -- In general, the URI has this form:
+    -- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+    -- is the same as the region hosting the Lambda function, path indicates
+    -- that the remaining substring in the URI should be treated as the path to
+    -- the resource, including the initial \/. For Lambda functions, this is
+    -- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+    -- Supported only for REQUEST authorizers.
+    authorizerUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether a Lambda authorizer returns a response in a simple
+    -- format. If enabled, the Lambda authorizer can return a boolean value
+    -- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+    -- see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+    enableSimpleResponses :: Prelude.Maybe Prelude.Bool,
+    -- | The identity source for which authorization is requested.
+    --
+    -- For a REQUEST authorizer, this is optional. The value is a set of one or
+    -- more mapping expressions of the specified request parameters. The
+    -- identity source can be headers, query string parameters, stage
+    -- variables, and context parameters. For example, if an Auth header and a
+    -- Name query string parameter are defined as identity sources, this value
+    -- is route.request.header.Auth, route.request.querystring.Name for
+    -- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+    -- \$, for example, $request.header.Auth, $request.querystring.Name. These
+    -- parameters are used to perform runtime validation for Lambda-based
+    -- authorizers by verifying all of the identity-related request parameters
+    -- are present in the request, not null, and non-empty. Only when this is
+    -- true does the authorizer invoke the authorizer Lambda function.
+    -- Otherwise, it returns a 401 Unauthorized response without calling the
+    -- Lambda function. For HTTP APIs, identity sources are also used as the
+    -- cache key when caching is enabled. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    --
+    -- For JWT, a single entry that specifies where to extract the JSON Web
+    -- Token (JWT) from inbound requests. Currently only header-based and query
+    -- parameter-based selections are supported, for example
+    -- \$request.header.Authorization.
+    identitySource :: Prelude.Maybe [Prelude.Text],
+    -- | The validation expression does not apply to the REQUEST authorizer.
+    identityValidationExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the configuration of a JWT authorizer. Required for the JWT
+    -- authorizer type. Supported only for HTTP APIs.
+    jwtConfiguration :: Prelude.Maybe JWTConfiguration,
+    -- | The name of the authorizer.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Authorizer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerCredentialsArn', 'authorizer_authorizerCredentialsArn' - Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+--
+-- 'authorizerId', 'authorizer_authorizerId' - The authorizer identifier.
+--
+-- 'authorizerPayloadFormatVersion', 'authorizer_authorizerPayloadFormatVersion' - Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- 'authorizerResultTtlInSeconds', 'authorizer_authorizerResultTtlInSeconds' - The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+--
+-- 'authorizerType', 'authorizer_authorizerType' - The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+--
+-- 'authorizerUri', 'authorizer_authorizerUri' - The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+--
+-- 'enableSimpleResponses', 'authorizer_enableSimpleResponses' - Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+--
+-- 'identitySource', 'authorizer_identitySource' - The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+--
+-- 'identityValidationExpression', 'authorizer_identityValidationExpression' - The validation expression does not apply to the REQUEST authorizer.
+--
+-- 'jwtConfiguration', 'authorizer_jwtConfiguration' - Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+--
+-- 'name', 'authorizer_name' - The name of the authorizer.
+newAuthorizer ::
+  -- | 'name'
+  Prelude.Text ->
+  Authorizer
+newAuthorizer pName_ =
+  Authorizer'
+    { authorizerCredentialsArn =
+        Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      authorizerPayloadFormatVersion = Prelude.Nothing,
+      authorizerResultTtlInSeconds = Prelude.Nothing,
+      authorizerType = Prelude.Nothing,
+      authorizerUri = Prelude.Nothing,
+      enableSimpleResponses = Prelude.Nothing,
+      identitySource = Prelude.Nothing,
+      identityValidationExpression = Prelude.Nothing,
+      jwtConfiguration = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+authorizer_authorizerCredentialsArn :: Lens.Lens' Authorizer (Prelude.Maybe Prelude.Text)
+authorizer_authorizerCredentialsArn = Lens.lens (\Authorizer' {authorizerCredentialsArn} -> authorizerCredentialsArn) (\s@Authorizer' {} a -> s {authorizerCredentialsArn = a} :: Authorizer)
+
+-- | The authorizer identifier.
+authorizer_authorizerId :: Lens.Lens' Authorizer (Prelude.Maybe Prelude.Text)
+authorizer_authorizerId = Lens.lens (\Authorizer' {authorizerId} -> authorizerId) (\s@Authorizer' {} a -> s {authorizerId = a} :: Authorizer)
+
+-- | Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+authorizer_authorizerPayloadFormatVersion :: Lens.Lens' Authorizer (Prelude.Maybe Prelude.Text)
+authorizer_authorizerPayloadFormatVersion = Lens.lens (\Authorizer' {authorizerPayloadFormatVersion} -> authorizerPayloadFormatVersion) (\s@Authorizer' {} a -> s {authorizerPayloadFormatVersion = a} :: Authorizer)
+
+-- | The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+authorizer_authorizerResultTtlInSeconds :: Lens.Lens' Authorizer (Prelude.Maybe Prelude.Natural)
+authorizer_authorizerResultTtlInSeconds = Lens.lens (\Authorizer' {authorizerResultTtlInSeconds} -> authorizerResultTtlInSeconds) (\s@Authorizer' {} a -> s {authorizerResultTtlInSeconds = a} :: Authorizer)
+
+-- | The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+authorizer_authorizerType :: Lens.Lens' Authorizer (Prelude.Maybe AuthorizerType)
+authorizer_authorizerType = Lens.lens (\Authorizer' {authorizerType} -> authorizerType) (\s@Authorizer' {} a -> s {authorizerType = a} :: Authorizer)
+
+-- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+authorizer_authorizerUri :: Lens.Lens' Authorizer (Prelude.Maybe Prelude.Text)
+authorizer_authorizerUri = Lens.lens (\Authorizer' {authorizerUri} -> authorizerUri) (\s@Authorizer' {} a -> s {authorizerUri = a} :: Authorizer)
+
+-- | Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+authorizer_enableSimpleResponses :: Lens.Lens' Authorizer (Prelude.Maybe Prelude.Bool)
+authorizer_enableSimpleResponses = Lens.lens (\Authorizer' {enableSimpleResponses} -> enableSimpleResponses) (\s@Authorizer' {} a -> s {enableSimpleResponses = a} :: Authorizer)
+
+-- | The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+authorizer_identitySource :: Lens.Lens' Authorizer (Prelude.Maybe [Prelude.Text])
+authorizer_identitySource = Lens.lens (\Authorizer' {identitySource} -> identitySource) (\s@Authorizer' {} a -> s {identitySource = a} :: Authorizer) Prelude.. Lens.mapping Lens.coerced
+
+-- | The validation expression does not apply to the REQUEST authorizer.
+authorizer_identityValidationExpression :: Lens.Lens' Authorizer (Prelude.Maybe Prelude.Text)
+authorizer_identityValidationExpression = Lens.lens (\Authorizer' {identityValidationExpression} -> identityValidationExpression) (\s@Authorizer' {} a -> s {identityValidationExpression = a} :: Authorizer)
+
+-- | Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+authorizer_jwtConfiguration :: Lens.Lens' Authorizer (Prelude.Maybe JWTConfiguration)
+authorizer_jwtConfiguration = Lens.lens (\Authorizer' {jwtConfiguration} -> jwtConfiguration) (\s@Authorizer' {} a -> s {jwtConfiguration = a} :: Authorizer)
+
+-- | The name of the authorizer.
+authorizer_name :: Lens.Lens' Authorizer Prelude.Text
+authorizer_name = Lens.lens (\Authorizer' {name} -> name) (\s@Authorizer' {} a -> s {name = a} :: Authorizer)
+
+instance Data.FromJSON Authorizer where
+  parseJSON =
+    Data.withObject
+      "Authorizer"
+      ( \x ->
+          Authorizer'
+            Prelude.<$> (x Data..:? "authorizerCredentialsArn")
+            Prelude.<*> (x Data..:? "authorizerId")
+            Prelude.<*> (x Data..:? "authorizerPayloadFormatVersion")
+            Prelude.<*> (x Data..:? "authorizerResultTtlInSeconds")
+            Prelude.<*> (x Data..:? "authorizerType")
+            Prelude.<*> (x Data..:? "authorizerUri")
+            Prelude.<*> (x Data..:? "enableSimpleResponses")
+            Prelude.<*> (x Data..:? "identitySource" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "identityValidationExpression")
+            Prelude.<*> (x Data..:? "jwtConfiguration")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable Authorizer where
+  hashWithSalt _salt Authorizer' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorizerCredentialsArn
+      `Prelude.hashWithSalt` authorizerId
+      `Prelude.hashWithSalt` authorizerPayloadFormatVersion
+      `Prelude.hashWithSalt` authorizerResultTtlInSeconds
+      `Prelude.hashWithSalt` authorizerType
+      `Prelude.hashWithSalt` authorizerUri
+      `Prelude.hashWithSalt` enableSimpleResponses
+      `Prelude.hashWithSalt` identitySource
+      `Prelude.hashWithSalt` identityValidationExpression
+      `Prelude.hashWithSalt` jwtConfiguration
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Authorizer where
+  rnf Authorizer' {..} =
+    Prelude.rnf authorizerCredentialsArn
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf authorizerPayloadFormatVersion
+      `Prelude.seq` Prelude.rnf authorizerResultTtlInSeconds
+      `Prelude.seq` Prelude.rnf authorizerType
+      `Prelude.seq` Prelude.rnf authorizerUri
+      `Prelude.seq` Prelude.rnf enableSimpleResponses
+      `Prelude.seq` Prelude.rnf identitySource
+      `Prelude.seq` Prelude.rnf identityValidationExpression
+      `Prelude.seq` Prelude.rnf jwtConfiguration
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ApiGatewayV2/Types/AuthorizerType.hs b/gen/Amazonka/ApiGatewayV2/Types/AuthorizerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/AuthorizerType.hs
@@ -0,0 +1,74 @@
+{-# 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.ApiGatewayV2.Types.AuthorizerType
+-- 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.ApiGatewayV2.Types.AuthorizerType
+  ( AuthorizerType
+      ( ..,
+        AuthorizerType_JWT,
+        AuthorizerType_REQUEST
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+newtype AuthorizerType = AuthorizerType'
+  { fromAuthorizerType ::
+      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 AuthorizerType_JWT :: AuthorizerType
+pattern AuthorizerType_JWT = AuthorizerType' "JWT"
+
+pattern AuthorizerType_REQUEST :: AuthorizerType
+pattern AuthorizerType_REQUEST = AuthorizerType' "REQUEST"
+
+{-# COMPLETE
+  AuthorizerType_JWT,
+  AuthorizerType_REQUEST,
+  AuthorizerType'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/ConnectionType.hs b/gen/Amazonka/ApiGatewayV2/Types/ConnectionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/ConnectionType.hs
@@ -0,0 +1,72 @@
+{-# 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.ApiGatewayV2.Types.ConnectionType
+-- 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.ApiGatewayV2.Types.ConnectionType
+  ( ConnectionType
+      ( ..,
+        ConnectionType_INTERNET,
+        ConnectionType_VPC_LINK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a connection type.
+newtype ConnectionType = ConnectionType'
+  { fromConnectionType ::
+      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 ConnectionType_INTERNET :: ConnectionType
+pattern ConnectionType_INTERNET = ConnectionType' "INTERNET"
+
+pattern ConnectionType_VPC_LINK :: ConnectionType
+pattern ConnectionType_VPC_LINK = ConnectionType' "VPC_LINK"
+
+{-# COMPLETE
+  ConnectionType_INTERNET,
+  ConnectionType_VPC_LINK,
+  ConnectionType'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/ContentHandlingStrategy.hs b/gen/Amazonka/ApiGatewayV2/Types/ContentHandlingStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/ContentHandlingStrategy.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.ApiGatewayV2.Types.ContentHandlingStrategy
+-- 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.ApiGatewayV2.Types.ContentHandlingStrategy
+  ( ContentHandlingStrategy
+      ( ..,
+        ContentHandlingStrategy_CONVERT_TO_BINARY,
+        ContentHandlingStrategy_CONVERT_TO_TEXT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies how to handle response payload content type conversions.
+-- Supported only for WebSocket APIs.
+newtype ContentHandlingStrategy = ContentHandlingStrategy'
+  { fromContentHandlingStrategy ::
+      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 ContentHandlingStrategy_CONVERT_TO_BINARY :: ContentHandlingStrategy
+pattern ContentHandlingStrategy_CONVERT_TO_BINARY = ContentHandlingStrategy' "CONVERT_TO_BINARY"
+
+pattern ContentHandlingStrategy_CONVERT_TO_TEXT :: ContentHandlingStrategy
+pattern ContentHandlingStrategy_CONVERT_TO_TEXT = ContentHandlingStrategy' "CONVERT_TO_TEXT"
+
+{-# COMPLETE
+  ContentHandlingStrategy_CONVERT_TO_BINARY,
+  ContentHandlingStrategy_CONVERT_TO_TEXT,
+  ContentHandlingStrategy'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Cors.hs b/gen/Amazonka/ApiGatewayV2/Types/Cors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Cors.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.ApiGatewayV2.Types.Cors
+-- 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.ApiGatewayV2.Types.Cors where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a CORS configuration. Supported only for HTTP APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html Configuring CORS>
+-- for more information.
+--
+-- /See:/ 'newCors' smart constructor.
+data Cors = Cors'
+  { -- | Specifies whether credentials are included in the CORS request.
+    -- Supported only for HTTP APIs.
+    allowCredentials :: Prelude.Maybe Prelude.Bool,
+    -- | Represents a collection of allowed headers. Supported only for HTTP
+    -- APIs.
+    allowHeaders :: Prelude.Maybe [Prelude.Text],
+    -- | Represents a collection of allowed HTTP methods. Supported only for HTTP
+    -- APIs.
+    allowMethods :: Prelude.Maybe [Prelude.Text],
+    -- | Represents a collection of allowed origins. Supported only for HTTP
+    -- APIs.
+    allowOrigins :: Prelude.Maybe [Prelude.Text],
+    -- | Represents a collection of exposed headers. Supported only for HTTP
+    -- APIs.
+    exposeHeaders :: Prelude.Maybe [Prelude.Text],
+    -- | The number of seconds that the browser should cache preflight request
+    -- results. Supported only for HTTP APIs.
+    maxAge :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Cors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowCredentials', 'cors_allowCredentials' - Specifies whether credentials are included in the CORS request.
+-- Supported only for HTTP APIs.
+--
+-- 'allowHeaders', 'cors_allowHeaders' - Represents a collection of allowed headers. Supported only for HTTP
+-- APIs.
+--
+-- 'allowMethods', 'cors_allowMethods' - Represents a collection of allowed HTTP methods. Supported only for HTTP
+-- APIs.
+--
+-- 'allowOrigins', 'cors_allowOrigins' - Represents a collection of allowed origins. Supported only for HTTP
+-- APIs.
+--
+-- 'exposeHeaders', 'cors_exposeHeaders' - Represents a collection of exposed headers. Supported only for HTTP
+-- APIs.
+--
+-- 'maxAge', 'cors_maxAge' - The number of seconds that the browser should cache preflight request
+-- results. Supported only for HTTP APIs.
+newCors ::
+  Cors
+newCors =
+  Cors'
+    { allowCredentials = Prelude.Nothing,
+      allowHeaders = Prelude.Nothing,
+      allowMethods = Prelude.Nothing,
+      allowOrigins = Prelude.Nothing,
+      exposeHeaders = Prelude.Nothing,
+      maxAge = Prelude.Nothing
+    }
+
+-- | Specifies whether credentials are included in the CORS request.
+-- Supported only for HTTP APIs.
+cors_allowCredentials :: Lens.Lens' Cors (Prelude.Maybe Prelude.Bool)
+cors_allowCredentials = Lens.lens (\Cors' {allowCredentials} -> allowCredentials) (\s@Cors' {} a -> s {allowCredentials = a} :: Cors)
+
+-- | Represents a collection of allowed headers. Supported only for HTTP
+-- APIs.
+cors_allowHeaders :: Lens.Lens' Cors (Prelude.Maybe [Prelude.Text])
+cors_allowHeaders = Lens.lens (\Cors' {allowHeaders} -> allowHeaders) (\s@Cors' {} a -> s {allowHeaders = a} :: Cors) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a collection of allowed HTTP methods. Supported only for HTTP
+-- APIs.
+cors_allowMethods :: Lens.Lens' Cors (Prelude.Maybe [Prelude.Text])
+cors_allowMethods = Lens.lens (\Cors' {allowMethods} -> allowMethods) (\s@Cors' {} a -> s {allowMethods = a} :: Cors) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a collection of allowed origins. Supported only for HTTP
+-- APIs.
+cors_allowOrigins :: Lens.Lens' Cors (Prelude.Maybe [Prelude.Text])
+cors_allowOrigins = Lens.lens (\Cors' {allowOrigins} -> allowOrigins) (\s@Cors' {} a -> s {allowOrigins = a} :: Cors) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a collection of exposed headers. Supported only for HTTP
+-- APIs.
+cors_exposeHeaders :: Lens.Lens' Cors (Prelude.Maybe [Prelude.Text])
+cors_exposeHeaders = Lens.lens (\Cors' {exposeHeaders} -> exposeHeaders) (\s@Cors' {} a -> s {exposeHeaders = a} :: Cors) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of seconds that the browser should cache preflight request
+-- results. Supported only for HTTP APIs.
+cors_maxAge :: Lens.Lens' Cors (Prelude.Maybe Prelude.Int)
+cors_maxAge = Lens.lens (\Cors' {maxAge} -> maxAge) (\s@Cors' {} a -> s {maxAge = a} :: Cors)
+
+instance Data.FromJSON Cors where
+  parseJSON =
+    Data.withObject
+      "Cors"
+      ( \x ->
+          Cors'
+            Prelude.<$> (x Data..:? "allowCredentials")
+            Prelude.<*> (x Data..:? "allowHeaders" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "allowMethods" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "allowOrigins" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "exposeHeaders" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "maxAge")
+      )
+
+instance Prelude.Hashable Cors where
+  hashWithSalt _salt Cors' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowCredentials
+      `Prelude.hashWithSalt` allowHeaders
+      `Prelude.hashWithSalt` allowMethods
+      `Prelude.hashWithSalt` allowOrigins
+      `Prelude.hashWithSalt` exposeHeaders
+      `Prelude.hashWithSalt` maxAge
+
+instance Prelude.NFData Cors where
+  rnf Cors' {..} =
+    Prelude.rnf allowCredentials
+      `Prelude.seq` Prelude.rnf allowHeaders
+      `Prelude.seq` Prelude.rnf allowMethods
+      `Prelude.seq` Prelude.rnf allowOrigins
+      `Prelude.seq` Prelude.rnf exposeHeaders
+      `Prelude.seq` Prelude.rnf maxAge
+
+instance Data.ToJSON Cors where
+  toJSON Cors' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowCredentials" Data..=)
+              Prelude.<$> allowCredentials,
+            ("allowHeaders" Data..=) Prelude.<$> allowHeaders,
+            ("allowMethods" Data..=) Prelude.<$> allowMethods,
+            ("allowOrigins" Data..=) Prelude.<$> allowOrigins,
+            ("exposeHeaders" Data..=) Prelude.<$> exposeHeaders,
+            ("maxAge" Data..=) Prelude.<$> maxAge
+          ]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Deployment.hs b/gen/Amazonka/ApiGatewayV2/Types/Deployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Deployment.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.ApiGatewayV2.Types.Deployment
+-- 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.ApiGatewayV2.Types.Deployment where
+
+import Amazonka.ApiGatewayV2.Types.DeploymentStatus
+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 immutable representation of an API that can be called by users. A
+-- Deployment must be associated with a Stage for it to be callable over
+-- the internet.
+--
+-- /See:/ 'newDeployment' smart constructor.
+data Deployment = Deployment'
+  { -- | Specifies whether a deployment was automatically released.
+    autoDeployed :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time when the Deployment resource was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier for the deployment.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+    deploymentStatus :: Prelude.Maybe DeploymentStatus,
+    -- | May contain additional feedback on the status of an API deployment.
+    deploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The description for the deployment.
+    description :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Deployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoDeployed', 'deployment_autoDeployed' - Specifies whether a deployment was automatically released.
+--
+-- 'createdDate', 'deployment_createdDate' - The date and time when the Deployment resource was created.
+--
+-- 'deploymentId', 'deployment_deploymentId' - The identifier for the deployment.
+--
+-- 'deploymentStatus', 'deployment_deploymentStatus' - The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+--
+-- 'deploymentStatusMessage', 'deployment_deploymentStatusMessage' - May contain additional feedback on the status of an API deployment.
+--
+-- 'description', 'deployment_description' - The description for the deployment.
+newDeployment ::
+  Deployment
+newDeployment =
+  Deployment'
+    { autoDeployed = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      deploymentStatus = Prelude.Nothing,
+      deploymentStatusMessage = Prelude.Nothing,
+      description = Prelude.Nothing
+    }
+
+-- | Specifies whether a deployment was automatically released.
+deployment_autoDeployed :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Bool)
+deployment_autoDeployed = Lens.lens (\Deployment' {autoDeployed} -> autoDeployed) (\s@Deployment' {} a -> s {autoDeployed = a} :: Deployment)
+
+-- | The date and time when the Deployment resource was created.
+deployment_createdDate :: Lens.Lens' Deployment (Prelude.Maybe Prelude.UTCTime)
+deployment_createdDate = Lens.lens (\Deployment' {createdDate} -> createdDate) (\s@Deployment' {} a -> s {createdDate = a} :: Deployment) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier for the deployment.
+deployment_deploymentId :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_deploymentId = Lens.lens (\Deployment' {deploymentId} -> deploymentId) (\s@Deployment' {} a -> s {deploymentId = a} :: Deployment)
+
+-- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+deployment_deploymentStatus :: Lens.Lens' Deployment (Prelude.Maybe DeploymentStatus)
+deployment_deploymentStatus = Lens.lens (\Deployment' {deploymentStatus} -> deploymentStatus) (\s@Deployment' {} a -> s {deploymentStatus = a} :: Deployment)
+
+-- | May contain additional feedback on the status of an API deployment.
+deployment_deploymentStatusMessage :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_deploymentStatusMessage = Lens.lens (\Deployment' {deploymentStatusMessage} -> deploymentStatusMessage) (\s@Deployment' {} a -> s {deploymentStatusMessage = a} :: Deployment)
+
+-- | The description for the deployment.
+deployment_description :: Lens.Lens' Deployment (Prelude.Maybe Prelude.Text)
+deployment_description = Lens.lens (\Deployment' {description} -> description) (\s@Deployment' {} a -> s {description = a} :: Deployment)
+
+instance Data.FromJSON Deployment where
+  parseJSON =
+    Data.withObject
+      "Deployment"
+      ( \x ->
+          Deployment'
+            Prelude.<$> (x Data..:? "autoDeployed")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "deploymentId")
+            Prelude.<*> (x Data..:? "deploymentStatus")
+            Prelude.<*> (x Data..:? "deploymentStatusMessage")
+            Prelude.<*> (x Data..:? "description")
+      )
+
+instance Prelude.Hashable Deployment where
+  hashWithSalt _salt Deployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoDeployed
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` deploymentStatus
+      `Prelude.hashWithSalt` deploymentStatusMessage
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData Deployment where
+  rnf Deployment' {..} =
+    Prelude.rnf autoDeployed
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf deploymentStatus
+      `Prelude.seq` Prelude.rnf deploymentStatusMessage
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/ApiGatewayV2/Types/DeploymentStatus.hs b/gen/Amazonka/ApiGatewayV2/Types/DeploymentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/DeploymentStatus.hs
@@ -0,0 +1,77 @@
+{-# 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.ApiGatewayV2.Types.DeploymentStatus
+-- 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.ApiGatewayV2.Types.DeploymentStatus
+  ( DeploymentStatus
+      ( ..,
+        DeploymentStatus_DEPLOYED,
+        DeploymentStatus_FAILED,
+        DeploymentStatus_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a deployment status.
+newtype DeploymentStatus = DeploymentStatus'
+  { fromDeploymentStatus ::
+      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 DeploymentStatus_DEPLOYED :: DeploymentStatus
+pattern DeploymentStatus_DEPLOYED = DeploymentStatus' "DEPLOYED"
+
+pattern DeploymentStatus_FAILED :: DeploymentStatus
+pattern DeploymentStatus_FAILED = DeploymentStatus' "FAILED"
+
+pattern DeploymentStatus_PENDING :: DeploymentStatus
+pattern DeploymentStatus_PENDING = DeploymentStatus' "PENDING"
+
+{-# COMPLETE
+  DeploymentStatus_DEPLOYED,
+  DeploymentStatus_FAILED,
+  DeploymentStatus_PENDING,
+  DeploymentStatus'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/DomainName.hs b/gen/Amazonka/ApiGatewayV2/Types/DomainName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/DomainName.hs
@@ -0,0 +1,128 @@
+{-# 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.ApiGatewayV2.Types.DomainName
+-- 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.ApiGatewayV2.Types.DomainName where
+
+import Amazonka.ApiGatewayV2.Types.DomainNameConfiguration
+import Amazonka.ApiGatewayV2.Types.MutualTlsAuthentication
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a domain name.
+--
+-- /See:/ 'newDomainName' smart constructor.
+data DomainName = DomainName'
+  { -- | The API mapping selection expression.
+    apiMappingSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The domain name configurations.
+    domainNameConfigurations :: Prelude.Maybe [DomainNameConfiguration],
+    -- | The mutual TLS authentication configuration for a custom domain name.
+    mutualTlsAuthentication :: Prelude.Maybe MutualTlsAuthentication,
+    -- | The collection of tags associated with a domain name.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the DomainName resource.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainName' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingSelectionExpression', 'domainName_apiMappingSelectionExpression' - The API mapping selection expression.
+--
+-- 'domainNameConfigurations', 'domainName_domainNameConfigurations' - The domain name configurations.
+--
+-- 'mutualTlsAuthentication', 'domainName_mutualTlsAuthentication' - The mutual TLS authentication configuration for a custom domain name.
+--
+-- 'tags', 'domainName_tags' - The collection of tags associated with a domain name.
+--
+-- 'domainName', 'domainName_domainName' - The name of the DomainName resource.
+newDomainName ::
+  -- | 'domainName'
+  Prelude.Text ->
+  DomainName
+newDomainName pDomainName_ =
+  DomainName'
+    { apiMappingSelectionExpression =
+        Prelude.Nothing,
+      domainNameConfigurations = Prelude.Nothing,
+      mutualTlsAuthentication = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The API mapping selection expression.
+domainName_apiMappingSelectionExpression :: Lens.Lens' DomainName (Prelude.Maybe Prelude.Text)
+domainName_apiMappingSelectionExpression = Lens.lens (\DomainName' {apiMappingSelectionExpression} -> apiMappingSelectionExpression) (\s@DomainName' {} a -> s {apiMappingSelectionExpression = a} :: DomainName)
+
+-- | The domain name configurations.
+domainName_domainNameConfigurations :: Lens.Lens' DomainName (Prelude.Maybe [DomainNameConfiguration])
+domainName_domainNameConfigurations = Lens.lens (\DomainName' {domainNameConfigurations} -> domainNameConfigurations) (\s@DomainName' {} a -> s {domainNameConfigurations = a} :: DomainName) Prelude.. Lens.mapping Lens.coerced
+
+-- | The mutual TLS authentication configuration for a custom domain name.
+domainName_mutualTlsAuthentication :: Lens.Lens' DomainName (Prelude.Maybe MutualTlsAuthentication)
+domainName_mutualTlsAuthentication = Lens.lens (\DomainName' {mutualTlsAuthentication} -> mutualTlsAuthentication) (\s@DomainName' {} a -> s {mutualTlsAuthentication = a} :: DomainName)
+
+-- | The collection of tags associated with a domain name.
+domainName_tags :: Lens.Lens' DomainName (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+domainName_tags = Lens.lens (\DomainName' {tags} -> tags) (\s@DomainName' {} a -> s {tags = a} :: DomainName) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the DomainName resource.
+domainName_domainName :: Lens.Lens' DomainName Prelude.Text
+domainName_domainName = Lens.lens (\DomainName' {domainName} -> domainName) (\s@DomainName' {} a -> s {domainName = a} :: DomainName)
+
+instance Data.FromJSON DomainName where
+  parseJSON =
+    Data.withObject
+      "DomainName"
+      ( \x ->
+          DomainName'
+            Prelude.<$> (x Data..:? "apiMappingSelectionExpression")
+            Prelude.<*> ( x
+                            Data..:? "domainNameConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "mutualTlsAuthentication")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "domainName")
+      )
+
+instance Prelude.Hashable DomainName where
+  hashWithSalt _salt DomainName' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiMappingSelectionExpression
+      `Prelude.hashWithSalt` domainNameConfigurations
+      `Prelude.hashWithSalt` mutualTlsAuthentication
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DomainName where
+  rnf DomainName' {..} =
+    Prelude.rnf apiMappingSelectionExpression
+      `Prelude.seq` Prelude.rnf domainNameConfigurations
+      `Prelude.seq` Prelude.rnf mutualTlsAuthentication
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf domainName
diff --git a/gen/Amazonka/ApiGatewayV2/Types/DomainNameConfiguration.hs b/gen/Amazonka/ApiGatewayV2/Types/DomainNameConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/DomainNameConfiguration.hs
@@ -0,0 +1,249 @@
+{-# 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.ApiGatewayV2.Types.DomainNameConfiguration
+-- 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.ApiGatewayV2.Types.DomainNameConfiguration where
+
+import Amazonka.ApiGatewayV2.Types.DomainNameStatus
+import Amazonka.ApiGatewayV2.Types.EndpointType
+import Amazonka.ApiGatewayV2.Types.SecurityPolicy
+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 domain name configuration.
+--
+-- /See:/ 'newDomainNameConfiguration' smart constructor.
+data DomainNameConfiguration = DomainNameConfiguration'
+  { -- | A domain name for the API.
+    apiGatewayDomainName :: Prelude.Maybe Prelude.Text,
+    -- | An AWS-managed certificate that will be used by the edge-optimized
+    -- endpoint for this domain name. AWS Certificate Manager is the only
+    -- supported source.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | The user-friendly name of the certificate that will be used by the
+    -- edge-optimized endpoint for this domain name.
+    certificateName :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the certificate that was used by edge-optimized
+    -- endpoint for this domain name was uploaded.
+    certificateUploadDate :: Prelude.Maybe Data.ISO8601,
+    -- | The status of the domain name migration. The valid values are AVAILABLE,
+    -- UPDATING, PENDING_CERTIFICATE_REIMPORT, and
+    -- PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain
+    -- cannot be modified further until the existing operation is complete. If
+    -- it is AVAILABLE, the domain can be updated.
+    domainNameStatus :: Prelude.Maybe DomainNameStatus,
+    -- | An optional text message containing detailed information about status of
+    -- the domain name migration.
+    domainNameStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint type.
+    endpointType :: Prelude.Maybe EndpointType,
+    -- | The Amazon Route 53 Hosted Zone ID of the endpoint.
+    hostedZoneId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the public certificate issued by ACM to validate ownership of
+    -- your custom domain. Only required when configuring mutual TLS and using
+    -- an ACM imported or private CA certificate ARN as the
+    -- regionalCertificateArn
+    ownershipVerificationCertificateArn :: Prelude.Maybe Prelude.Text,
+    -- | The Transport Layer Security (TLS) version of the security policy for
+    -- this domain name. The valid values are TLS_1_0 and TLS_1_2.
+    securityPolicy :: Prelude.Maybe SecurityPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainNameConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayDomainName', 'domainNameConfiguration_apiGatewayDomainName' - A domain name for the API.
+--
+-- 'certificateArn', 'domainNameConfiguration_certificateArn' - An AWS-managed certificate that will be used by the edge-optimized
+-- endpoint for this domain name. AWS Certificate Manager is the only
+-- supported source.
+--
+-- 'certificateName', 'domainNameConfiguration_certificateName' - The user-friendly name of the certificate that will be used by the
+-- edge-optimized endpoint for this domain name.
+--
+-- 'certificateUploadDate', 'domainNameConfiguration_certificateUploadDate' - The timestamp when the certificate that was used by edge-optimized
+-- endpoint for this domain name was uploaded.
+--
+-- 'domainNameStatus', 'domainNameConfiguration_domainNameStatus' - The status of the domain name migration. The valid values are AVAILABLE,
+-- UPDATING, PENDING_CERTIFICATE_REIMPORT, and
+-- PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain
+-- cannot be modified further until the existing operation is complete. If
+-- it is AVAILABLE, the domain can be updated.
+--
+-- 'domainNameStatusMessage', 'domainNameConfiguration_domainNameStatusMessage' - An optional text message containing detailed information about status of
+-- the domain name migration.
+--
+-- 'endpointType', 'domainNameConfiguration_endpointType' - The endpoint type.
+--
+-- 'hostedZoneId', 'domainNameConfiguration_hostedZoneId' - The Amazon Route 53 Hosted Zone ID of the endpoint.
+--
+-- 'ownershipVerificationCertificateArn', 'domainNameConfiguration_ownershipVerificationCertificateArn' - The ARN of the public certificate issued by ACM to validate ownership of
+-- your custom domain. Only required when configuring mutual TLS and using
+-- an ACM imported or private CA certificate ARN as the
+-- regionalCertificateArn
+--
+-- 'securityPolicy', 'domainNameConfiguration_securityPolicy' - The Transport Layer Security (TLS) version of the security policy for
+-- this domain name. The valid values are TLS_1_0 and TLS_1_2.
+newDomainNameConfiguration ::
+  DomainNameConfiguration
+newDomainNameConfiguration =
+  DomainNameConfiguration'
+    { apiGatewayDomainName =
+        Prelude.Nothing,
+      certificateArn = Prelude.Nothing,
+      certificateName = Prelude.Nothing,
+      certificateUploadDate = Prelude.Nothing,
+      domainNameStatus = Prelude.Nothing,
+      domainNameStatusMessage = Prelude.Nothing,
+      endpointType = Prelude.Nothing,
+      hostedZoneId = Prelude.Nothing,
+      ownershipVerificationCertificateArn =
+        Prelude.Nothing,
+      securityPolicy = Prelude.Nothing
+    }
+
+-- | A domain name for the API.
+domainNameConfiguration_apiGatewayDomainName :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe Prelude.Text)
+domainNameConfiguration_apiGatewayDomainName = Lens.lens (\DomainNameConfiguration' {apiGatewayDomainName} -> apiGatewayDomainName) (\s@DomainNameConfiguration' {} a -> s {apiGatewayDomainName = a} :: DomainNameConfiguration)
+
+-- | An AWS-managed certificate that will be used by the edge-optimized
+-- endpoint for this domain name. AWS Certificate Manager is the only
+-- supported source.
+domainNameConfiguration_certificateArn :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe Prelude.Text)
+domainNameConfiguration_certificateArn = Lens.lens (\DomainNameConfiguration' {certificateArn} -> certificateArn) (\s@DomainNameConfiguration' {} a -> s {certificateArn = a} :: DomainNameConfiguration)
+
+-- | The user-friendly name of the certificate that will be used by the
+-- edge-optimized endpoint for this domain name.
+domainNameConfiguration_certificateName :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe Prelude.Text)
+domainNameConfiguration_certificateName = Lens.lens (\DomainNameConfiguration' {certificateName} -> certificateName) (\s@DomainNameConfiguration' {} a -> s {certificateName = a} :: DomainNameConfiguration)
+
+-- | The timestamp when the certificate that was used by edge-optimized
+-- endpoint for this domain name was uploaded.
+domainNameConfiguration_certificateUploadDate :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe Prelude.UTCTime)
+domainNameConfiguration_certificateUploadDate = Lens.lens (\DomainNameConfiguration' {certificateUploadDate} -> certificateUploadDate) (\s@DomainNameConfiguration' {} a -> s {certificateUploadDate = a} :: DomainNameConfiguration) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the domain name migration. The valid values are AVAILABLE,
+-- UPDATING, PENDING_CERTIFICATE_REIMPORT, and
+-- PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain
+-- cannot be modified further until the existing operation is complete. If
+-- it is AVAILABLE, the domain can be updated.
+domainNameConfiguration_domainNameStatus :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe DomainNameStatus)
+domainNameConfiguration_domainNameStatus = Lens.lens (\DomainNameConfiguration' {domainNameStatus} -> domainNameStatus) (\s@DomainNameConfiguration' {} a -> s {domainNameStatus = a} :: DomainNameConfiguration)
+
+-- | An optional text message containing detailed information about status of
+-- the domain name migration.
+domainNameConfiguration_domainNameStatusMessage :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe Prelude.Text)
+domainNameConfiguration_domainNameStatusMessage = Lens.lens (\DomainNameConfiguration' {domainNameStatusMessage} -> domainNameStatusMessage) (\s@DomainNameConfiguration' {} a -> s {domainNameStatusMessage = a} :: DomainNameConfiguration)
+
+-- | The endpoint type.
+domainNameConfiguration_endpointType :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe EndpointType)
+domainNameConfiguration_endpointType = Lens.lens (\DomainNameConfiguration' {endpointType} -> endpointType) (\s@DomainNameConfiguration' {} a -> s {endpointType = a} :: DomainNameConfiguration)
+
+-- | The Amazon Route 53 Hosted Zone ID of the endpoint.
+domainNameConfiguration_hostedZoneId :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe Prelude.Text)
+domainNameConfiguration_hostedZoneId = Lens.lens (\DomainNameConfiguration' {hostedZoneId} -> hostedZoneId) (\s@DomainNameConfiguration' {} a -> s {hostedZoneId = a} :: DomainNameConfiguration)
+
+-- | The ARN of the public certificate issued by ACM to validate ownership of
+-- your custom domain. Only required when configuring mutual TLS and using
+-- an ACM imported or private CA certificate ARN as the
+-- regionalCertificateArn
+domainNameConfiguration_ownershipVerificationCertificateArn :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe Prelude.Text)
+domainNameConfiguration_ownershipVerificationCertificateArn = Lens.lens (\DomainNameConfiguration' {ownershipVerificationCertificateArn} -> ownershipVerificationCertificateArn) (\s@DomainNameConfiguration' {} a -> s {ownershipVerificationCertificateArn = a} :: DomainNameConfiguration)
+
+-- | The Transport Layer Security (TLS) version of the security policy for
+-- this domain name. The valid values are TLS_1_0 and TLS_1_2.
+domainNameConfiguration_securityPolicy :: Lens.Lens' DomainNameConfiguration (Prelude.Maybe SecurityPolicy)
+domainNameConfiguration_securityPolicy = Lens.lens (\DomainNameConfiguration' {securityPolicy} -> securityPolicy) (\s@DomainNameConfiguration' {} a -> s {securityPolicy = a} :: DomainNameConfiguration)
+
+instance Data.FromJSON DomainNameConfiguration where
+  parseJSON =
+    Data.withObject
+      "DomainNameConfiguration"
+      ( \x ->
+          DomainNameConfiguration'
+            Prelude.<$> (x Data..:? "apiGatewayDomainName")
+            Prelude.<*> (x Data..:? "certificateArn")
+            Prelude.<*> (x Data..:? "certificateName")
+            Prelude.<*> (x Data..:? "certificateUploadDate")
+            Prelude.<*> (x Data..:? "domainNameStatus")
+            Prelude.<*> (x Data..:? "domainNameStatusMessage")
+            Prelude.<*> (x Data..:? "endpointType")
+            Prelude.<*> (x Data..:? "hostedZoneId")
+            Prelude.<*> (x Data..:? "ownershipVerificationCertificateArn")
+            Prelude.<*> (x Data..:? "securityPolicy")
+      )
+
+instance Prelude.Hashable DomainNameConfiguration where
+  hashWithSalt _salt DomainNameConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiGatewayDomainName
+      `Prelude.hashWithSalt` certificateArn
+      `Prelude.hashWithSalt` certificateName
+      `Prelude.hashWithSalt` certificateUploadDate
+      `Prelude.hashWithSalt` domainNameStatus
+      `Prelude.hashWithSalt` domainNameStatusMessage
+      `Prelude.hashWithSalt` endpointType
+      `Prelude.hashWithSalt` hostedZoneId
+      `Prelude.hashWithSalt` ownershipVerificationCertificateArn
+      `Prelude.hashWithSalt` securityPolicy
+
+instance Prelude.NFData DomainNameConfiguration where
+  rnf DomainNameConfiguration' {..} =
+    Prelude.rnf apiGatewayDomainName
+      `Prelude.seq` Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf certificateName
+      `Prelude.seq` Prelude.rnf certificateUploadDate
+      `Prelude.seq` Prelude.rnf domainNameStatus
+      `Prelude.seq` Prelude.rnf domainNameStatusMessage
+      `Prelude.seq` Prelude.rnf endpointType
+      `Prelude.seq` Prelude.rnf hostedZoneId
+      `Prelude.seq` Prelude.rnf ownershipVerificationCertificateArn
+      `Prelude.seq` Prelude.rnf securityPolicy
+
+instance Data.ToJSON DomainNameConfiguration where
+  toJSON DomainNameConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("apiGatewayDomainName" Data..=)
+              Prelude.<$> apiGatewayDomainName,
+            ("certificateArn" Data..=)
+              Prelude.<$> certificateArn,
+            ("certificateName" Data..=)
+              Prelude.<$> certificateName,
+            ("certificateUploadDate" Data..=)
+              Prelude.<$> certificateUploadDate,
+            ("domainNameStatus" Data..=)
+              Prelude.<$> domainNameStatus,
+            ("domainNameStatusMessage" Data..=)
+              Prelude.<$> domainNameStatusMessage,
+            ("endpointType" Data..=) Prelude.<$> endpointType,
+            ("hostedZoneId" Data..=) Prelude.<$> hostedZoneId,
+            ("ownershipVerificationCertificateArn" Data..=)
+              Prelude.<$> ownershipVerificationCertificateArn,
+            ("securityPolicy" Data..=)
+              Prelude.<$> securityPolicy
+          ]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/DomainNameStatus.hs b/gen/Amazonka/ApiGatewayV2/Types/DomainNameStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/DomainNameStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.Types.DomainNameStatus
+-- 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.ApiGatewayV2.Types.DomainNameStatus
+  ( DomainNameStatus
+      ( ..,
+        DomainNameStatus_AVAILABLE,
+        DomainNameStatus_PENDING_CERTIFICATE_REIMPORT,
+        DomainNameStatus_PENDING_OWNERSHIP_VERIFICATION,
+        DomainNameStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of the domain name migration. The valid values are AVAILABLE,
+-- UPDATING, PENDING_CERTIFICATE_REIMPORT, and
+-- PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain
+-- cannot be modified further until the existing operation is complete. If
+-- it is AVAILABLE, the domain can be updated.
+newtype DomainNameStatus = DomainNameStatus'
+  { fromDomainNameStatus ::
+      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 DomainNameStatus_AVAILABLE :: DomainNameStatus
+pattern DomainNameStatus_AVAILABLE = DomainNameStatus' "AVAILABLE"
+
+pattern DomainNameStatus_PENDING_CERTIFICATE_REIMPORT :: DomainNameStatus
+pattern DomainNameStatus_PENDING_CERTIFICATE_REIMPORT = DomainNameStatus' "PENDING_CERTIFICATE_REIMPORT"
+
+pattern DomainNameStatus_PENDING_OWNERSHIP_VERIFICATION :: DomainNameStatus
+pattern DomainNameStatus_PENDING_OWNERSHIP_VERIFICATION = DomainNameStatus' "PENDING_OWNERSHIP_VERIFICATION"
+
+pattern DomainNameStatus_UPDATING :: DomainNameStatus
+pattern DomainNameStatus_UPDATING = DomainNameStatus' "UPDATING"
+
+{-# COMPLETE
+  DomainNameStatus_AVAILABLE,
+  DomainNameStatus_PENDING_CERTIFICATE_REIMPORT,
+  DomainNameStatus_PENDING_OWNERSHIP_VERIFICATION,
+  DomainNameStatus_UPDATING,
+  DomainNameStatus'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/EndpointType.hs b/gen/Amazonka/ApiGatewayV2/Types/EndpointType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/EndpointType.hs
@@ -0,0 +1,72 @@
+{-# 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.ApiGatewayV2.Types.EndpointType
+-- 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.ApiGatewayV2.Types.EndpointType
+  ( EndpointType
+      ( ..,
+        EndpointType_EDGE,
+        EndpointType_REGIONAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an endpoint type.
+newtype EndpointType = EndpointType'
+  { fromEndpointType ::
+      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 EndpointType_EDGE :: EndpointType
+pattern EndpointType_EDGE = EndpointType' "EDGE"
+
+pattern EndpointType_REGIONAL :: EndpointType
+pattern EndpointType_REGIONAL = EndpointType' "REGIONAL"
+
+{-# COMPLETE
+  EndpointType_EDGE,
+  EndpointType_REGIONAL,
+  EndpointType'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Integration.hs b/gen/Amazonka/ApiGatewayV2/Types/Integration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Integration.hs
@@ -0,0 +1,670 @@
+{-# 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.ApiGatewayV2.Types.Integration
+-- 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.ApiGatewayV2.Types.Integration where
+
+import Amazonka.ApiGatewayV2.Types.ConnectionType
+import Amazonka.ApiGatewayV2.Types.ContentHandlingStrategy
+import Amazonka.ApiGatewayV2.Types.IntegrationType
+import Amazonka.ApiGatewayV2.Types.PassthroughBehavior
+import Amazonka.ApiGatewayV2.Types.TlsConfig
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an integration.
+--
+-- /See:/ 'newIntegration' smart constructor.
+data Integration = Integration'
+  { -- | Specifies whether an integration is managed by API Gateway. If you
+    -- created an API using using quick create, the resulting integration is
+    -- managed by API Gateway. You can update a managed integration, but you
+    -- can\'t delete it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC link for a private integration. Supported only for
+    -- HTTP APIs.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the network connection to the integration endpoint. Specify
+    -- INTERNET for connections through the public routable internet or
+    -- VPC_LINK for private connections between API Gateway and resources in a
+    -- VPC. The default value is INTERNET.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | Specifies the credentials required for the integration, if any. For AWS
+    -- integrations, three options are available. To specify an IAM Role for
+    -- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+    -- require that the caller\'s identity be passed through from the request,
+    -- specify the string arn:aws:iam::*:user\/*. To use resource-based
+    -- permissions on supported AWS services, specify null.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | Represents the description of an integration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Represents the identifier of an integration.
+    integrationId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the integration\'s HTTP method type.
+    integrationMethod :: Prelude.Maybe Prelude.Text,
+    -- | The integration response selection expression for the integration.
+    -- Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+    integrationResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+    -- service action to invoke. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+    integrationSubtype :: Prelude.Maybe Prelude.Text,
+    -- | The integration type of an integration. One of the following:
+    --
+    -- AWS: for integrating the route or method request with an AWS service
+    -- action, including the Lambda function-invoking action. With the Lambda
+    -- function-invoking action, this is referred to as the Lambda custom
+    -- integration. With any other AWS service action, this is known as AWS
+    -- integration. Supported only for WebSocket APIs.
+    --
+    -- AWS_PROXY: for integrating the route or method request with a Lambda
+    -- function or other AWS service action. This integration is also referred
+    -- to as a Lambda proxy integration.
+    --
+    -- HTTP: for integrating the route or method request with an HTTP endpoint.
+    -- This integration is also referred to as the HTTP custom integration.
+    -- Supported only for WebSocket APIs.
+    --
+    -- HTTP_PROXY: for integrating the route or method request with an HTTP
+    -- endpoint, with the client request passed through as-is. This is also
+    -- referred to as HTTP proxy integration.
+    --
+    -- MOCK: for integrating the route or method request with API Gateway as a
+    -- \"loopback\" endpoint without invoking any backend. Supported only for
+    -- WebSocket APIs.
+    integrationType :: Prelude.Maybe IntegrationType,
+    -- | For a Lambda integration, specify the URI of a Lambda function.
+    --
+    -- For an HTTP integration, specify a fully-qualified URL.
+    --
+    -- For an HTTP API private integration, specify the ARN of an Application
+    -- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+    -- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+    -- uses DiscoverInstances to identify resources. You can use query
+    -- parameters to target specific resources. To learn more, see
+    -- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+    -- For private integrations, all resources must be owned by the same AWS
+    -- account.
+    integrationUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the pass-through behavior for incoming requests based on the
+    -- Content-Type header in the request, and the available mapping templates
+    -- specified as the requestTemplates property on the Integration resource.
+    -- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+    -- NEVER. Supported only for WebSocket APIs.
+    --
+    -- WHEN_NO_MATCH passes the request body for unmapped content types through
+    -- to the integration backend without transformation.
+    --
+    -- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+    -- Type response.
+    --
+    -- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+    -- content types mapped to templates. However, if there is at least one
+    -- content type defined, unmapped content types will be rejected with the
+    -- same HTTP 415 Unsupported Media Type response.
+    passthroughBehavior :: Prelude.Maybe PassthroughBehavior,
+    -- | Specifies the format of the payload sent to an integration. Required for
+    -- HTTP APIs.
+    payloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | For WebSocket APIs, a key-value map specifying request parameters that
+    -- are passed from the method request to the backend. The key is an
+    -- integration request parameter name and the associated value is a method
+    -- request parameter value or static value that must be enclosed within
+    -- single quotes and pre-encoded as required by the backend. The method
+    -- request parameter value must match the pattern of
+    -- method.request.{location}.{name} , where {location} is querystring,
+    -- path, or header; and {name} must be a valid and unique method request
+    -- parameter name.
+    --
+    -- For HTTP API integrations with a specified integrationSubtype, request
+    -- parameters are a key-value map specifying parameters that are passed to
+    -- AWS_PROXY integrations. You can provide static values, or map request
+    -- data, stage variables, or context variables that are evaluated at
+    -- runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+    --
+    -- For HTTP API itegrations, without a specified integrationSubtype request
+    -- parameters are a key-value map specifying how to transform HTTP requests
+    -- before sending them to backend integrations. The key should follow the
+    -- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+    -- be append, overwrite or remove. For values, you can provide static
+    -- values, or map request data, stage variables, or context variables that
+    -- are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents a map of Velocity templates that are applied on the request
+    -- payload based on the value of the Content-Type header sent by the
+    -- client. The content type value is the key in this map, and the template
+    -- (as a String) is the value. Supported only for WebSocket APIs.
+    requestTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Supported only for HTTP APIs. You use response parameters to transform
+    -- the HTTP response from a backend integration before returning the
+    -- response to clients. Specify a key-value map from a selection key to
+    -- response parameters. The selection key must be a valid HTTP status code
+    -- within the range of 200-599. Response parameters are a key-value map.
+    -- The key must match pattern \<action>:\<header>.\<location> or
+    -- overwrite.statuscode. The action can be append, overwrite or remove. The
+    -- value can be a static value, or map to response data, stage variables,
+    -- or context variables that are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The template selection expression for the integration. Supported only
+    -- for WebSocket APIs.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+    -- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+    -- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+    timeoutInMillis :: Prelude.Maybe Prelude.Natural,
+    -- | The TLS configuration for a private integration. If you specify a TLS
+    -- configuration, private integration traffic uses the HTTPS protocol.
+    -- Supported only for HTTP APIs.
+    tlsConfig :: Prelude.Maybe TlsConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Integration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'integration_apiGatewayManaged' - Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+--
+-- 'connectionId', 'integration_connectionId' - The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+--
+-- 'connectionType', 'integration_connectionType' - The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+--
+-- 'contentHandlingStrategy', 'integration_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'credentialsArn', 'integration_credentialsArn' - Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+--
+-- 'description', 'integration_description' - Represents the description of an integration.
+--
+-- 'integrationId', 'integration_integrationId' - Represents the identifier of an integration.
+--
+-- 'integrationMethod', 'integration_integrationMethod' - Specifies the integration\'s HTTP method type.
+--
+-- 'integrationResponseSelectionExpression', 'integration_integrationResponseSelectionExpression' - The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+--
+-- 'integrationSubtype', 'integration_integrationSubtype' - Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+--
+-- 'integrationType', 'integration_integrationType' - The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+--
+-- 'integrationUri', 'integration_integrationUri' - For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+--
+-- 'passthroughBehavior', 'integration_passthroughBehavior' - Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+--
+-- 'payloadFormatVersion', 'integration_payloadFormatVersion' - Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+--
+-- 'requestParameters', 'integration_requestParameters' - For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'requestTemplates', 'integration_requestTemplates' - Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+--
+-- 'responseParameters', 'integration_responseParameters' - Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'templateSelectionExpression', 'integration_templateSelectionExpression' - The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+--
+-- 'timeoutInMillis', 'integration_timeoutInMillis' - Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+--
+-- 'tlsConfig', 'integration_tlsConfig' - The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+newIntegration ::
+  Integration
+newIntegration =
+  Integration'
+    { apiGatewayManaged = Prelude.Nothing,
+      connectionId = Prelude.Nothing,
+      connectionType = Prelude.Nothing,
+      contentHandlingStrategy = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      integrationId = Prelude.Nothing,
+      integrationMethod = Prelude.Nothing,
+      integrationResponseSelectionExpression =
+        Prelude.Nothing,
+      integrationSubtype = Prelude.Nothing,
+      integrationType = Prelude.Nothing,
+      integrationUri = Prelude.Nothing,
+      passthroughBehavior = Prelude.Nothing,
+      payloadFormatVersion = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      requestTemplates = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      templateSelectionExpression = Prelude.Nothing,
+      timeoutInMillis = Prelude.Nothing,
+      tlsConfig = Prelude.Nothing
+    }
+
+-- | Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+integration_apiGatewayManaged :: Lens.Lens' Integration (Prelude.Maybe Prelude.Bool)
+integration_apiGatewayManaged = Lens.lens (\Integration' {apiGatewayManaged} -> apiGatewayManaged) (\s@Integration' {} a -> s {apiGatewayManaged = a} :: Integration)
+
+-- | The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+integration_connectionId :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_connectionId = Lens.lens (\Integration' {connectionId} -> connectionId) (\s@Integration' {} a -> s {connectionId = a} :: Integration)
+
+-- | The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+integration_connectionType :: Lens.Lens' Integration (Prelude.Maybe ConnectionType)
+integration_connectionType = Lens.lens (\Integration' {connectionType} -> connectionType) (\s@Integration' {} a -> s {connectionType = a} :: Integration)
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+integration_contentHandlingStrategy :: Lens.Lens' Integration (Prelude.Maybe ContentHandlingStrategy)
+integration_contentHandlingStrategy = Lens.lens (\Integration' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@Integration' {} a -> s {contentHandlingStrategy = a} :: Integration)
+
+-- | Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+integration_credentialsArn :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_credentialsArn = Lens.lens (\Integration' {credentialsArn} -> credentialsArn) (\s@Integration' {} a -> s {credentialsArn = a} :: Integration)
+
+-- | Represents the description of an integration.
+integration_description :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_description = Lens.lens (\Integration' {description} -> description) (\s@Integration' {} a -> s {description = a} :: Integration)
+
+-- | Represents the identifier of an integration.
+integration_integrationId :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_integrationId = Lens.lens (\Integration' {integrationId} -> integrationId) (\s@Integration' {} a -> s {integrationId = a} :: Integration)
+
+-- | Specifies the integration\'s HTTP method type.
+integration_integrationMethod :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_integrationMethod = Lens.lens (\Integration' {integrationMethod} -> integrationMethod) (\s@Integration' {} a -> s {integrationMethod = a} :: Integration)
+
+-- | The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+integration_integrationResponseSelectionExpression :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_integrationResponseSelectionExpression = Lens.lens (\Integration' {integrationResponseSelectionExpression} -> integrationResponseSelectionExpression) (\s@Integration' {} a -> s {integrationResponseSelectionExpression = a} :: Integration)
+
+-- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+integration_integrationSubtype :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_integrationSubtype = Lens.lens (\Integration' {integrationSubtype} -> integrationSubtype) (\s@Integration' {} a -> s {integrationSubtype = a} :: Integration)
+
+-- | The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+integration_integrationType :: Lens.Lens' Integration (Prelude.Maybe IntegrationType)
+integration_integrationType = Lens.lens (\Integration' {integrationType} -> integrationType) (\s@Integration' {} a -> s {integrationType = a} :: Integration)
+
+-- | For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+integration_integrationUri :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_integrationUri = Lens.lens (\Integration' {integrationUri} -> integrationUri) (\s@Integration' {} a -> s {integrationUri = a} :: Integration)
+
+-- | Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+integration_passthroughBehavior :: Lens.Lens' Integration (Prelude.Maybe PassthroughBehavior)
+integration_passthroughBehavior = Lens.lens (\Integration' {passthroughBehavior} -> passthroughBehavior) (\s@Integration' {} a -> s {passthroughBehavior = a} :: Integration)
+
+-- | Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+integration_payloadFormatVersion :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_payloadFormatVersion = Lens.lens (\Integration' {payloadFormatVersion} -> payloadFormatVersion) (\s@Integration' {} a -> s {payloadFormatVersion = a} :: Integration)
+
+-- | For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+integration_requestParameters :: Lens.Lens' Integration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+integration_requestParameters = Lens.lens (\Integration' {requestParameters} -> requestParameters) (\s@Integration' {} a -> s {requestParameters = a} :: Integration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+integration_requestTemplates :: Lens.Lens' Integration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+integration_requestTemplates = Lens.lens (\Integration' {requestTemplates} -> requestTemplates) (\s@Integration' {} a -> s {requestTemplates = a} :: Integration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+integration_responseParameters :: Lens.Lens' Integration (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+integration_responseParameters = Lens.lens (\Integration' {responseParameters} -> responseParameters) (\s@Integration' {} a -> s {responseParameters = a} :: Integration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+integration_templateSelectionExpression :: Lens.Lens' Integration (Prelude.Maybe Prelude.Text)
+integration_templateSelectionExpression = Lens.lens (\Integration' {templateSelectionExpression} -> templateSelectionExpression) (\s@Integration' {} a -> s {templateSelectionExpression = a} :: Integration)
+
+-- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+integration_timeoutInMillis :: Lens.Lens' Integration (Prelude.Maybe Prelude.Natural)
+integration_timeoutInMillis = Lens.lens (\Integration' {timeoutInMillis} -> timeoutInMillis) (\s@Integration' {} a -> s {timeoutInMillis = a} :: Integration)
+
+-- | The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+integration_tlsConfig :: Lens.Lens' Integration (Prelude.Maybe TlsConfig)
+integration_tlsConfig = Lens.lens (\Integration' {tlsConfig} -> tlsConfig) (\s@Integration' {} a -> s {tlsConfig = a} :: Integration)
+
+instance Data.FromJSON Integration where
+  parseJSON =
+    Data.withObject
+      "Integration"
+      ( \x ->
+          Integration'
+            Prelude.<$> (x Data..:? "apiGatewayManaged")
+            Prelude.<*> (x Data..:? "connectionId")
+            Prelude.<*> (x Data..:? "connectionType")
+            Prelude.<*> (x Data..:? "contentHandlingStrategy")
+            Prelude.<*> (x Data..:? "credentialsArn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "integrationId")
+            Prelude.<*> (x Data..:? "integrationMethod")
+            Prelude.<*> (x Data..:? "integrationResponseSelectionExpression")
+            Prelude.<*> (x Data..:? "integrationSubtype")
+            Prelude.<*> (x Data..:? "integrationType")
+            Prelude.<*> (x Data..:? "integrationUri")
+            Prelude.<*> (x Data..:? "passthroughBehavior")
+            Prelude.<*> (x Data..:? "payloadFormatVersion")
+            Prelude.<*> ( x
+                            Data..:? "requestParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "requestTemplates"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "responseParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "templateSelectionExpression")
+            Prelude.<*> (x Data..:? "timeoutInMillis")
+            Prelude.<*> (x Data..:? "tlsConfig")
+      )
+
+instance Prelude.Hashable Integration where
+  hashWithSalt _salt Integration' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiGatewayManaged
+      `Prelude.hashWithSalt` connectionId
+      `Prelude.hashWithSalt` connectionType
+      `Prelude.hashWithSalt` contentHandlingStrategy
+      `Prelude.hashWithSalt` credentialsArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` integrationId
+      `Prelude.hashWithSalt` integrationMethod
+      `Prelude.hashWithSalt` integrationResponseSelectionExpression
+      `Prelude.hashWithSalt` integrationSubtype
+      `Prelude.hashWithSalt` integrationType
+      `Prelude.hashWithSalt` integrationUri
+      `Prelude.hashWithSalt` passthroughBehavior
+      `Prelude.hashWithSalt` payloadFormatVersion
+      `Prelude.hashWithSalt` requestParameters
+      `Prelude.hashWithSalt` requestTemplates
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` templateSelectionExpression
+      `Prelude.hashWithSalt` timeoutInMillis
+      `Prelude.hashWithSalt` tlsConfig
+
+instance Prelude.NFData Integration where
+  rnf Integration' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf integrationId
+      `Prelude.seq` Prelude.rnf integrationMethod
+      `Prelude.seq` Prelude.rnf integrationResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf integrationSubtype
+      `Prelude.seq` Prelude.rnf integrationType
+      `Prelude.seq` Prelude.rnf integrationUri
+      `Prelude.seq` Prelude.rnf passthroughBehavior
+      `Prelude.seq` Prelude.rnf payloadFormatVersion
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf requestTemplates
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf
+        templateSelectionExpression
+      `Prelude.seq` Prelude.rnf timeoutInMillis
+      `Prelude.seq` Prelude.rnf tlsConfig
diff --git a/gen/Amazonka/ApiGatewayV2/Types/IntegrationResponse.hs b/gen/Amazonka/ApiGatewayV2/Types/IntegrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/IntegrationResponse.hs
@@ -0,0 +1,217 @@
+{-# 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.ApiGatewayV2.Types.IntegrationResponse
+-- 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.ApiGatewayV2.Types.IntegrationResponse where
+
+import Amazonka.ApiGatewayV2.Types.ContentHandlingStrategy
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an integration response.
+--
+-- /See:/ 'newIntegrationResponse' smart constructor.
+data IntegrationResponse = IntegrationResponse'
+  { -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | The integration response ID.
+    integrationResponseId :: Prelude.Maybe Prelude.Text,
+    -- | A key-value map specifying response parameters that are passed to the
+    -- method response from the backend. The key is a method response header
+    -- parameter name and the mapped value is an integration response header
+    -- value, a static value enclosed within a pair of single quotes, or a JSON
+    -- expression from the integration response body. The mapping key must
+    -- match the pattern of method.response.header.{name}, where name is a
+    -- valid and unique header name. The mapped non-static value must match the
+    -- pattern of integration.response.header.{name} or
+    -- integration.response.body.{JSON-expression}, where name is a valid and
+    -- unique response header name and JSON-expression is a valid JSON
+    -- expression without the $ prefix.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of response templates for the integration response as a
+    -- string-to-string map of key-value pairs. Response templates are
+    -- represented as a key\/value map, with a content-type as the key and a
+    -- template as the value.
+    responseTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The template selection expressions for the integration response.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The integration response key.
+    integrationResponseKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentHandlingStrategy', 'integrationResponse_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'integrationResponseId', 'integrationResponse_integrationResponseId' - The integration response ID.
+--
+-- 'responseParameters', 'integrationResponse_responseParameters' - A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+--
+-- 'responseTemplates', 'integrationResponse_responseTemplates' - The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+--
+-- 'templateSelectionExpression', 'integrationResponse_templateSelectionExpression' - The template selection expressions for the integration response.
+--
+-- 'integrationResponseKey', 'integrationResponse_integrationResponseKey' - The integration response key.
+newIntegrationResponse ::
+  -- | 'integrationResponseKey'
+  Prelude.Text ->
+  IntegrationResponse
+newIntegrationResponse pIntegrationResponseKey_ =
+  IntegrationResponse'
+    { contentHandlingStrategy =
+        Prelude.Nothing,
+      integrationResponseId = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      responseTemplates = Prelude.Nothing,
+      templateSelectionExpression = Prelude.Nothing,
+      integrationResponseKey = pIntegrationResponseKey_
+    }
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+integrationResponse_contentHandlingStrategy :: Lens.Lens' IntegrationResponse (Prelude.Maybe ContentHandlingStrategy)
+integrationResponse_contentHandlingStrategy = Lens.lens (\IntegrationResponse' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@IntegrationResponse' {} a -> s {contentHandlingStrategy = a} :: IntegrationResponse)
+
+-- | The integration response ID.
+integrationResponse_integrationResponseId :: Lens.Lens' IntegrationResponse (Prelude.Maybe Prelude.Text)
+integrationResponse_integrationResponseId = Lens.lens (\IntegrationResponse' {integrationResponseId} -> integrationResponseId) (\s@IntegrationResponse' {} a -> s {integrationResponseId = a} :: IntegrationResponse)
+
+-- | A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+integrationResponse_responseParameters :: Lens.Lens' IntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+integrationResponse_responseParameters = Lens.lens (\IntegrationResponse' {responseParameters} -> responseParameters) (\s@IntegrationResponse' {} a -> s {responseParameters = a} :: IntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+integrationResponse_responseTemplates :: Lens.Lens' IntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+integrationResponse_responseTemplates = Lens.lens (\IntegrationResponse' {responseTemplates} -> responseTemplates) (\s@IntegrationResponse' {} a -> s {responseTemplates = a} :: IntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expressions for the integration response.
+integrationResponse_templateSelectionExpression :: Lens.Lens' IntegrationResponse (Prelude.Maybe Prelude.Text)
+integrationResponse_templateSelectionExpression = Lens.lens (\IntegrationResponse' {templateSelectionExpression} -> templateSelectionExpression) (\s@IntegrationResponse' {} a -> s {templateSelectionExpression = a} :: IntegrationResponse)
+
+-- | The integration response key.
+integrationResponse_integrationResponseKey :: Lens.Lens' IntegrationResponse Prelude.Text
+integrationResponse_integrationResponseKey = Lens.lens (\IntegrationResponse' {integrationResponseKey} -> integrationResponseKey) (\s@IntegrationResponse' {} a -> s {integrationResponseKey = a} :: IntegrationResponse)
+
+instance Data.FromJSON IntegrationResponse where
+  parseJSON =
+    Data.withObject
+      "IntegrationResponse"
+      ( \x ->
+          IntegrationResponse'
+            Prelude.<$> (x Data..:? "contentHandlingStrategy")
+            Prelude.<*> (x Data..:? "integrationResponseId")
+            Prelude.<*> ( x
+                            Data..:? "responseParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "responseTemplates"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "templateSelectionExpression")
+            Prelude.<*> (x Data..: "integrationResponseKey")
+      )
+
+instance Prelude.Hashable IntegrationResponse where
+  hashWithSalt _salt IntegrationResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentHandlingStrategy
+      `Prelude.hashWithSalt` integrationResponseId
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` responseTemplates
+      `Prelude.hashWithSalt` templateSelectionExpression
+      `Prelude.hashWithSalt` integrationResponseKey
+
+instance Prelude.NFData IntegrationResponse where
+  rnf IntegrationResponse' {..} =
+    Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf integrationResponseId
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf responseTemplates
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf integrationResponseKey
diff --git a/gen/Amazonka/ApiGatewayV2/Types/IntegrationType.hs b/gen/Amazonka/ApiGatewayV2/Types/IntegrationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/IntegrationType.hs
@@ -0,0 +1,87 @@
+{-# 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.ApiGatewayV2.Types.IntegrationType
+-- 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.ApiGatewayV2.Types.IntegrationType
+  ( IntegrationType
+      ( ..,
+        IntegrationType_AWS,
+        IntegrationType_AWS_PROXY,
+        IntegrationType_HTTP,
+        IntegrationType_HTTP_PROXY,
+        IntegrationType_MOCK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an API method integration type.
+newtype IntegrationType = IntegrationType'
+  { fromIntegrationType ::
+      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 IntegrationType_AWS :: IntegrationType
+pattern IntegrationType_AWS = IntegrationType' "AWS"
+
+pattern IntegrationType_AWS_PROXY :: IntegrationType
+pattern IntegrationType_AWS_PROXY = IntegrationType' "AWS_PROXY"
+
+pattern IntegrationType_HTTP :: IntegrationType
+pattern IntegrationType_HTTP = IntegrationType' "HTTP"
+
+pattern IntegrationType_HTTP_PROXY :: IntegrationType
+pattern IntegrationType_HTTP_PROXY = IntegrationType' "HTTP_PROXY"
+
+pattern IntegrationType_MOCK :: IntegrationType
+pattern IntegrationType_MOCK = IntegrationType' "MOCK"
+
+{-# COMPLETE
+  IntegrationType_AWS,
+  IntegrationType_AWS_PROXY,
+  IntegrationType_HTTP,
+  IntegrationType_HTTP_PROXY,
+  IntegrationType_MOCK,
+  IntegrationType'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/JWTConfiguration.hs b/gen/Amazonka/ApiGatewayV2/Types/JWTConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/JWTConfiguration.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.Types.JWTConfiguration
+-- 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.ApiGatewayV2.Types.JWTConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+--
+-- /See:/ 'newJWTConfiguration' smart constructor.
+data JWTConfiguration = JWTConfiguration'
+  { -- | A list of the intended recipients of the JWT. A valid JWT must provide
+    -- an aud that matches at least one entry in this list. See
+    -- <https://tools.ietf.org/html/rfc7519#section-4.1.3 RFC 7519>. Supported
+    -- only for HTTP APIs.
+    audience :: Prelude.Maybe [Prelude.Text],
+    -- | The base domain of the identity provider that issues JSON Web Tokens.
+    -- For example, an Amazon Cognito user pool has the following format:
+    -- https:\/\/cognito-idp.{region}.amazonaws.com\/{userPoolId} . Required
+    -- for the JWT authorizer type. Supported only for HTTP APIs.
+    issuer :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JWTConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'audience', 'jWTConfiguration_audience' - A list of the intended recipients of the JWT. A valid JWT must provide
+-- an aud that matches at least one entry in this list. See
+-- <https://tools.ietf.org/html/rfc7519#section-4.1.3 RFC 7519>. Supported
+-- only for HTTP APIs.
+--
+-- 'issuer', 'jWTConfiguration_issuer' - The base domain of the identity provider that issues JSON Web Tokens.
+-- For example, an Amazon Cognito user pool has the following format:
+-- https:\/\/cognito-idp.{region}.amazonaws.com\/{userPoolId} . Required
+-- for the JWT authorizer type. Supported only for HTTP APIs.
+newJWTConfiguration ::
+  JWTConfiguration
+newJWTConfiguration =
+  JWTConfiguration'
+    { audience = Prelude.Nothing,
+      issuer = Prelude.Nothing
+    }
+
+-- | A list of the intended recipients of the JWT. A valid JWT must provide
+-- an aud that matches at least one entry in this list. See
+-- <https://tools.ietf.org/html/rfc7519#section-4.1.3 RFC 7519>. Supported
+-- only for HTTP APIs.
+jWTConfiguration_audience :: Lens.Lens' JWTConfiguration (Prelude.Maybe [Prelude.Text])
+jWTConfiguration_audience = Lens.lens (\JWTConfiguration' {audience} -> audience) (\s@JWTConfiguration' {} a -> s {audience = a} :: JWTConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The base domain of the identity provider that issues JSON Web Tokens.
+-- For example, an Amazon Cognito user pool has the following format:
+-- https:\/\/cognito-idp.{region}.amazonaws.com\/{userPoolId} . Required
+-- for the JWT authorizer type. Supported only for HTTP APIs.
+jWTConfiguration_issuer :: Lens.Lens' JWTConfiguration (Prelude.Maybe Prelude.Text)
+jWTConfiguration_issuer = Lens.lens (\JWTConfiguration' {issuer} -> issuer) (\s@JWTConfiguration' {} a -> s {issuer = a} :: JWTConfiguration)
+
+instance Data.FromJSON JWTConfiguration where
+  parseJSON =
+    Data.withObject
+      "JWTConfiguration"
+      ( \x ->
+          JWTConfiguration'
+            Prelude.<$> (x Data..:? "audience" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "issuer")
+      )
+
+instance Prelude.Hashable JWTConfiguration where
+  hashWithSalt _salt JWTConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` audience
+      `Prelude.hashWithSalt` issuer
+
+instance Prelude.NFData JWTConfiguration where
+  rnf JWTConfiguration' {..} =
+    Prelude.rnf audience
+      `Prelude.seq` Prelude.rnf issuer
+
+instance Data.ToJSON JWTConfiguration where
+  toJSON JWTConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("audience" Data..=) Prelude.<$> audience,
+            ("issuer" Data..=) Prelude.<$> issuer
+          ]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/LoggingLevel.hs b/gen/Amazonka/ApiGatewayV2/Types/LoggingLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/LoggingLevel.hs
@@ -0,0 +1,77 @@
+{-# 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.ApiGatewayV2.Types.LoggingLevel
+-- 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.ApiGatewayV2.Types.LoggingLevel
+  ( LoggingLevel
+      ( ..,
+        LoggingLevel_ERROR,
+        LoggingLevel_INFO,
+        LoggingLevel_OFF
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The logging level.
+newtype LoggingLevel = LoggingLevel'
+  { fromLoggingLevel ::
+      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 LoggingLevel_ERROR :: LoggingLevel
+pattern LoggingLevel_ERROR = LoggingLevel' "ERROR"
+
+pattern LoggingLevel_INFO :: LoggingLevel
+pattern LoggingLevel_INFO = LoggingLevel' "INFO"
+
+pattern LoggingLevel_OFF :: LoggingLevel
+pattern LoggingLevel_OFF = LoggingLevel' "OFF"
+
+{-# COMPLETE
+  LoggingLevel_ERROR,
+  LoggingLevel_INFO,
+  LoggingLevel_OFF,
+  LoggingLevel'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Model.hs b/gen/Amazonka/ApiGatewayV2/Types/Model.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Model.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.Types.Model
+-- 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.ApiGatewayV2.Types.Model where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a data model for an API. Supported only for WebSocket APIs.
+-- See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html Create Models and Mapping Templates for Request and Response Mappings>.
+--
+-- /See:/ 'newModel' smart constructor.
+data Model = Model'
+  { -- | The content-type for the model, for example, \"application\/json\".
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The description of the model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The model identifier.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The schema for the model. For application\/json models, this should be
+    -- JSON schema draft 4 model.
+    schema :: Prelude.Maybe Prelude.Text,
+    -- | The name of the model. Must be alphanumeric.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Model' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'model_contentType' - The content-type for the model, for example, \"application\/json\".
+--
+-- 'description', 'model_description' - The description of the model.
+--
+-- 'modelId', 'model_modelId' - The model identifier.
+--
+-- 'schema', 'model_schema' - The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+--
+-- 'name', 'model_name' - The name of the model. Must be alphanumeric.
+newModel ::
+  -- | 'name'
+  Prelude.Text ->
+  Model
+newModel pName_ =
+  Model'
+    { contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The content-type for the model, for example, \"application\/json\".
+model_contentType :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_contentType = Lens.lens (\Model' {contentType} -> contentType) (\s@Model' {} a -> s {contentType = a} :: Model)
+
+-- | The description of the model.
+model_description :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_description = Lens.lens (\Model' {description} -> description) (\s@Model' {} a -> s {description = a} :: Model)
+
+-- | The model identifier.
+model_modelId :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_modelId = Lens.lens (\Model' {modelId} -> modelId) (\s@Model' {} a -> s {modelId = a} :: Model)
+
+-- | The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+model_schema :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_schema = Lens.lens (\Model' {schema} -> schema) (\s@Model' {} a -> s {schema = a} :: Model)
+
+-- | The name of the model. Must be alphanumeric.
+model_name :: Lens.Lens' Model Prelude.Text
+model_name = Lens.lens (\Model' {name} -> name) (\s@Model' {} a -> s {name = a} :: Model)
+
+instance Data.FromJSON Model where
+  parseJSON =
+    Data.withObject
+      "Model"
+      ( \x ->
+          Model'
+            Prelude.<$> (x Data..:? "contentType")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "modelId")
+            Prelude.<*> (x Data..:? "schema")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable Model where
+  hashWithSalt _salt Model' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` schema
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Model where
+  rnf Model' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ApiGatewayV2/Types/MutualTlsAuthentication.hs b/gen/Amazonka/ApiGatewayV2/Types/MutualTlsAuthentication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/MutualTlsAuthentication.hs
@@ -0,0 +1,128 @@
+{-# 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.ApiGatewayV2.Types.MutualTlsAuthentication
+-- 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.ApiGatewayV2.Types.MutualTlsAuthentication 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
+
+-- | /See:/ 'newMutualTlsAuthentication' smart constructor.
+data MutualTlsAuthentication = MutualTlsAuthentication'
+  { -- | An Amazon S3 URL that specifies the truststore for mutual TLS
+    -- authentication, for example, s3:\/\/bucket-name\/key-name. The
+    -- truststore can contain certificates from public or private certificate
+    -- authorities. To update the truststore, upload a new version to S3, and
+    -- then update your custom domain name to use the new version. To update
+    -- the truststore, you must have permissions to access the S3 object.
+    truststoreUri :: Prelude.Maybe Prelude.Text,
+    -- | The version of the S3 object that contains your truststore. To specify a
+    -- version, you must have versioning enabled for the S3 bucket.
+    truststoreVersion :: Prelude.Maybe Prelude.Text,
+    -- | A list of warnings that API Gateway returns while processing your
+    -- truststore. Invalid certificates produce warnings. Mutual TLS is still
+    -- enabled, but some clients might not be able to access your API. To
+    -- resolve warnings, upload a new truststore to S3, and then update you
+    -- domain name to use the new version.
+    truststoreWarnings :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MutualTlsAuthentication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'truststoreUri', 'mutualTlsAuthentication_truststoreUri' - An Amazon S3 URL that specifies the truststore for mutual TLS
+-- authentication, for example, s3:\/\/bucket-name\/key-name. The
+-- truststore can contain certificates from public or private certificate
+-- authorities. To update the truststore, upload a new version to S3, and
+-- then update your custom domain name to use the new version. To update
+-- the truststore, you must have permissions to access the S3 object.
+--
+-- 'truststoreVersion', 'mutualTlsAuthentication_truststoreVersion' - The version of the S3 object that contains your truststore. To specify a
+-- version, you must have versioning enabled for the S3 bucket.
+--
+-- 'truststoreWarnings', 'mutualTlsAuthentication_truststoreWarnings' - A list of warnings that API Gateway returns while processing your
+-- truststore. Invalid certificates produce warnings. Mutual TLS is still
+-- enabled, but some clients might not be able to access your API. To
+-- resolve warnings, upload a new truststore to S3, and then update you
+-- domain name to use the new version.
+newMutualTlsAuthentication ::
+  MutualTlsAuthentication
+newMutualTlsAuthentication =
+  MutualTlsAuthentication'
+    { truststoreUri =
+        Prelude.Nothing,
+      truststoreVersion = Prelude.Nothing,
+      truststoreWarnings = Prelude.Nothing
+    }
+
+-- | An Amazon S3 URL that specifies the truststore for mutual TLS
+-- authentication, for example, s3:\/\/bucket-name\/key-name. The
+-- truststore can contain certificates from public or private certificate
+-- authorities. To update the truststore, upload a new version to S3, and
+-- then update your custom domain name to use the new version. To update
+-- the truststore, you must have permissions to access the S3 object.
+mutualTlsAuthentication_truststoreUri :: Lens.Lens' MutualTlsAuthentication (Prelude.Maybe Prelude.Text)
+mutualTlsAuthentication_truststoreUri = Lens.lens (\MutualTlsAuthentication' {truststoreUri} -> truststoreUri) (\s@MutualTlsAuthentication' {} a -> s {truststoreUri = a} :: MutualTlsAuthentication)
+
+-- | The version of the S3 object that contains your truststore. To specify a
+-- version, you must have versioning enabled for the S3 bucket.
+mutualTlsAuthentication_truststoreVersion :: Lens.Lens' MutualTlsAuthentication (Prelude.Maybe Prelude.Text)
+mutualTlsAuthentication_truststoreVersion = Lens.lens (\MutualTlsAuthentication' {truststoreVersion} -> truststoreVersion) (\s@MutualTlsAuthentication' {} a -> s {truststoreVersion = a} :: MutualTlsAuthentication)
+
+-- | A list of warnings that API Gateway returns while processing your
+-- truststore. Invalid certificates produce warnings. Mutual TLS is still
+-- enabled, but some clients might not be able to access your API. To
+-- resolve warnings, upload a new truststore to S3, and then update you
+-- domain name to use the new version.
+mutualTlsAuthentication_truststoreWarnings :: Lens.Lens' MutualTlsAuthentication (Prelude.Maybe [Prelude.Text])
+mutualTlsAuthentication_truststoreWarnings = Lens.lens (\MutualTlsAuthentication' {truststoreWarnings} -> truststoreWarnings) (\s@MutualTlsAuthentication' {} a -> s {truststoreWarnings = a} :: MutualTlsAuthentication) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON MutualTlsAuthentication where
+  parseJSON =
+    Data.withObject
+      "MutualTlsAuthentication"
+      ( \x ->
+          MutualTlsAuthentication'
+            Prelude.<$> (x Data..:? "truststoreUri")
+            Prelude.<*> (x Data..:? "truststoreVersion")
+            Prelude.<*> ( x
+                            Data..:? "truststoreWarnings"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable MutualTlsAuthentication where
+  hashWithSalt _salt MutualTlsAuthentication' {..} =
+    _salt
+      `Prelude.hashWithSalt` truststoreUri
+      `Prelude.hashWithSalt` truststoreVersion
+      `Prelude.hashWithSalt` truststoreWarnings
+
+instance Prelude.NFData MutualTlsAuthentication where
+  rnf MutualTlsAuthentication' {..} =
+    Prelude.rnf truststoreUri
+      `Prelude.seq` Prelude.rnf truststoreVersion
+      `Prelude.seq` Prelude.rnf truststoreWarnings
diff --git a/gen/Amazonka/ApiGatewayV2/Types/MutualTlsAuthenticationInput.hs b/gen/Amazonka/ApiGatewayV2/Types/MutualTlsAuthenticationInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/MutualTlsAuthenticationInput.hs
@@ -0,0 +1,104 @@
+{-# 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.ApiGatewayV2.Types.MutualTlsAuthenticationInput
+-- 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.ApiGatewayV2.Types.MutualTlsAuthenticationInput 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
+
+-- | /See:/ 'newMutualTlsAuthenticationInput' smart constructor.
+data MutualTlsAuthenticationInput = MutualTlsAuthenticationInput'
+  { -- | An Amazon S3 URL that specifies the truststore for mutual TLS
+    -- authentication, for example, s3:\/\/bucket-name\/key-name. The
+    -- truststore can contain certificates from public or private certificate
+    -- authorities. To update the truststore, upload a new version to S3, and
+    -- then update your custom domain name to use the new version. To update
+    -- the truststore, you must have permissions to access the S3 object.
+    truststoreUri :: Prelude.Maybe Prelude.Text,
+    -- | The version of the S3 object that contains your truststore. To specify a
+    -- version, you must have versioning enabled for the S3 bucket.
+    truststoreVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MutualTlsAuthenticationInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'truststoreUri', 'mutualTlsAuthenticationInput_truststoreUri' - An Amazon S3 URL that specifies the truststore for mutual TLS
+-- authentication, for example, s3:\/\/bucket-name\/key-name. The
+-- truststore can contain certificates from public or private certificate
+-- authorities. To update the truststore, upload a new version to S3, and
+-- then update your custom domain name to use the new version. To update
+-- the truststore, you must have permissions to access the S3 object.
+--
+-- 'truststoreVersion', 'mutualTlsAuthenticationInput_truststoreVersion' - The version of the S3 object that contains your truststore. To specify a
+-- version, you must have versioning enabled for the S3 bucket.
+newMutualTlsAuthenticationInput ::
+  MutualTlsAuthenticationInput
+newMutualTlsAuthenticationInput =
+  MutualTlsAuthenticationInput'
+    { truststoreUri =
+        Prelude.Nothing,
+      truststoreVersion = Prelude.Nothing
+    }
+
+-- | An Amazon S3 URL that specifies the truststore for mutual TLS
+-- authentication, for example, s3:\/\/bucket-name\/key-name. The
+-- truststore can contain certificates from public or private certificate
+-- authorities. To update the truststore, upload a new version to S3, and
+-- then update your custom domain name to use the new version. To update
+-- the truststore, you must have permissions to access the S3 object.
+mutualTlsAuthenticationInput_truststoreUri :: Lens.Lens' MutualTlsAuthenticationInput (Prelude.Maybe Prelude.Text)
+mutualTlsAuthenticationInput_truststoreUri = Lens.lens (\MutualTlsAuthenticationInput' {truststoreUri} -> truststoreUri) (\s@MutualTlsAuthenticationInput' {} a -> s {truststoreUri = a} :: MutualTlsAuthenticationInput)
+
+-- | The version of the S3 object that contains your truststore. To specify a
+-- version, you must have versioning enabled for the S3 bucket.
+mutualTlsAuthenticationInput_truststoreVersion :: Lens.Lens' MutualTlsAuthenticationInput (Prelude.Maybe Prelude.Text)
+mutualTlsAuthenticationInput_truststoreVersion = Lens.lens (\MutualTlsAuthenticationInput' {truststoreVersion} -> truststoreVersion) (\s@MutualTlsAuthenticationInput' {} a -> s {truststoreVersion = a} :: MutualTlsAuthenticationInput)
+
+instance
+  Prelude.Hashable
+    MutualTlsAuthenticationInput
+  where
+  hashWithSalt _salt MutualTlsAuthenticationInput' {..} =
+    _salt
+      `Prelude.hashWithSalt` truststoreUri
+      `Prelude.hashWithSalt` truststoreVersion
+
+instance Prelude.NFData MutualTlsAuthenticationInput where
+  rnf MutualTlsAuthenticationInput' {..} =
+    Prelude.rnf truststoreUri
+      `Prelude.seq` Prelude.rnf truststoreVersion
+
+instance Data.ToJSON MutualTlsAuthenticationInput where
+  toJSON MutualTlsAuthenticationInput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("truststoreUri" Data..=) Prelude.<$> truststoreUri,
+            ("truststoreVersion" Data..=)
+              Prelude.<$> truststoreVersion
+          ]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/ParameterConstraints.hs b/gen/Amazonka/ApiGatewayV2/Types/ParameterConstraints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/ParameterConstraints.hs
@@ -0,0 +1,76 @@
+{-# 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.ApiGatewayV2.Types.ParameterConstraints
+-- 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.ApiGatewayV2.Types.ParameterConstraints 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
+
+-- | Validation constraints imposed on parameters of a request (path, query
+-- string, headers).
+--
+-- /See:/ 'newParameterConstraints' smart constructor.
+data ParameterConstraints = ParameterConstraints'
+  { -- | Whether or not the parameter is required.
+    required :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ParameterConstraints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'required', 'parameterConstraints_required' - Whether or not the parameter is required.
+newParameterConstraints ::
+  ParameterConstraints
+newParameterConstraints =
+  ParameterConstraints' {required = Prelude.Nothing}
+
+-- | Whether or not the parameter is required.
+parameterConstraints_required :: Lens.Lens' ParameterConstraints (Prelude.Maybe Prelude.Bool)
+parameterConstraints_required = Lens.lens (\ParameterConstraints' {required} -> required) (\s@ParameterConstraints' {} a -> s {required = a} :: ParameterConstraints)
+
+instance Data.FromJSON ParameterConstraints where
+  parseJSON =
+    Data.withObject
+      "ParameterConstraints"
+      ( \x ->
+          ParameterConstraints'
+            Prelude.<$> (x Data..:? "required")
+      )
+
+instance Prelude.Hashable ParameterConstraints where
+  hashWithSalt _salt ParameterConstraints' {..} =
+    _salt `Prelude.hashWithSalt` required
+
+instance Prelude.NFData ParameterConstraints where
+  rnf ParameterConstraints' {..} = Prelude.rnf required
+
+instance Data.ToJSON ParameterConstraints where
+  toJSON ParameterConstraints' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("required" Data..=) Prelude.<$> required]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/PassthroughBehavior.hs b/gen/Amazonka/ApiGatewayV2/Types/PassthroughBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/PassthroughBehavior.hs
@@ -0,0 +1,78 @@
+{-# 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.ApiGatewayV2.Types.PassthroughBehavior
+-- 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.ApiGatewayV2.Types.PassthroughBehavior
+  ( PassthroughBehavior
+      ( ..,
+        PassthroughBehavior_NEVER,
+        PassthroughBehavior_WHEN_NO_MATCH,
+        PassthroughBehavior_WHEN_NO_TEMPLATES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents passthrough behavior for an integration response. Supported
+-- only for WebSocket APIs.
+newtype PassthroughBehavior = PassthroughBehavior'
+  { fromPassthroughBehavior ::
+      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 PassthroughBehavior_NEVER :: PassthroughBehavior
+pattern PassthroughBehavior_NEVER = PassthroughBehavior' "NEVER"
+
+pattern PassthroughBehavior_WHEN_NO_MATCH :: PassthroughBehavior
+pattern PassthroughBehavior_WHEN_NO_MATCH = PassthroughBehavior' "WHEN_NO_MATCH"
+
+pattern PassthroughBehavior_WHEN_NO_TEMPLATES :: PassthroughBehavior
+pattern PassthroughBehavior_WHEN_NO_TEMPLATES = PassthroughBehavior' "WHEN_NO_TEMPLATES"
+
+{-# COMPLETE
+  PassthroughBehavior_NEVER,
+  PassthroughBehavior_WHEN_NO_MATCH,
+  PassthroughBehavior_WHEN_NO_TEMPLATES,
+  PassthroughBehavior'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/ProtocolType.hs b/gen/Amazonka/ApiGatewayV2/Types/ProtocolType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/ProtocolType.hs
@@ -0,0 +1,72 @@
+{-# 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.ApiGatewayV2.Types.ProtocolType
+-- 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.ApiGatewayV2.Types.ProtocolType
+  ( ProtocolType
+      ( ..,
+        ProtocolType_HTTP,
+        ProtocolType_WEBSOCKET
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a protocol type.
+newtype ProtocolType = ProtocolType'
+  { fromProtocolType ::
+      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 ProtocolType_HTTP :: ProtocolType
+pattern ProtocolType_HTTP = ProtocolType' "HTTP"
+
+pattern ProtocolType_WEBSOCKET :: ProtocolType
+pattern ProtocolType_WEBSOCKET = ProtocolType' "WEBSOCKET"
+
+{-# COMPLETE
+  ProtocolType_HTTP,
+  ProtocolType_WEBSOCKET,
+  ProtocolType'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Route.hs b/gen/Amazonka/ApiGatewayV2/Types/Route.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Route.hs
@@ -0,0 +1,280 @@
+{-# 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.ApiGatewayV2.Types.Route
+-- 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.ApiGatewayV2.Types.Route where
+
+import Amazonka.ApiGatewayV2.Types.AuthorizationType
+import Amazonka.ApiGatewayV2.Types.ParameterConstraints
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a route.
+--
+-- /See:/ 'newRoute' smart constructor.
+data Route = Route'
+  { -- | Specifies whether a route is managed by API Gateway. If you created an
+    -- API using quick create, the $default route is managed by API Gateway.
+    -- You can\'t modify the $default route key.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether an API key is required for this route. Supported only
+    -- for WebSocket APIs.
+    apiKeyRequired :: Prelude.Maybe Prelude.Bool,
+    -- | A list of authorization scopes configured on a route. The scopes are
+    -- used with a JWT authorizer to authorize the method invocation. The
+    -- authorization works by matching the route scopes against the scopes
+    -- parsed from the access token in the incoming request. The method
+    -- invocation is authorized if any route scope matches a claimed scope in
+    -- the access token. Otherwise, the invocation is not authorized. When the
+    -- route scope is configured, the client must provide an access token
+    -- instead of an identity token for authorization purposes.
+    authorizationScopes :: Prelude.Maybe [Prelude.Text],
+    -- | The authorization type for the route. For WebSocket APIs, valid values
+    -- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+    -- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+    -- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+    -- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+    authorizationType :: Prelude.Maybe AuthorizationType,
+    -- | The identifier of the Authorizer resource to be associated with this
+    -- route. The authorizer identifier is generated by API Gateway when you
+    -- created the authorizer.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | The model selection expression for the route. Supported only for
+    -- WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The operation name for the route.
+    operationName :: Prelude.Maybe Prelude.Text,
+    -- | The request models for the route. Supported only for WebSocket APIs.
+    requestModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The request parameters for the route. Supported only for WebSocket APIs.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The route ID.
+    routeId :: Prelude.Maybe Prelude.Text,
+    -- | The route response selection expression for the route. Supported only
+    -- for WebSocket APIs.
+    routeResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The target for the route.
+    target :: Prelude.Maybe Prelude.Text,
+    -- | The route key for the route.
+    routeKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Route' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'route_apiGatewayManaged' - Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+--
+-- 'apiKeyRequired', 'route_apiKeyRequired' - Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+--
+-- 'authorizationScopes', 'route_authorizationScopes' - A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+--
+-- 'authorizationType', 'route_authorizationType' - The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+--
+-- 'authorizerId', 'route_authorizerId' - The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+--
+-- 'modelSelectionExpression', 'route_modelSelectionExpression' - The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+--
+-- 'operationName', 'route_operationName' - The operation name for the route.
+--
+-- 'requestModels', 'route_requestModels' - The request models for the route. Supported only for WebSocket APIs.
+--
+-- 'requestParameters', 'route_requestParameters' - The request parameters for the route. Supported only for WebSocket APIs.
+--
+-- 'routeId', 'route_routeId' - The route ID.
+--
+-- 'routeResponseSelectionExpression', 'route_routeResponseSelectionExpression' - The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'target', 'route_target' - The target for the route.
+--
+-- 'routeKey', 'route_routeKey' - The route key for the route.
+newRoute ::
+  -- | 'routeKey'
+  Prelude.Text ->
+  Route
+newRoute pRouteKey_ =
+  Route'
+    { apiGatewayManaged = Prelude.Nothing,
+      apiKeyRequired = Prelude.Nothing,
+      authorizationScopes = Prelude.Nothing,
+      authorizationType = Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      modelSelectionExpression = Prelude.Nothing,
+      operationName = Prelude.Nothing,
+      requestModels = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      routeId = Prelude.Nothing,
+      routeResponseSelectionExpression = Prelude.Nothing,
+      target = Prelude.Nothing,
+      routeKey = pRouteKey_
+    }
+
+-- | Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+route_apiGatewayManaged :: Lens.Lens' Route (Prelude.Maybe Prelude.Bool)
+route_apiGatewayManaged = Lens.lens (\Route' {apiGatewayManaged} -> apiGatewayManaged) (\s@Route' {} a -> s {apiGatewayManaged = a} :: Route)
+
+-- | Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+route_apiKeyRequired :: Lens.Lens' Route (Prelude.Maybe Prelude.Bool)
+route_apiKeyRequired = Lens.lens (\Route' {apiKeyRequired} -> apiKeyRequired) (\s@Route' {} a -> s {apiKeyRequired = a} :: Route)
+
+-- | A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+route_authorizationScopes :: Lens.Lens' Route (Prelude.Maybe [Prelude.Text])
+route_authorizationScopes = Lens.lens (\Route' {authorizationScopes} -> authorizationScopes) (\s@Route' {} a -> s {authorizationScopes = a} :: Route) Prelude.. Lens.mapping Lens.coerced
+
+-- | The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+route_authorizationType :: Lens.Lens' Route (Prelude.Maybe AuthorizationType)
+route_authorizationType = Lens.lens (\Route' {authorizationType} -> authorizationType) (\s@Route' {} a -> s {authorizationType = a} :: Route)
+
+-- | The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+route_authorizerId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_authorizerId = Lens.lens (\Route' {authorizerId} -> authorizerId) (\s@Route' {} a -> s {authorizerId = a} :: Route)
+
+-- | The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+route_modelSelectionExpression :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_modelSelectionExpression = Lens.lens (\Route' {modelSelectionExpression} -> modelSelectionExpression) (\s@Route' {} a -> s {modelSelectionExpression = a} :: Route)
+
+-- | The operation name for the route.
+route_operationName :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_operationName = Lens.lens (\Route' {operationName} -> operationName) (\s@Route' {} a -> s {operationName = a} :: Route)
+
+-- | The request models for the route. Supported only for WebSocket APIs.
+route_requestModels :: Lens.Lens' Route (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+route_requestModels = Lens.lens (\Route' {requestModels} -> requestModels) (\s@Route' {} a -> s {requestModels = a} :: Route) Prelude.. Lens.mapping Lens.coerced
+
+-- | The request parameters for the route. Supported only for WebSocket APIs.
+route_requestParameters :: Lens.Lens' Route (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+route_requestParameters = Lens.lens (\Route' {requestParameters} -> requestParameters) (\s@Route' {} a -> s {requestParameters = a} :: Route) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route ID.
+route_routeId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_routeId = Lens.lens (\Route' {routeId} -> routeId) (\s@Route' {} a -> s {routeId = a} :: Route)
+
+-- | The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+route_routeResponseSelectionExpression :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_routeResponseSelectionExpression = Lens.lens (\Route' {routeResponseSelectionExpression} -> routeResponseSelectionExpression) (\s@Route' {} a -> s {routeResponseSelectionExpression = a} :: Route)
+
+-- | The target for the route.
+route_target :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_target = Lens.lens (\Route' {target} -> target) (\s@Route' {} a -> s {target = a} :: Route)
+
+-- | The route key for the route.
+route_routeKey :: Lens.Lens' Route Prelude.Text
+route_routeKey = Lens.lens (\Route' {routeKey} -> routeKey) (\s@Route' {} a -> s {routeKey = a} :: Route)
+
+instance Data.FromJSON Route where
+  parseJSON =
+    Data.withObject
+      "Route"
+      ( \x ->
+          Route'
+            Prelude.<$> (x Data..:? "apiGatewayManaged")
+            Prelude.<*> (x Data..:? "apiKeyRequired")
+            Prelude.<*> ( x
+                            Data..:? "authorizationScopes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "authorizationType")
+            Prelude.<*> (x Data..:? "authorizerId")
+            Prelude.<*> (x Data..:? "modelSelectionExpression")
+            Prelude.<*> (x Data..:? "operationName")
+            Prelude.<*> (x Data..:? "requestModels" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "requestParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "routeId")
+            Prelude.<*> (x Data..:? "routeResponseSelectionExpression")
+            Prelude.<*> (x Data..:? "target")
+            Prelude.<*> (x Data..: "routeKey")
+      )
+
+instance Prelude.Hashable Route where
+  hashWithSalt _salt Route' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiGatewayManaged
+      `Prelude.hashWithSalt` apiKeyRequired
+      `Prelude.hashWithSalt` authorizationScopes
+      `Prelude.hashWithSalt` authorizationType
+      `Prelude.hashWithSalt` authorizerId
+      `Prelude.hashWithSalt` modelSelectionExpression
+      `Prelude.hashWithSalt` operationName
+      `Prelude.hashWithSalt` requestModels
+      `Prelude.hashWithSalt` requestParameters
+      `Prelude.hashWithSalt` routeId
+      `Prelude.hashWithSalt` routeResponseSelectionExpression
+      `Prelude.hashWithSalt` target
+      `Prelude.hashWithSalt` routeKey
+
+instance Prelude.NFData Route where
+  rnf Route' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiKeyRequired
+      `Prelude.seq` Prelude.rnf authorizationScopes
+      `Prelude.seq` Prelude.rnf authorizationType
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf operationName
+      `Prelude.seq` Prelude.rnf requestModels
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf routeId
+      `Prelude.seq` Prelude.rnf routeResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf routeKey
diff --git a/gen/Amazonka/ApiGatewayV2/Types/RouteResponse.hs b/gen/Amazonka/ApiGatewayV2/Types/RouteResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/RouteResponse.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.ApiGatewayV2.Types.RouteResponse
+-- 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.ApiGatewayV2.Types.RouteResponse where
+
+import Amazonka.ApiGatewayV2.Types.ParameterConstraints
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a route response.
+--
+-- /See:/ 'newRouteResponse' smart constructor.
+data RouteResponse = RouteResponse'
+  { -- | Represents the model selection expression of a route response. Supported
+    -- only for WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the response models of a route response.
+    responseModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents the response parameters of a route response.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | Represents the identifier of a route response.
+    routeResponseId :: Prelude.Maybe Prelude.Text,
+    -- | Represents the route response key of a route response.
+    routeResponseKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelSelectionExpression', 'routeResponse_modelSelectionExpression' - Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+--
+-- 'responseModels', 'routeResponse_responseModels' - Represents the response models of a route response.
+--
+-- 'responseParameters', 'routeResponse_responseParameters' - Represents the response parameters of a route response.
+--
+-- 'routeResponseId', 'routeResponse_routeResponseId' - Represents the identifier of a route response.
+--
+-- 'routeResponseKey', 'routeResponse_routeResponseKey' - Represents the route response key of a route response.
+newRouteResponse ::
+  -- | 'routeResponseKey'
+  Prelude.Text ->
+  RouteResponse
+newRouteResponse pRouteResponseKey_ =
+  RouteResponse'
+    { modelSelectionExpression =
+        Prelude.Nothing,
+      responseModels = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      routeResponseId = Prelude.Nothing,
+      routeResponseKey = pRouteResponseKey_
+    }
+
+-- | Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+routeResponse_modelSelectionExpression :: Lens.Lens' RouteResponse (Prelude.Maybe Prelude.Text)
+routeResponse_modelSelectionExpression = Lens.lens (\RouteResponse' {modelSelectionExpression} -> modelSelectionExpression) (\s@RouteResponse' {} a -> s {modelSelectionExpression = a} :: RouteResponse)
+
+-- | Represents the response models of a route response.
+routeResponse_responseModels :: Lens.Lens' RouteResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+routeResponse_responseModels = Lens.lens (\RouteResponse' {responseModels} -> responseModels) (\s@RouteResponse' {} a -> s {responseModels = a} :: RouteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the response parameters of a route response.
+routeResponse_responseParameters :: Lens.Lens' RouteResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+routeResponse_responseParameters = Lens.lens (\RouteResponse' {responseParameters} -> responseParameters) (\s@RouteResponse' {} a -> s {responseParameters = a} :: RouteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the identifier of a route response.
+routeResponse_routeResponseId :: Lens.Lens' RouteResponse (Prelude.Maybe Prelude.Text)
+routeResponse_routeResponseId = Lens.lens (\RouteResponse' {routeResponseId} -> routeResponseId) (\s@RouteResponse' {} a -> s {routeResponseId = a} :: RouteResponse)
+
+-- | Represents the route response key of a route response.
+routeResponse_routeResponseKey :: Lens.Lens' RouteResponse Prelude.Text
+routeResponse_routeResponseKey = Lens.lens (\RouteResponse' {routeResponseKey} -> routeResponseKey) (\s@RouteResponse' {} a -> s {routeResponseKey = a} :: RouteResponse)
+
+instance Data.FromJSON RouteResponse where
+  parseJSON =
+    Data.withObject
+      "RouteResponse"
+      ( \x ->
+          RouteResponse'
+            Prelude.<$> (x Data..:? "modelSelectionExpression")
+            Prelude.<*> (x Data..:? "responseModels" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "responseParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "routeResponseId")
+            Prelude.<*> (x Data..: "routeResponseKey")
+      )
+
+instance Prelude.Hashable RouteResponse where
+  hashWithSalt _salt RouteResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelSelectionExpression
+      `Prelude.hashWithSalt` responseModels
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` routeResponseId
+      `Prelude.hashWithSalt` routeResponseKey
+
+instance Prelude.NFData RouteResponse where
+  rnf RouteResponse' {..} =
+    Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf responseModels
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf routeResponseId
+      `Prelude.seq` Prelude.rnf routeResponseKey
diff --git a/gen/Amazonka/ApiGatewayV2/Types/RouteSettings.hs b/gen/Amazonka/ApiGatewayV2/Types/RouteSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/RouteSettings.hs
@@ -0,0 +1,149 @@
+{-# 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.ApiGatewayV2.Types.RouteSettings
+-- 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.ApiGatewayV2.Types.RouteSettings where
+
+import Amazonka.ApiGatewayV2.Types.LoggingLevel
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a collection of route settings.
+--
+-- /See:/ 'newRouteSettings' smart constructor.
+data RouteSettings = RouteSettings'
+  { -- | Specifies whether (true) or not (false) data trace logging is enabled
+    -- for this route. This property affects the log entries pushed to Amazon
+    -- CloudWatch Logs. Supported only for WebSocket APIs.
+    dataTraceEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether detailed metrics are enabled.
+    detailedMetricsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies the logging level for this route: INFO, ERROR, or OFF. This
+    -- property affects the log entries pushed to Amazon CloudWatch Logs.
+    -- Supported only for WebSocket APIs.
+    loggingLevel :: Prelude.Maybe LoggingLevel,
+    -- | Specifies the throttling burst limit.
+    throttlingBurstLimit :: Prelude.Maybe Prelude.Int,
+    -- | Specifies the throttling rate limit.
+    throttlingRateLimit :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RouteSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataTraceEnabled', 'routeSettings_dataTraceEnabled' - Specifies whether (true) or not (false) data trace logging is enabled
+-- for this route. This property affects the log entries pushed to Amazon
+-- CloudWatch Logs. Supported only for WebSocket APIs.
+--
+-- 'detailedMetricsEnabled', 'routeSettings_detailedMetricsEnabled' - Specifies whether detailed metrics are enabled.
+--
+-- 'loggingLevel', 'routeSettings_loggingLevel' - Specifies the logging level for this route: INFO, ERROR, or OFF. This
+-- property affects the log entries pushed to Amazon CloudWatch Logs.
+-- Supported only for WebSocket APIs.
+--
+-- 'throttlingBurstLimit', 'routeSettings_throttlingBurstLimit' - Specifies the throttling burst limit.
+--
+-- 'throttlingRateLimit', 'routeSettings_throttlingRateLimit' - Specifies the throttling rate limit.
+newRouteSettings ::
+  RouteSettings
+newRouteSettings =
+  RouteSettings'
+    { dataTraceEnabled = Prelude.Nothing,
+      detailedMetricsEnabled = Prelude.Nothing,
+      loggingLevel = Prelude.Nothing,
+      throttlingBurstLimit = Prelude.Nothing,
+      throttlingRateLimit = Prelude.Nothing
+    }
+
+-- | Specifies whether (true) or not (false) data trace logging is enabled
+-- for this route. This property affects the log entries pushed to Amazon
+-- CloudWatch Logs. Supported only for WebSocket APIs.
+routeSettings_dataTraceEnabled :: Lens.Lens' RouteSettings (Prelude.Maybe Prelude.Bool)
+routeSettings_dataTraceEnabled = Lens.lens (\RouteSettings' {dataTraceEnabled} -> dataTraceEnabled) (\s@RouteSettings' {} a -> s {dataTraceEnabled = a} :: RouteSettings)
+
+-- | Specifies whether detailed metrics are enabled.
+routeSettings_detailedMetricsEnabled :: Lens.Lens' RouteSettings (Prelude.Maybe Prelude.Bool)
+routeSettings_detailedMetricsEnabled = Lens.lens (\RouteSettings' {detailedMetricsEnabled} -> detailedMetricsEnabled) (\s@RouteSettings' {} a -> s {detailedMetricsEnabled = a} :: RouteSettings)
+
+-- | Specifies the logging level for this route: INFO, ERROR, or OFF. This
+-- property affects the log entries pushed to Amazon CloudWatch Logs.
+-- Supported only for WebSocket APIs.
+routeSettings_loggingLevel :: Lens.Lens' RouteSettings (Prelude.Maybe LoggingLevel)
+routeSettings_loggingLevel = Lens.lens (\RouteSettings' {loggingLevel} -> loggingLevel) (\s@RouteSettings' {} a -> s {loggingLevel = a} :: RouteSettings)
+
+-- | Specifies the throttling burst limit.
+routeSettings_throttlingBurstLimit :: Lens.Lens' RouteSettings (Prelude.Maybe Prelude.Int)
+routeSettings_throttlingBurstLimit = Lens.lens (\RouteSettings' {throttlingBurstLimit} -> throttlingBurstLimit) (\s@RouteSettings' {} a -> s {throttlingBurstLimit = a} :: RouteSettings)
+
+-- | Specifies the throttling rate limit.
+routeSettings_throttlingRateLimit :: Lens.Lens' RouteSettings (Prelude.Maybe Prelude.Double)
+routeSettings_throttlingRateLimit = Lens.lens (\RouteSettings' {throttlingRateLimit} -> throttlingRateLimit) (\s@RouteSettings' {} a -> s {throttlingRateLimit = a} :: RouteSettings)
+
+instance Data.FromJSON RouteSettings where
+  parseJSON =
+    Data.withObject
+      "RouteSettings"
+      ( \x ->
+          RouteSettings'
+            Prelude.<$> (x Data..:? "dataTraceEnabled")
+            Prelude.<*> (x Data..:? "detailedMetricsEnabled")
+            Prelude.<*> (x Data..:? "loggingLevel")
+            Prelude.<*> (x Data..:? "throttlingBurstLimit")
+            Prelude.<*> (x Data..:? "throttlingRateLimit")
+      )
+
+instance Prelude.Hashable RouteSettings where
+  hashWithSalt _salt RouteSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataTraceEnabled
+      `Prelude.hashWithSalt` detailedMetricsEnabled
+      `Prelude.hashWithSalt` loggingLevel
+      `Prelude.hashWithSalt` throttlingBurstLimit
+      `Prelude.hashWithSalt` throttlingRateLimit
+
+instance Prelude.NFData RouteSettings where
+  rnf RouteSettings' {..} =
+    Prelude.rnf dataTraceEnabled
+      `Prelude.seq` Prelude.rnf detailedMetricsEnabled
+      `Prelude.seq` Prelude.rnf loggingLevel
+      `Prelude.seq` Prelude.rnf throttlingBurstLimit
+      `Prelude.seq` Prelude.rnf throttlingRateLimit
+
+instance Data.ToJSON RouteSettings where
+  toJSON RouteSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dataTraceEnabled" Data..=)
+              Prelude.<$> dataTraceEnabled,
+            ("detailedMetricsEnabled" Data..=)
+              Prelude.<$> detailedMetricsEnabled,
+            ("loggingLevel" Data..=) Prelude.<$> loggingLevel,
+            ("throttlingBurstLimit" Data..=)
+              Prelude.<$> throttlingBurstLimit,
+            ("throttlingRateLimit" Data..=)
+              Prelude.<$> throttlingRateLimit
+          ]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/SecurityPolicy.hs b/gen/Amazonka/ApiGatewayV2/Types/SecurityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/SecurityPolicy.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.ApiGatewayV2.Types.SecurityPolicy
+-- 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.ApiGatewayV2.Types.SecurityPolicy
+  ( SecurityPolicy
+      ( ..,
+        SecurityPolicy_TLS_1_0,
+        SecurityPolicy_TLS_1_2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Transport Layer Security (TLS) version of the security policy for
+-- this domain name. The valid values are TLS_1_0 and TLS_1_2.
+newtype SecurityPolicy = SecurityPolicy'
+  { fromSecurityPolicy ::
+      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 SecurityPolicy_TLS_1_0 :: SecurityPolicy
+pattern SecurityPolicy_TLS_1_0 = SecurityPolicy' "TLS_1_0"
+
+pattern SecurityPolicy_TLS_1_2 :: SecurityPolicy
+pattern SecurityPolicy_TLS_1_2 = SecurityPolicy' "TLS_1_2"
+
+{-# COMPLETE
+  SecurityPolicy_TLS_1_0,
+  SecurityPolicy_TLS_1_2,
+  SecurityPolicy'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/Stage.hs b/gen/Amazonka/ApiGatewayV2/Types/Stage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/Stage.hs
@@ -0,0 +1,259 @@
+{-# 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.ApiGatewayV2.Types.Stage
+-- 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.ApiGatewayV2.Types.Stage where
+
+import Amazonka.ApiGatewayV2.Types.AccessLogSettings
+import Amazonka.ApiGatewayV2.Types.RouteSettings
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents an API stage.
+--
+-- /See:/ 'newStage' smart constructor.
+data Stage = Stage'
+  { -- | Settings for logging access in this stage.
+    accessLogSettings :: Prelude.Maybe AccessLogSettings,
+    -- | Specifies whether a stage is managed by API Gateway. If you created an
+    -- API using quick create, the $default stage is managed by API Gateway.
+    -- You can\'t modify the $default stage.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether updates to an API automatically trigger a new
+    -- deployment. The default value is false.
+    autoDeploy :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of a client certificate for a Stage. Supported only for
+    -- WebSocket APIs.
+    clientCertificateId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | Default route settings for the stage.
+    defaultRouteSettings :: Prelude.Maybe RouteSettings,
+    -- | The identifier of the Deployment that the Stage is associated with.
+    -- Can\'t be updated if autoDeploy is enabled.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Describes the status of the last deployment of a stage. Supported only
+    -- for stages with autoDeploy enabled.
+    lastDeploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was last updated.
+    lastUpdatedDate :: Prelude.Maybe Data.ISO8601,
+    -- | Route settings for the stage, by routeKey.
+    routeSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings),
+    -- | A map that defines the stage variables for a stage resource. Variable
+    -- names can have alphanumeric and underscore characters, and the values
+    -- must match [A-Za-z0-9-._~:\/?#&=,]+.
+    stageVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of tags. Each tag element is associated with a given
+    -- resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the stage.
+    stageName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Stage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessLogSettings', 'stage_accessLogSettings' - Settings for logging access in this stage.
+--
+-- 'apiGatewayManaged', 'stage_apiGatewayManaged' - Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+--
+-- 'autoDeploy', 'stage_autoDeploy' - Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+--
+-- 'clientCertificateId', 'stage_clientCertificateId' - The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+--
+-- 'createdDate', 'stage_createdDate' - The timestamp when the stage was created.
+--
+-- 'defaultRouteSettings', 'stage_defaultRouteSettings' - Default route settings for the stage.
+--
+-- 'deploymentId', 'stage_deploymentId' - The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+--
+-- 'description', 'stage_description' - The description of the stage.
+--
+-- 'lastDeploymentStatusMessage', 'stage_lastDeploymentStatusMessage' - Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+--
+-- 'lastUpdatedDate', 'stage_lastUpdatedDate' - The timestamp when the stage was last updated.
+--
+-- 'routeSettings', 'stage_routeSettings' - Route settings for the stage, by routeKey.
+--
+-- 'stageVariables', 'stage_stageVariables' - A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+--
+-- 'tags', 'stage_tags' - The collection of tags. Each tag element is associated with a given
+-- resource.
+--
+-- 'stageName', 'stage_stageName' - The name of the stage.
+newStage ::
+  -- | 'stageName'
+  Prelude.Text ->
+  Stage
+newStage pStageName_ =
+  Stage'
+    { accessLogSettings = Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      autoDeploy = Prelude.Nothing,
+      clientCertificateId = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      defaultRouteSettings = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastDeploymentStatusMessage = Prelude.Nothing,
+      lastUpdatedDate = Prelude.Nothing,
+      routeSettings = Prelude.Nothing,
+      stageVariables = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      stageName = pStageName_
+    }
+
+-- | Settings for logging access in this stage.
+stage_accessLogSettings :: Lens.Lens' Stage (Prelude.Maybe AccessLogSettings)
+stage_accessLogSettings = Lens.lens (\Stage' {accessLogSettings} -> accessLogSettings) (\s@Stage' {} a -> s {accessLogSettings = a} :: Stage)
+
+-- | Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+stage_apiGatewayManaged :: Lens.Lens' Stage (Prelude.Maybe Prelude.Bool)
+stage_apiGatewayManaged = Lens.lens (\Stage' {apiGatewayManaged} -> apiGatewayManaged) (\s@Stage' {} a -> s {apiGatewayManaged = a} :: Stage)
+
+-- | Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+stage_autoDeploy :: Lens.Lens' Stage (Prelude.Maybe Prelude.Bool)
+stage_autoDeploy = Lens.lens (\Stage' {autoDeploy} -> autoDeploy) (\s@Stage' {} a -> s {autoDeploy = a} :: Stage)
+
+-- | The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+stage_clientCertificateId :: Lens.Lens' Stage (Prelude.Maybe Prelude.Text)
+stage_clientCertificateId = Lens.lens (\Stage' {clientCertificateId} -> clientCertificateId) (\s@Stage' {} a -> s {clientCertificateId = a} :: Stage)
+
+-- | The timestamp when the stage was created.
+stage_createdDate :: Lens.Lens' Stage (Prelude.Maybe Prelude.UTCTime)
+stage_createdDate = Lens.lens (\Stage' {createdDate} -> createdDate) (\s@Stage' {} a -> s {createdDate = a} :: Stage) Prelude.. Lens.mapping Data._Time
+
+-- | Default route settings for the stage.
+stage_defaultRouteSettings :: Lens.Lens' Stage (Prelude.Maybe RouteSettings)
+stage_defaultRouteSettings = Lens.lens (\Stage' {defaultRouteSettings} -> defaultRouteSettings) (\s@Stage' {} a -> s {defaultRouteSettings = a} :: Stage)
+
+-- | The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+stage_deploymentId :: Lens.Lens' Stage (Prelude.Maybe Prelude.Text)
+stage_deploymentId = Lens.lens (\Stage' {deploymentId} -> deploymentId) (\s@Stage' {} a -> s {deploymentId = a} :: Stage)
+
+-- | The description of the stage.
+stage_description :: Lens.Lens' Stage (Prelude.Maybe Prelude.Text)
+stage_description = Lens.lens (\Stage' {description} -> description) (\s@Stage' {} a -> s {description = a} :: Stage)
+
+-- | Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+stage_lastDeploymentStatusMessage :: Lens.Lens' Stage (Prelude.Maybe Prelude.Text)
+stage_lastDeploymentStatusMessage = Lens.lens (\Stage' {lastDeploymentStatusMessage} -> lastDeploymentStatusMessage) (\s@Stage' {} a -> s {lastDeploymentStatusMessage = a} :: Stage)
+
+-- | The timestamp when the stage was last updated.
+stage_lastUpdatedDate :: Lens.Lens' Stage (Prelude.Maybe Prelude.UTCTime)
+stage_lastUpdatedDate = Lens.lens (\Stage' {lastUpdatedDate} -> lastUpdatedDate) (\s@Stage' {} a -> s {lastUpdatedDate = a} :: Stage) Prelude.. Lens.mapping Data._Time
+
+-- | Route settings for the stage, by routeKey.
+stage_routeSettings :: Lens.Lens' Stage (Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings))
+stage_routeSettings = Lens.lens (\Stage' {routeSettings} -> routeSettings) (\s@Stage' {} a -> s {routeSettings = a} :: Stage) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+stage_stageVariables :: Lens.Lens' Stage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+stage_stageVariables = Lens.lens (\Stage' {stageVariables} -> stageVariables) (\s@Stage' {} a -> s {stageVariables = a} :: Stage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of tags. Each tag element is associated with a given
+-- resource.
+stage_tags :: Lens.Lens' Stage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+stage_tags = Lens.lens (\Stage' {tags} -> tags) (\s@Stage' {} a -> s {tags = a} :: Stage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the stage.
+stage_stageName :: Lens.Lens' Stage Prelude.Text
+stage_stageName = Lens.lens (\Stage' {stageName} -> stageName) (\s@Stage' {} a -> s {stageName = a} :: Stage)
+
+instance Data.FromJSON Stage where
+  parseJSON =
+    Data.withObject
+      "Stage"
+      ( \x ->
+          Stage'
+            Prelude.<$> (x Data..:? "accessLogSettings")
+            Prelude.<*> (x Data..:? "apiGatewayManaged")
+            Prelude.<*> (x Data..:? "autoDeploy")
+            Prelude.<*> (x Data..:? "clientCertificateId")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "defaultRouteSettings")
+            Prelude.<*> (x Data..:? "deploymentId")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastDeploymentStatusMessage")
+            Prelude.<*> (x Data..:? "lastUpdatedDate")
+            Prelude.<*> (x Data..:? "routeSettings" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "stageVariables" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "stageName")
+      )
+
+instance Prelude.Hashable Stage where
+  hashWithSalt _salt Stage' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessLogSettings
+      `Prelude.hashWithSalt` apiGatewayManaged
+      `Prelude.hashWithSalt` autoDeploy
+      `Prelude.hashWithSalt` clientCertificateId
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` defaultRouteSettings
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastDeploymentStatusMessage
+      `Prelude.hashWithSalt` lastUpdatedDate
+      `Prelude.hashWithSalt` routeSettings
+      `Prelude.hashWithSalt` stageVariables
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData Stage where
+  rnf Stage' {..} =
+    Prelude.rnf accessLogSettings
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf autoDeploy
+      `Prelude.seq` Prelude.rnf clientCertificateId
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf defaultRouteSettings
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastDeploymentStatusMessage
+      `Prelude.seq` Prelude.rnf lastUpdatedDate
+      `Prelude.seq` Prelude.rnf routeSettings
+      `Prelude.seq` Prelude.rnf stageVariables
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf stageName
diff --git a/gen/Amazonka/ApiGatewayV2/Types/TlsConfig.hs b/gen/Amazonka/ApiGatewayV2/Types/TlsConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/TlsConfig.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.Types.TlsConfig
+-- 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.ApiGatewayV2.Types.TlsConfig 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 TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+--
+-- /See:/ 'newTlsConfig' smart constructor.
+data TlsConfig = TlsConfig'
+  { -- | If you specify a server name, API Gateway uses it to verify the hostname
+    -- on the integration\'s certificate. The server name is also included in
+    -- the TLS handshake to support Server Name Indication (SNI) or virtual
+    -- hosting.
+    serverNameToVerify :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TlsConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serverNameToVerify', 'tlsConfig_serverNameToVerify' - If you specify a server name, API Gateway uses it to verify the hostname
+-- on the integration\'s certificate. The server name is also included in
+-- the TLS handshake to support Server Name Indication (SNI) or virtual
+-- hosting.
+newTlsConfig ::
+  TlsConfig
+newTlsConfig =
+  TlsConfig' {serverNameToVerify = Prelude.Nothing}
+
+-- | If you specify a server name, API Gateway uses it to verify the hostname
+-- on the integration\'s certificate. The server name is also included in
+-- the TLS handshake to support Server Name Indication (SNI) or virtual
+-- hosting.
+tlsConfig_serverNameToVerify :: Lens.Lens' TlsConfig (Prelude.Maybe Prelude.Text)
+tlsConfig_serverNameToVerify = Lens.lens (\TlsConfig' {serverNameToVerify} -> serverNameToVerify) (\s@TlsConfig' {} a -> s {serverNameToVerify = a} :: TlsConfig)
+
+instance Data.FromJSON TlsConfig where
+  parseJSON =
+    Data.withObject
+      "TlsConfig"
+      ( \x ->
+          TlsConfig'
+            Prelude.<$> (x Data..:? "serverNameToVerify")
+      )
+
+instance Prelude.Hashable TlsConfig where
+  hashWithSalt _salt TlsConfig' {..} =
+    _salt `Prelude.hashWithSalt` serverNameToVerify
+
+instance Prelude.NFData TlsConfig where
+  rnf TlsConfig' {..} = Prelude.rnf serverNameToVerify
diff --git a/gen/Amazonka/ApiGatewayV2/Types/TlsConfigInput.hs b/gen/Amazonka/ApiGatewayV2/Types/TlsConfigInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/TlsConfigInput.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.Types.TlsConfigInput
+-- 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.ApiGatewayV2.Types.TlsConfigInput 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 TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+--
+-- /See:/ 'newTlsConfigInput' smart constructor.
+data TlsConfigInput = TlsConfigInput'
+  { -- | If you specify a server name, API Gateway uses it to verify the hostname
+    -- on the integration\'s certificate. The server name is also included in
+    -- the TLS handshake to support Server Name Indication (SNI) or virtual
+    -- hosting.
+    serverNameToVerify :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TlsConfigInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serverNameToVerify', 'tlsConfigInput_serverNameToVerify' - If you specify a server name, API Gateway uses it to verify the hostname
+-- on the integration\'s certificate. The server name is also included in
+-- the TLS handshake to support Server Name Indication (SNI) or virtual
+-- hosting.
+newTlsConfigInput ::
+  TlsConfigInput
+newTlsConfigInput =
+  TlsConfigInput'
+    { serverNameToVerify =
+        Prelude.Nothing
+    }
+
+-- | If you specify a server name, API Gateway uses it to verify the hostname
+-- on the integration\'s certificate. The server name is also included in
+-- the TLS handshake to support Server Name Indication (SNI) or virtual
+-- hosting.
+tlsConfigInput_serverNameToVerify :: Lens.Lens' TlsConfigInput (Prelude.Maybe Prelude.Text)
+tlsConfigInput_serverNameToVerify = Lens.lens (\TlsConfigInput' {serverNameToVerify} -> serverNameToVerify) (\s@TlsConfigInput' {} a -> s {serverNameToVerify = a} :: TlsConfigInput)
+
+instance Prelude.Hashable TlsConfigInput where
+  hashWithSalt _salt TlsConfigInput' {..} =
+    _salt `Prelude.hashWithSalt` serverNameToVerify
+
+instance Prelude.NFData TlsConfigInput where
+  rnf TlsConfigInput' {..} =
+    Prelude.rnf serverNameToVerify
+
+instance Data.ToJSON TlsConfigInput where
+  toJSON TlsConfigInput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("serverNameToVerify" Data..=)
+              Prelude.<$> serverNameToVerify
+          ]
+      )
diff --git a/gen/Amazonka/ApiGatewayV2/Types/VpcLink.hs b/gen/Amazonka/ApiGatewayV2/Types/VpcLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/VpcLink.hs
@@ -0,0 +1,177 @@
+{-# 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.ApiGatewayV2.Types.VpcLink
+-- 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.ApiGatewayV2.Types.VpcLink where
+
+import Amazonka.ApiGatewayV2.Types.VpcLinkStatus
+import Amazonka.ApiGatewayV2.Types.VpcLinkVersion
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a VPC link.
+--
+-- /See:/ 'newVpcLink' smart constructor.
+data VpcLink = VpcLink'
+  { -- | The timestamp when the VPC link was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | Tags for the VPC link.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The status of the VPC link.
+    vpcLinkStatus :: Prelude.Maybe VpcLinkStatus,
+    -- | A message summarizing the cause of the status of the VPC link.
+    vpcLinkStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The version of the VPC link.
+    vpcLinkVersion :: Prelude.Maybe VpcLinkVersion,
+    -- | The ID of the VPC link.
+    vpcLinkId :: Prelude.Text,
+    -- | A list of security group IDs for the VPC link.
+    securityGroupIds :: [Prelude.Text],
+    -- | A list of subnet IDs to include in the VPC link.
+    subnetIds :: [Prelude.Text],
+    -- | The name of the VPC link.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'vpcLink_createdDate' - The timestamp when the VPC link was created.
+--
+-- 'tags', 'vpcLink_tags' - Tags for the VPC link.
+--
+-- 'vpcLinkStatus', 'vpcLink_vpcLinkStatus' - The status of the VPC link.
+--
+-- 'vpcLinkStatusMessage', 'vpcLink_vpcLinkStatusMessage' - A message summarizing the cause of the status of the VPC link.
+--
+-- 'vpcLinkVersion', 'vpcLink_vpcLinkVersion' - The version of the VPC link.
+--
+-- 'vpcLinkId', 'vpcLink_vpcLinkId' - The ID of the VPC link.
+--
+-- 'securityGroupIds', 'vpcLink_securityGroupIds' - A list of security group IDs for the VPC link.
+--
+-- 'subnetIds', 'vpcLink_subnetIds' - A list of subnet IDs to include in the VPC link.
+--
+-- 'name', 'vpcLink_name' - The name of the VPC link.
+newVpcLink ::
+  -- | 'vpcLinkId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  VpcLink
+newVpcLink pVpcLinkId_ pName_ =
+  VpcLink'
+    { createdDate = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcLinkStatus = Prelude.Nothing,
+      vpcLinkStatusMessage = Prelude.Nothing,
+      vpcLinkVersion = Prelude.Nothing,
+      vpcLinkId = pVpcLinkId_,
+      securityGroupIds = Prelude.mempty,
+      subnetIds = Prelude.mempty,
+      name = pName_
+    }
+
+-- | The timestamp when the VPC link was created.
+vpcLink_createdDate :: Lens.Lens' VpcLink (Prelude.Maybe Prelude.UTCTime)
+vpcLink_createdDate = Lens.lens (\VpcLink' {createdDate} -> createdDate) (\s@VpcLink' {} a -> s {createdDate = a} :: VpcLink) Prelude.. Lens.mapping Data._Time
+
+-- | Tags for the VPC link.
+vpcLink_tags :: Lens.Lens' VpcLink (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+vpcLink_tags = Lens.lens (\VpcLink' {tags} -> tags) (\s@VpcLink' {} a -> s {tags = a} :: VpcLink) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the VPC link.
+vpcLink_vpcLinkStatus :: Lens.Lens' VpcLink (Prelude.Maybe VpcLinkStatus)
+vpcLink_vpcLinkStatus = Lens.lens (\VpcLink' {vpcLinkStatus} -> vpcLinkStatus) (\s@VpcLink' {} a -> s {vpcLinkStatus = a} :: VpcLink)
+
+-- | A message summarizing the cause of the status of the VPC link.
+vpcLink_vpcLinkStatusMessage :: Lens.Lens' VpcLink (Prelude.Maybe Prelude.Text)
+vpcLink_vpcLinkStatusMessage = Lens.lens (\VpcLink' {vpcLinkStatusMessage} -> vpcLinkStatusMessage) (\s@VpcLink' {} a -> s {vpcLinkStatusMessage = a} :: VpcLink)
+
+-- | The version of the VPC link.
+vpcLink_vpcLinkVersion :: Lens.Lens' VpcLink (Prelude.Maybe VpcLinkVersion)
+vpcLink_vpcLinkVersion = Lens.lens (\VpcLink' {vpcLinkVersion} -> vpcLinkVersion) (\s@VpcLink' {} a -> s {vpcLinkVersion = a} :: VpcLink)
+
+-- | The ID of the VPC link.
+vpcLink_vpcLinkId :: Lens.Lens' VpcLink Prelude.Text
+vpcLink_vpcLinkId = Lens.lens (\VpcLink' {vpcLinkId} -> vpcLinkId) (\s@VpcLink' {} a -> s {vpcLinkId = a} :: VpcLink)
+
+-- | A list of security group IDs for the VPC link.
+vpcLink_securityGroupIds :: Lens.Lens' VpcLink [Prelude.Text]
+vpcLink_securityGroupIds = Lens.lens (\VpcLink' {securityGroupIds} -> securityGroupIds) (\s@VpcLink' {} a -> s {securityGroupIds = a} :: VpcLink) Prelude.. Lens.coerced
+
+-- | A list of subnet IDs to include in the VPC link.
+vpcLink_subnetIds :: Lens.Lens' VpcLink [Prelude.Text]
+vpcLink_subnetIds = Lens.lens (\VpcLink' {subnetIds} -> subnetIds) (\s@VpcLink' {} a -> s {subnetIds = a} :: VpcLink) Prelude.. Lens.coerced
+
+-- | The name of the VPC link.
+vpcLink_name :: Lens.Lens' VpcLink Prelude.Text
+vpcLink_name = Lens.lens (\VpcLink' {name} -> name) (\s@VpcLink' {} a -> s {name = a} :: VpcLink)
+
+instance Data.FromJSON VpcLink where
+  parseJSON =
+    Data.withObject
+      "VpcLink"
+      ( \x ->
+          VpcLink'
+            Prelude.<$> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "vpcLinkStatus")
+            Prelude.<*> (x Data..:? "vpcLinkStatusMessage")
+            Prelude.<*> (x Data..:? "vpcLinkVersion")
+            Prelude.<*> (x Data..: "vpcLinkId")
+            Prelude.<*> ( x
+                            Data..:? "securityGroupIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "subnetIds" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable VpcLink where
+  hashWithSalt _salt VpcLink' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcLinkStatus
+      `Prelude.hashWithSalt` vpcLinkStatusMessage
+      `Prelude.hashWithSalt` vpcLinkVersion
+      `Prelude.hashWithSalt` vpcLinkId
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData VpcLink where
+  rnf VpcLink' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcLinkStatus
+      `Prelude.seq` Prelude.rnf vpcLinkStatusMessage
+      `Prelude.seq` Prelude.rnf vpcLinkVersion
+      `Prelude.seq` Prelude.rnf vpcLinkId
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ApiGatewayV2/Types/VpcLinkStatus.hs b/gen/Amazonka/ApiGatewayV2/Types/VpcLinkStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/VpcLinkStatus.hs
@@ -0,0 +1,87 @@
+{-# 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.ApiGatewayV2.Types.VpcLinkStatus
+-- 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.ApiGatewayV2.Types.VpcLinkStatus
+  ( VpcLinkStatus
+      ( ..,
+        VpcLinkStatus_AVAILABLE,
+        VpcLinkStatus_DELETING,
+        VpcLinkStatus_FAILED,
+        VpcLinkStatus_INACTIVE,
+        VpcLinkStatus_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of the VPC link.
+newtype VpcLinkStatus = VpcLinkStatus'
+  { fromVpcLinkStatus ::
+      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 VpcLinkStatus_AVAILABLE :: VpcLinkStatus
+pattern VpcLinkStatus_AVAILABLE = VpcLinkStatus' "AVAILABLE"
+
+pattern VpcLinkStatus_DELETING :: VpcLinkStatus
+pattern VpcLinkStatus_DELETING = VpcLinkStatus' "DELETING"
+
+pattern VpcLinkStatus_FAILED :: VpcLinkStatus
+pattern VpcLinkStatus_FAILED = VpcLinkStatus' "FAILED"
+
+pattern VpcLinkStatus_INACTIVE :: VpcLinkStatus
+pattern VpcLinkStatus_INACTIVE = VpcLinkStatus' "INACTIVE"
+
+pattern VpcLinkStatus_PENDING :: VpcLinkStatus
+pattern VpcLinkStatus_PENDING = VpcLinkStatus' "PENDING"
+
+{-# COMPLETE
+  VpcLinkStatus_AVAILABLE,
+  VpcLinkStatus_DELETING,
+  VpcLinkStatus_FAILED,
+  VpcLinkStatus_INACTIVE,
+  VpcLinkStatus_PENDING,
+  VpcLinkStatus'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/Types/VpcLinkVersion.hs b/gen/Amazonka/ApiGatewayV2/Types/VpcLinkVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Types/VpcLinkVersion.hs
@@ -0,0 +1,67 @@
+{-# 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.ApiGatewayV2.Types.VpcLinkVersion
+-- 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.ApiGatewayV2.Types.VpcLinkVersion
+  ( VpcLinkVersion
+      ( ..,
+        VpcLinkVersion_V2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The version of the VPC link.
+newtype VpcLinkVersion = VpcLinkVersion'
+  { fromVpcLinkVersion ::
+      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 VpcLinkVersion_V2 :: VpcLinkVersion
+pattern VpcLinkVersion_V2 = VpcLinkVersion' "V2"
+
+{-# COMPLETE
+  VpcLinkVersion_V2,
+  VpcLinkVersion'
+  #-}
diff --git a/gen/Amazonka/ApiGatewayV2/UntagResource.hs b/gen/Amazonka/ApiGatewayV2/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UntagResource.hs
@@ -0,0 +1,141 @@
+{-# 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.ApiGatewayV2.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 a Tag.
+module Amazonka.ApiGatewayV2.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The resource ARN for the tag.
+    resourceArn :: Prelude.Text,
+    -- | The Tag keys to delete
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The resource ARN for the tag.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The Tag keys to delete
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The resource ARN for the tag.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The Tag keys to delete
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat
+      ["/v2/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/ApiGatewayV2/UpdateApi.hs b/gen/Amazonka/ApiGatewayV2/UpdateApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateApi.hs
@@ -0,0 +1,624 @@
+{-# 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.ApiGatewayV2.UpdateApi
+-- 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 Api resource.
+module Amazonka.ApiGatewayV2.UpdateApi
+  ( -- * Creating a Request
+    UpdateApi (..),
+    newUpdateApi,
+
+    -- * Request Lenses
+    updateApi_apiKeySelectionExpression,
+    updateApi_corsConfiguration,
+    updateApi_credentialsArn,
+    updateApi_description,
+    updateApi_disableExecuteApiEndpoint,
+    updateApi_disableSchemaValidation,
+    updateApi_name,
+    updateApi_routeKey,
+    updateApi_routeSelectionExpression,
+    updateApi_target,
+    updateApi_version,
+    updateApi_apiId,
+
+    -- * Destructuring the Response
+    UpdateApiResponse (..),
+    newUpdateApiResponse,
+
+    -- * Response Lenses
+    updateApiResponse_apiEndpoint,
+    updateApiResponse_apiGatewayManaged,
+    updateApiResponse_apiId,
+    updateApiResponse_apiKeySelectionExpression,
+    updateApiResponse_corsConfiguration,
+    updateApiResponse_createdDate,
+    updateApiResponse_description,
+    updateApiResponse_disableExecuteApiEndpoint,
+    updateApiResponse_disableSchemaValidation,
+    updateApiResponse_importInfo,
+    updateApiResponse_name,
+    updateApiResponse_protocolType,
+    updateApiResponse_routeSelectionExpression,
+    updateApiResponse_tags,
+    updateApiResponse_version,
+    updateApiResponse_warnings,
+    updateApiResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates an Api.
+--
+-- /See:/ 'newUpdateApi' smart constructor.
+data UpdateApi = UpdateApi'
+  { -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | This property is part of quick create. It specifies the credentials
+    -- required for the integration, if any. For a Lambda integration, three
+    -- options are available. To specify an IAM Role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To require that the
+    -- caller\'s identity be passed through from the request, specify
+    -- arn:aws:iam::*:user\/*. To use resource-based permissions on supported
+    -- AWS services, don\'t specify this parameter. Currently, this property is
+    -- not used for HTTP integrations. If provided, this value replaces the
+    -- credentials associated with the quick create integration. Supported only
+    -- for HTTP APIs.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the API.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | This property is part of quick create. If not specified, the route
+    -- created using quick create is kept. Otherwise, this value replaces the
+    -- route key of the quick create route. Additional routes may still be
+    -- added after the API is updated. Supported only for HTTP APIs.
+    routeKey :: Prelude.Maybe Prelude.Text,
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | This property is part of quick create. For HTTP integrations, specify a
+    -- fully qualified URL. For Lambda integrations, specify a function ARN.
+    -- The type of the integration will be HTTP_PROXY or AWS_PROXY,
+    -- respectively. The value provided updates the integration URI and
+    -- integration type. You can update a quick-created target, but you can\'t
+    -- remove it from an API. Supported only for HTTP APIs.
+    target :: Prelude.Maybe Prelude.Text,
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApi' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiKeySelectionExpression', 'updateApi_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'updateApi_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs.
+--
+-- 'credentialsArn', 'updateApi_credentialsArn' - This property is part of quick create. It specifies the credentials
+-- required for the integration, if any. For a Lambda integration, three
+-- options are available. To specify an IAM Role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To require that the
+-- caller\'s identity be passed through from the request, specify
+-- arn:aws:iam::*:user\/*. To use resource-based permissions on supported
+-- AWS services, don\'t specify this parameter. Currently, this property is
+-- not used for HTTP integrations. If provided, this value replaces the
+-- credentials associated with the quick create integration. Supported only
+-- for HTTP APIs.
+--
+-- 'description', 'updateApi_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'updateApi_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'updateApi_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'name', 'updateApi_name' - The name of the API.
+--
+-- 'routeKey', 'updateApi_routeKey' - This property is part of quick create. If not specified, the route
+-- created using quick create is kept. Otherwise, this value replaces the
+-- route key of the quick create route. Additional routes may still be
+-- added after the API is updated. Supported only for HTTP APIs.
+--
+-- 'routeSelectionExpression', 'updateApi_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'target', 'updateApi_target' - This property is part of quick create. For HTTP integrations, specify a
+-- fully qualified URL. For Lambda integrations, specify a function ARN.
+-- The type of the integration will be HTTP_PROXY or AWS_PROXY,
+-- respectively. The value provided updates the integration URI and
+-- integration type. You can update a quick-created target, but you can\'t
+-- remove it from an API. Supported only for HTTP APIs.
+--
+-- 'version', 'updateApi_version' - A version identifier for the API.
+--
+-- 'apiId', 'updateApi_apiId' - The API identifier.
+newUpdateApi ::
+  -- | 'apiId'
+  Prelude.Text ->
+  UpdateApi
+newUpdateApi pApiId_ =
+  UpdateApi'
+    { apiKeySelectionExpression =
+        Prelude.Nothing,
+      corsConfiguration = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disableExecuteApiEndpoint = Prelude.Nothing,
+      disableSchemaValidation = Prelude.Nothing,
+      name = Prelude.Nothing,
+      routeKey = Prelude.Nothing,
+      routeSelectionExpression = Prelude.Nothing,
+      target = Prelude.Nothing,
+      version = Prelude.Nothing,
+      apiId = pApiId_
+    }
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+updateApi_apiKeySelectionExpression :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_apiKeySelectionExpression = Lens.lens (\UpdateApi' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@UpdateApi' {} a -> s {apiKeySelectionExpression = a} :: UpdateApi)
+
+-- | A CORS configuration. Supported only for HTTP APIs.
+updateApi_corsConfiguration :: Lens.Lens' UpdateApi (Prelude.Maybe Cors)
+updateApi_corsConfiguration = Lens.lens (\UpdateApi' {corsConfiguration} -> corsConfiguration) (\s@UpdateApi' {} a -> s {corsConfiguration = a} :: UpdateApi)
+
+-- | This property is part of quick create. It specifies the credentials
+-- required for the integration, if any. For a Lambda integration, three
+-- options are available. To specify an IAM Role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To require that the
+-- caller\'s identity be passed through from the request, specify
+-- arn:aws:iam::*:user\/*. To use resource-based permissions on supported
+-- AWS services, don\'t specify this parameter. Currently, this property is
+-- not used for HTTP integrations. If provided, this value replaces the
+-- credentials associated with the quick create integration. Supported only
+-- for HTTP APIs.
+updateApi_credentialsArn :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_credentialsArn = Lens.lens (\UpdateApi' {credentialsArn} -> credentialsArn) (\s@UpdateApi' {} a -> s {credentialsArn = a} :: UpdateApi)
+
+-- | The description of the API.
+updateApi_description :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_description = Lens.lens (\UpdateApi' {description} -> description) (\s@UpdateApi' {} a -> s {description = a} :: UpdateApi)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+updateApi_disableExecuteApiEndpoint :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Bool)
+updateApi_disableExecuteApiEndpoint = Lens.lens (\UpdateApi' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@UpdateApi' {} a -> s {disableExecuteApiEndpoint = a} :: UpdateApi)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+updateApi_disableSchemaValidation :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Bool)
+updateApi_disableSchemaValidation = Lens.lens (\UpdateApi' {disableSchemaValidation} -> disableSchemaValidation) (\s@UpdateApi' {} a -> s {disableSchemaValidation = a} :: UpdateApi)
+
+-- | The name of the API.
+updateApi_name :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_name = Lens.lens (\UpdateApi' {name} -> name) (\s@UpdateApi' {} a -> s {name = a} :: UpdateApi)
+
+-- | This property is part of quick create. If not specified, the route
+-- created using quick create is kept. Otherwise, this value replaces the
+-- route key of the quick create route. Additional routes may still be
+-- added after the API is updated. Supported only for HTTP APIs.
+updateApi_routeKey :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_routeKey = Lens.lens (\UpdateApi' {routeKey} -> routeKey) (\s@UpdateApi' {} a -> s {routeKey = a} :: UpdateApi)
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+updateApi_routeSelectionExpression :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_routeSelectionExpression = Lens.lens (\UpdateApi' {routeSelectionExpression} -> routeSelectionExpression) (\s@UpdateApi' {} a -> s {routeSelectionExpression = a} :: UpdateApi)
+
+-- | This property is part of quick create. For HTTP integrations, specify a
+-- fully qualified URL. For Lambda integrations, specify a function ARN.
+-- The type of the integration will be HTTP_PROXY or AWS_PROXY,
+-- respectively. The value provided updates the integration URI and
+-- integration type. You can update a quick-created target, but you can\'t
+-- remove it from an API. Supported only for HTTP APIs.
+updateApi_target :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_target = Lens.lens (\UpdateApi' {target} -> target) (\s@UpdateApi' {} a -> s {target = a} :: UpdateApi)
+
+-- | A version identifier for the API.
+updateApi_version :: Lens.Lens' UpdateApi (Prelude.Maybe Prelude.Text)
+updateApi_version = Lens.lens (\UpdateApi' {version} -> version) (\s@UpdateApi' {} a -> s {version = a} :: UpdateApi)
+
+-- | The API identifier.
+updateApi_apiId :: Lens.Lens' UpdateApi Prelude.Text
+updateApi_apiId = Lens.lens (\UpdateApi' {apiId} -> apiId) (\s@UpdateApi' {} a -> s {apiId = a} :: UpdateApi)
+
+instance Core.AWSRequest UpdateApi where
+  type AWSResponse UpdateApi = UpdateApiResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateApiResponse'
+            Prelude.<$> (x Data..?> "apiEndpoint")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiKeySelectionExpression")
+            Prelude.<*> (x Data..?> "corsConfiguration")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "disableExecuteApiEndpoint")
+            Prelude.<*> (x Data..?> "disableSchemaValidation")
+            Prelude.<*> (x Data..?> "importInfo" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "protocolType")
+            Prelude.<*> (x Data..?> "routeSelectionExpression")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (x Data..?> "warnings" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateApi where
+  hashWithSalt _salt UpdateApi' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiKeySelectionExpression
+      `Prelude.hashWithSalt` corsConfiguration
+      `Prelude.hashWithSalt` credentialsArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` disableExecuteApiEndpoint
+      `Prelude.hashWithSalt` disableSchemaValidation
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` routeKey
+      `Prelude.hashWithSalt` routeSelectionExpression
+      `Prelude.hashWithSalt` target
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData UpdateApi where
+  rnf UpdateApi' {..} =
+    Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf routeKey
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders UpdateApi where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApi where
+  toJSON UpdateApi' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("apiKeySelectionExpression" Data..=)
+              Prelude.<$> apiKeySelectionExpression,
+            ("corsConfiguration" Data..=)
+              Prelude.<$> corsConfiguration,
+            ("credentialsArn" Data..=)
+              Prelude.<$> credentialsArn,
+            ("description" Data..=) Prelude.<$> description,
+            ("disableExecuteApiEndpoint" Data..=)
+              Prelude.<$> disableExecuteApiEndpoint,
+            ("disableSchemaValidation" Data..=)
+              Prelude.<$> disableSchemaValidation,
+            ("name" Data..=) Prelude.<$> name,
+            ("routeKey" Data..=) Prelude.<$> routeKey,
+            ("routeSelectionExpression" Data..=)
+              Prelude.<$> routeSelectionExpression,
+            ("target" Data..=) Prelude.<$> target,
+            ("version" Data..=) Prelude.<$> version
+          ]
+      )
+
+instance Data.ToPath UpdateApi where
+  toPath UpdateApi' {..} =
+    Prelude.mconcat ["/v2/apis/", Data.toBS apiId]
+
+instance Data.ToQuery UpdateApi where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateApiResponse' smart constructor.
+data UpdateApiResponse = UpdateApiResponse'
+  { -- | The URI of the API, of the form
+    -- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+    -- appended to this URI to form a complete path to a deployed API stage.
+    apiEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether an API is managed by API Gateway. You can\'t update or
+    -- delete a managed API by using API Gateway. A managed API can be deleted
+    -- only through the tooling or service that created it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The API ID.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | An API key selection expression. Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+    apiKeySelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A CORS configuration. Supported only for HTTP APIs.
+    corsConfiguration :: Prelude.Maybe Cors,
+    -- | The timestamp when the API was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the API.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether clients can invoke your API by using the default
+    -- execute-api endpoint. By default, clients can invoke your API with the
+    -- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+    -- To require that clients use a custom domain name to invoke your API,
+    -- disable the default endpoint.
+    disableExecuteApiEndpoint :: Prelude.Maybe Prelude.Bool,
+    -- | Avoid validating models when creating a deployment. Supported only for
+    -- WebSocket APIs.
+    disableSchemaValidation :: Prelude.Maybe Prelude.Bool,
+    -- | The validation information during API import. This may include
+    -- particular properties of your OpenAPI definition which are ignored
+    -- during import. Supported only for HTTP APIs.
+    importInfo :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the API.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The API protocol.
+    protocolType :: Prelude.Maybe ProtocolType,
+    -- | The route selection expression for the API. For HTTP APIs, the
+    -- routeSelectionExpression must be ${request.method} ${request.path}. If
+    -- not provided, this will be the default for HTTP APIs. This property is
+    -- required for WebSocket APIs.
+    routeSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | A collection of tags associated with the API.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A version identifier for the API.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The warning messages reported when failonwarnings is turned on during
+    -- API import.
+    warnings :: 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 'UpdateApiResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiEndpoint', 'updateApiResponse_apiEndpoint' - The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+--
+-- 'apiGatewayManaged', 'updateApiResponse_apiGatewayManaged' - Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+--
+-- 'apiId', 'updateApiResponse_apiId' - The API ID.
+--
+-- 'apiKeySelectionExpression', 'updateApiResponse_apiKeySelectionExpression' - An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+--
+-- 'corsConfiguration', 'updateApiResponse_corsConfiguration' - A CORS configuration. Supported only for HTTP APIs.
+--
+-- 'createdDate', 'updateApiResponse_createdDate' - The timestamp when the API was created.
+--
+-- 'description', 'updateApiResponse_description' - The description of the API.
+--
+-- 'disableExecuteApiEndpoint', 'updateApiResponse_disableExecuteApiEndpoint' - Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+--
+-- 'disableSchemaValidation', 'updateApiResponse_disableSchemaValidation' - Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+--
+-- 'importInfo', 'updateApiResponse_importInfo' - The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+--
+-- 'name', 'updateApiResponse_name' - The name of the API.
+--
+-- 'protocolType', 'updateApiResponse_protocolType' - The API protocol.
+--
+-- 'routeSelectionExpression', 'updateApiResponse_routeSelectionExpression' - The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+--
+-- 'tags', 'updateApiResponse_tags' - A collection of tags associated with the API.
+--
+-- 'version', 'updateApiResponse_version' - A version identifier for the API.
+--
+-- 'warnings', 'updateApiResponse_warnings' - The warning messages reported when failonwarnings is turned on during
+-- API import.
+--
+-- 'httpStatus', 'updateApiResponse_httpStatus' - The response's http status code.
+newUpdateApiResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateApiResponse
+newUpdateApiResponse pHttpStatus_ =
+  UpdateApiResponse'
+    { apiEndpoint = Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      apiId = Prelude.Nothing,
+      apiKeySelectionExpression = Prelude.Nothing,
+      corsConfiguration = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disableExecuteApiEndpoint = Prelude.Nothing,
+      disableSchemaValidation = Prelude.Nothing,
+      importInfo = Prelude.Nothing,
+      name = Prelude.Nothing,
+      protocolType = Prelude.Nothing,
+      routeSelectionExpression = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      warnings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URI of the API, of the form
+-- {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically
+-- appended to this URI to form a complete path to a deployed API stage.
+updateApiResponse_apiEndpoint :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Text)
+updateApiResponse_apiEndpoint = Lens.lens (\UpdateApiResponse' {apiEndpoint} -> apiEndpoint) (\s@UpdateApiResponse' {} a -> s {apiEndpoint = a} :: UpdateApiResponse)
+
+-- | Specifies whether an API is managed by API Gateway. You can\'t update or
+-- delete a managed API by using API Gateway. A managed API can be deleted
+-- only through the tooling or service that created it.
+updateApiResponse_apiGatewayManaged :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Bool)
+updateApiResponse_apiGatewayManaged = Lens.lens (\UpdateApiResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@UpdateApiResponse' {} a -> s {apiGatewayManaged = a} :: UpdateApiResponse)
+
+-- | The API ID.
+updateApiResponse_apiId :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Text)
+updateApiResponse_apiId = Lens.lens (\UpdateApiResponse' {apiId} -> apiId) (\s@UpdateApiResponse' {} a -> s {apiId = a} :: UpdateApiResponse)
+
+-- | An API key selection expression. Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions API Key Selection Expressions>.
+updateApiResponse_apiKeySelectionExpression :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Text)
+updateApiResponse_apiKeySelectionExpression = Lens.lens (\UpdateApiResponse' {apiKeySelectionExpression} -> apiKeySelectionExpression) (\s@UpdateApiResponse' {} a -> s {apiKeySelectionExpression = a} :: UpdateApiResponse)
+
+-- | A CORS configuration. Supported only for HTTP APIs.
+updateApiResponse_corsConfiguration :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Cors)
+updateApiResponse_corsConfiguration = Lens.lens (\UpdateApiResponse' {corsConfiguration} -> corsConfiguration) (\s@UpdateApiResponse' {} a -> s {corsConfiguration = a} :: UpdateApiResponse)
+
+-- | The timestamp when the API was created.
+updateApiResponse_createdDate :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.UTCTime)
+updateApiResponse_createdDate = Lens.lens (\UpdateApiResponse' {createdDate} -> createdDate) (\s@UpdateApiResponse' {} a -> s {createdDate = a} :: UpdateApiResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the API.
+updateApiResponse_description :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Text)
+updateApiResponse_description = Lens.lens (\UpdateApiResponse' {description} -> description) (\s@UpdateApiResponse' {} a -> s {description = a} :: UpdateApiResponse)
+
+-- | Specifies whether clients can invoke your API by using the default
+-- execute-api endpoint. By default, clients can invoke your API with the
+-- default https:\/\/{api_id}.execute-api.{region}.amazonaws.com endpoint.
+-- To require that clients use a custom domain name to invoke your API,
+-- disable the default endpoint.
+updateApiResponse_disableExecuteApiEndpoint :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Bool)
+updateApiResponse_disableExecuteApiEndpoint = Lens.lens (\UpdateApiResponse' {disableExecuteApiEndpoint} -> disableExecuteApiEndpoint) (\s@UpdateApiResponse' {} a -> s {disableExecuteApiEndpoint = a} :: UpdateApiResponse)
+
+-- | Avoid validating models when creating a deployment. Supported only for
+-- WebSocket APIs.
+updateApiResponse_disableSchemaValidation :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Bool)
+updateApiResponse_disableSchemaValidation = Lens.lens (\UpdateApiResponse' {disableSchemaValidation} -> disableSchemaValidation) (\s@UpdateApiResponse' {} a -> s {disableSchemaValidation = a} :: UpdateApiResponse)
+
+-- | The validation information during API import. This may include
+-- particular properties of your OpenAPI definition which are ignored
+-- during import. Supported only for HTTP APIs.
+updateApiResponse_importInfo :: Lens.Lens' UpdateApiResponse (Prelude.Maybe [Prelude.Text])
+updateApiResponse_importInfo = Lens.lens (\UpdateApiResponse' {importInfo} -> importInfo) (\s@UpdateApiResponse' {} a -> s {importInfo = a} :: UpdateApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the API.
+updateApiResponse_name :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Text)
+updateApiResponse_name = Lens.lens (\UpdateApiResponse' {name} -> name) (\s@UpdateApiResponse' {} a -> s {name = a} :: UpdateApiResponse)
+
+-- | The API protocol.
+updateApiResponse_protocolType :: Lens.Lens' UpdateApiResponse (Prelude.Maybe ProtocolType)
+updateApiResponse_protocolType = Lens.lens (\UpdateApiResponse' {protocolType} -> protocolType) (\s@UpdateApiResponse' {} a -> s {protocolType = a} :: UpdateApiResponse)
+
+-- | The route selection expression for the API. For HTTP APIs, the
+-- routeSelectionExpression must be ${request.method} ${request.path}. If
+-- not provided, this will be the default for HTTP APIs. This property is
+-- required for WebSocket APIs.
+updateApiResponse_routeSelectionExpression :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Text)
+updateApiResponse_routeSelectionExpression = Lens.lens (\UpdateApiResponse' {routeSelectionExpression} -> routeSelectionExpression) (\s@UpdateApiResponse' {} a -> s {routeSelectionExpression = a} :: UpdateApiResponse)
+
+-- | A collection of tags associated with the API.
+updateApiResponse_tags :: Lens.Lens' UpdateApiResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateApiResponse_tags = Lens.lens (\UpdateApiResponse' {tags} -> tags) (\s@UpdateApiResponse' {} a -> s {tags = a} :: UpdateApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A version identifier for the API.
+updateApiResponse_version :: Lens.Lens' UpdateApiResponse (Prelude.Maybe Prelude.Text)
+updateApiResponse_version = Lens.lens (\UpdateApiResponse' {version} -> version) (\s@UpdateApiResponse' {} a -> s {version = a} :: UpdateApiResponse)
+
+-- | The warning messages reported when failonwarnings is turned on during
+-- API import.
+updateApiResponse_warnings :: Lens.Lens' UpdateApiResponse (Prelude.Maybe [Prelude.Text])
+updateApiResponse_warnings = Lens.lens (\UpdateApiResponse' {warnings} -> warnings) (\s@UpdateApiResponse' {} a -> s {warnings = a} :: UpdateApiResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateApiResponse_httpStatus :: Lens.Lens' UpdateApiResponse Prelude.Int
+updateApiResponse_httpStatus = Lens.lens (\UpdateApiResponse' {httpStatus} -> httpStatus) (\s@UpdateApiResponse' {} a -> s {httpStatus = a} :: UpdateApiResponse)
+
+instance Prelude.NFData UpdateApiResponse where
+  rnf UpdateApiResponse' {..} =
+    Prelude.rnf apiEndpoint
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiKeySelectionExpression
+      `Prelude.seq` Prelude.rnf corsConfiguration
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disableExecuteApiEndpoint
+      `Prelude.seq` Prelude.rnf disableSchemaValidation
+      `Prelude.seq` Prelude.rnf importInfo
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf routeSelectionExpression
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf warnings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateApiMapping.hs b/gen/Amazonka/ApiGatewayV2/UpdateApiMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateApiMapping.hs
@@ -0,0 +1,269 @@
+{-# 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.ApiGatewayV2.UpdateApiMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The API mapping.
+module Amazonka.ApiGatewayV2.UpdateApiMapping
+  ( -- * Creating a Request
+    UpdateApiMapping (..),
+    newUpdateApiMapping,
+
+    -- * Request Lenses
+    updateApiMapping_apiMappingKey,
+    updateApiMapping_stage,
+    updateApiMapping_apiMappingId,
+    updateApiMapping_apiId,
+    updateApiMapping_domainName,
+
+    -- * Destructuring the Response
+    UpdateApiMappingResponse (..),
+    newUpdateApiMappingResponse,
+
+    -- * Response Lenses
+    updateApiMappingResponse_apiId,
+    updateApiMappingResponse_apiMappingId,
+    updateApiMappingResponse_apiMappingKey,
+    updateApiMappingResponse_stage,
+    updateApiMappingResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates an ApiMapping.
+--
+-- /See:/ 'newUpdateApiMapping' smart constructor.
+data UpdateApiMapping = UpdateApiMapping'
+  { -- | The API mapping key.
+    apiMappingKey :: Prelude.Maybe Prelude.Text,
+    -- | The API stage.
+    stage :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping identifier.
+    apiMappingId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApiMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingKey', 'updateApiMapping_apiMappingKey' - The API mapping key.
+--
+-- 'stage', 'updateApiMapping_stage' - The API stage.
+--
+-- 'apiMappingId', 'updateApiMapping_apiMappingId' - The API mapping identifier.
+--
+-- 'apiId', 'updateApiMapping_apiId' - The API identifier.
+--
+-- 'domainName', 'updateApiMapping_domainName' - The domain name.
+newUpdateApiMapping ::
+  -- | 'apiMappingId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'domainName'
+  Prelude.Text ->
+  UpdateApiMapping
+newUpdateApiMapping
+  pApiMappingId_
+  pApiId_
+  pDomainName_ =
+    UpdateApiMapping'
+      { apiMappingKey = Prelude.Nothing,
+        stage = Prelude.Nothing,
+        apiMappingId = pApiMappingId_,
+        apiId = pApiId_,
+        domainName = pDomainName_
+      }
+
+-- | The API mapping key.
+updateApiMapping_apiMappingKey :: Lens.Lens' UpdateApiMapping (Prelude.Maybe Prelude.Text)
+updateApiMapping_apiMappingKey = Lens.lens (\UpdateApiMapping' {apiMappingKey} -> apiMappingKey) (\s@UpdateApiMapping' {} a -> s {apiMappingKey = a} :: UpdateApiMapping)
+
+-- | The API stage.
+updateApiMapping_stage :: Lens.Lens' UpdateApiMapping (Prelude.Maybe Prelude.Text)
+updateApiMapping_stage = Lens.lens (\UpdateApiMapping' {stage} -> stage) (\s@UpdateApiMapping' {} a -> s {stage = a} :: UpdateApiMapping)
+
+-- | The API mapping identifier.
+updateApiMapping_apiMappingId :: Lens.Lens' UpdateApiMapping Prelude.Text
+updateApiMapping_apiMappingId = Lens.lens (\UpdateApiMapping' {apiMappingId} -> apiMappingId) (\s@UpdateApiMapping' {} a -> s {apiMappingId = a} :: UpdateApiMapping)
+
+-- | The API identifier.
+updateApiMapping_apiId :: Lens.Lens' UpdateApiMapping Prelude.Text
+updateApiMapping_apiId = Lens.lens (\UpdateApiMapping' {apiId} -> apiId) (\s@UpdateApiMapping' {} a -> s {apiId = a} :: UpdateApiMapping)
+
+-- | The domain name.
+updateApiMapping_domainName :: Lens.Lens' UpdateApiMapping Prelude.Text
+updateApiMapping_domainName = Lens.lens (\UpdateApiMapping' {domainName} -> domainName) (\s@UpdateApiMapping' {} a -> s {domainName = a} :: UpdateApiMapping)
+
+instance Core.AWSRequest UpdateApiMapping where
+  type
+    AWSResponse UpdateApiMapping =
+      UpdateApiMappingResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateApiMappingResponse'
+            Prelude.<$> (x Data..?> "apiId")
+            Prelude.<*> (x Data..?> "apiMappingId")
+            Prelude.<*> (x Data..?> "apiMappingKey")
+            Prelude.<*> (x Data..?> "stage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateApiMapping where
+  hashWithSalt _salt UpdateApiMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiMappingKey
+      `Prelude.hashWithSalt` stage
+      `Prelude.hashWithSalt` apiMappingId
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData UpdateApiMapping where
+  rnf UpdateApiMapping' {..} =
+    Prelude.rnf apiMappingKey
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf apiMappingId
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders UpdateApiMapping where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApiMapping where
+  toJSON UpdateApiMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("apiMappingKey" Data..=) Prelude.<$> apiMappingKey,
+            ("stage" Data..=) Prelude.<$> stage,
+            Prelude.Just ("apiId" Data..= apiId)
+          ]
+      )
+
+instance Data.ToPath UpdateApiMapping where
+  toPath UpdateApiMapping' {..} =
+    Prelude.mconcat
+      [ "/v2/domainnames/",
+        Data.toBS domainName,
+        "/apimappings/",
+        Data.toBS apiMappingId
+      ]
+
+instance Data.ToQuery UpdateApiMapping where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateApiMappingResponse' smart constructor.
+data UpdateApiMappingResponse = UpdateApiMappingResponse'
+  { -- | The API identifier.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping identifier.
+    apiMappingId :: Prelude.Maybe Prelude.Text,
+    -- | The API mapping key.
+    apiMappingKey :: Prelude.Maybe Prelude.Text,
+    -- | The API stage.
+    stage :: 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 'UpdateApiMappingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiId', 'updateApiMappingResponse_apiId' - The API identifier.
+--
+-- 'apiMappingId', 'updateApiMappingResponse_apiMappingId' - The API mapping identifier.
+--
+-- 'apiMappingKey', 'updateApiMappingResponse_apiMappingKey' - The API mapping key.
+--
+-- 'stage', 'updateApiMappingResponse_stage' - The API stage.
+--
+-- 'httpStatus', 'updateApiMappingResponse_httpStatus' - The response's http status code.
+newUpdateApiMappingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateApiMappingResponse
+newUpdateApiMappingResponse pHttpStatus_ =
+  UpdateApiMappingResponse'
+    { apiId = Prelude.Nothing,
+      apiMappingId = Prelude.Nothing,
+      apiMappingKey = Prelude.Nothing,
+      stage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The API identifier.
+updateApiMappingResponse_apiId :: Lens.Lens' UpdateApiMappingResponse (Prelude.Maybe Prelude.Text)
+updateApiMappingResponse_apiId = Lens.lens (\UpdateApiMappingResponse' {apiId} -> apiId) (\s@UpdateApiMappingResponse' {} a -> s {apiId = a} :: UpdateApiMappingResponse)
+
+-- | The API mapping identifier.
+updateApiMappingResponse_apiMappingId :: Lens.Lens' UpdateApiMappingResponse (Prelude.Maybe Prelude.Text)
+updateApiMappingResponse_apiMappingId = Lens.lens (\UpdateApiMappingResponse' {apiMappingId} -> apiMappingId) (\s@UpdateApiMappingResponse' {} a -> s {apiMappingId = a} :: UpdateApiMappingResponse)
+
+-- | The API mapping key.
+updateApiMappingResponse_apiMappingKey :: Lens.Lens' UpdateApiMappingResponse (Prelude.Maybe Prelude.Text)
+updateApiMappingResponse_apiMappingKey = Lens.lens (\UpdateApiMappingResponse' {apiMappingKey} -> apiMappingKey) (\s@UpdateApiMappingResponse' {} a -> s {apiMappingKey = a} :: UpdateApiMappingResponse)
+
+-- | The API stage.
+updateApiMappingResponse_stage :: Lens.Lens' UpdateApiMappingResponse (Prelude.Maybe Prelude.Text)
+updateApiMappingResponse_stage = Lens.lens (\UpdateApiMappingResponse' {stage} -> stage) (\s@UpdateApiMappingResponse' {} a -> s {stage = a} :: UpdateApiMappingResponse)
+
+-- | The response's http status code.
+updateApiMappingResponse_httpStatus :: Lens.Lens' UpdateApiMappingResponse Prelude.Int
+updateApiMappingResponse_httpStatus = Lens.lens (\UpdateApiMappingResponse' {httpStatus} -> httpStatus) (\s@UpdateApiMappingResponse' {} a -> s {httpStatus = a} :: UpdateApiMappingResponse)
+
+instance Prelude.NFData UpdateApiMappingResponse where
+  rnf UpdateApiMappingResponse' {..} =
+    Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiMappingId
+      `Prelude.seq` Prelude.rnf apiMappingKey
+      `Prelude.seq` Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateAuthorizer.hs b/gen/Amazonka/ApiGatewayV2/UpdateAuthorizer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateAuthorizer.hs
@@ -0,0 +1,740 @@
+{-# 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.ApiGatewayV2.UpdateAuthorizer
+-- 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 Authorizer.
+module Amazonka.ApiGatewayV2.UpdateAuthorizer
+  ( -- * Creating a Request
+    UpdateAuthorizer (..),
+    newUpdateAuthorizer,
+
+    -- * Request Lenses
+    updateAuthorizer_authorizerCredentialsArn,
+    updateAuthorizer_authorizerPayloadFormatVersion,
+    updateAuthorizer_authorizerResultTtlInSeconds,
+    updateAuthorizer_authorizerType,
+    updateAuthorizer_authorizerUri,
+    updateAuthorizer_enableSimpleResponses,
+    updateAuthorizer_identitySource,
+    updateAuthorizer_identityValidationExpression,
+    updateAuthorizer_jwtConfiguration,
+    updateAuthorizer_name,
+    updateAuthorizer_authorizerId,
+    updateAuthorizer_apiId,
+
+    -- * Destructuring the Response
+    UpdateAuthorizerResponse (..),
+    newUpdateAuthorizerResponse,
+
+    -- * Response Lenses
+    updateAuthorizerResponse_authorizerCredentialsArn,
+    updateAuthorizerResponse_authorizerId,
+    updateAuthorizerResponse_authorizerPayloadFormatVersion,
+    updateAuthorizerResponse_authorizerResultTtlInSeconds,
+    updateAuthorizerResponse_authorizerType,
+    updateAuthorizerResponse_authorizerUri,
+    updateAuthorizerResponse_enableSimpleResponses,
+    updateAuthorizerResponse_identitySource,
+    updateAuthorizerResponse_identityValidationExpression,
+    updateAuthorizerResponse_jwtConfiguration,
+    updateAuthorizerResponse_name,
+    updateAuthorizerResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates an Authorizer.
+--
+-- /See:/ 'newUpdateAuthorizer' smart constructor.
+data UpdateAuthorizer = UpdateAuthorizer'
+  { -- | Specifies the required credentials as an IAM role for API Gateway to
+    -- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To use resource-based
+    -- permissions on the Lambda function, don\'t specify this parameter.
+    authorizerCredentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format of the payload sent to an HTTP API Lambda
+    -- authorizer. Required for HTTP API Lambda authorizers. Supported values
+    -- are 1.0 and 2.0. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    authorizerPayloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time to live (TTL) for cached authorizer results, in seconds. If it
+    -- equals 0, authorization caching is disabled. If it is greater than 0,
+    -- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+    -- hour. Supported only for HTTP API Lambda authorizers.
+    authorizerResultTtlInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The authorizer type. Specify REQUEST for a Lambda function using
+    -- incoming request parameters. Specify JWT to use JSON Web Tokens
+    -- (supported only for HTTP APIs).
+    authorizerType :: Prelude.Maybe AuthorizerType,
+    -- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+    -- authorizers, this must be a well-formed Lambda function URI, for
+    -- example,
+    -- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+    -- In general, the URI has this form:
+    -- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+    -- is the same as the region hosting the Lambda function, path indicates
+    -- that the remaining substring in the URI should be treated as the path to
+    -- the resource, including the initial \/. For Lambda functions, this is
+    -- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+    -- Supported only for REQUEST authorizers.
+    authorizerUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether a Lambda authorizer returns a response in a simple
+    -- format. By default, a Lambda authorizer must return an IAM policy. If
+    -- enabled, the Lambda authorizer can return a boolean value instead of an
+    -- IAM policy. Supported only for HTTP APIs. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+    enableSimpleResponses :: Prelude.Maybe Prelude.Bool,
+    -- | The identity source for which authorization is requested.
+    --
+    -- For a REQUEST authorizer, this is optional. The value is a set of one or
+    -- more mapping expressions of the specified request parameters. The
+    -- identity source can be headers, query string parameters, stage
+    -- variables, and context parameters. For example, if an Auth header and a
+    -- Name query string parameter are defined as identity sources, this value
+    -- is route.request.header.Auth, route.request.querystring.Name for
+    -- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+    -- \$, for example, $request.header.Auth, $request.querystring.Name. These
+    -- parameters are used to perform runtime validation for Lambda-based
+    -- authorizers by verifying all of the identity-related request parameters
+    -- are present in the request, not null, and non-empty. Only when this is
+    -- true does the authorizer invoke the authorizer Lambda function.
+    -- Otherwise, it returns a 401 Unauthorized response without calling the
+    -- Lambda function. For HTTP APIs, identity sources are also used as the
+    -- cache key when caching is enabled. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    --
+    -- For JWT, a single entry that specifies where to extract the JSON Web
+    -- Token (JWT) from inbound requests. Currently only header-based and query
+    -- parameter-based selections are supported, for example
+    -- \$request.header.Authorization.
+    identitySource :: Prelude.Maybe [Prelude.Text],
+    -- | This parameter is not used.
+    identityValidationExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the configuration of a JWT authorizer. Required for the JWT
+    -- authorizer type. Supported only for HTTP APIs.
+    jwtConfiguration :: Prelude.Maybe JWTConfiguration,
+    -- | The name of the authorizer.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The authorizer identifier.
+    authorizerId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAuthorizer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerCredentialsArn', 'updateAuthorizer_authorizerCredentialsArn' - Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+--
+-- 'authorizerPayloadFormatVersion', 'updateAuthorizer_authorizerPayloadFormatVersion' - Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- 'authorizerResultTtlInSeconds', 'updateAuthorizer_authorizerResultTtlInSeconds' - The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+--
+-- 'authorizerType', 'updateAuthorizer_authorizerType' - The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+--
+-- 'authorizerUri', 'updateAuthorizer_authorizerUri' - The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+--
+-- 'enableSimpleResponses', 'updateAuthorizer_enableSimpleResponses' - Specifies whether a Lambda authorizer returns a response in a simple
+-- format. By default, a Lambda authorizer must return an IAM policy. If
+-- enabled, the Lambda authorizer can return a boolean value instead of an
+-- IAM policy. Supported only for HTTP APIs. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+--
+-- 'identitySource', 'updateAuthorizer_identitySource' - The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+--
+-- 'identityValidationExpression', 'updateAuthorizer_identityValidationExpression' - This parameter is not used.
+--
+-- 'jwtConfiguration', 'updateAuthorizer_jwtConfiguration' - Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+--
+-- 'name', 'updateAuthorizer_name' - The name of the authorizer.
+--
+-- 'authorizerId', 'updateAuthorizer_authorizerId' - The authorizer identifier.
+--
+-- 'apiId', 'updateAuthorizer_apiId' - The API identifier.
+newUpdateAuthorizer ::
+  -- | 'authorizerId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  UpdateAuthorizer
+newUpdateAuthorizer pAuthorizerId_ pApiId_ =
+  UpdateAuthorizer'
+    { authorizerCredentialsArn =
+        Prelude.Nothing,
+      authorizerPayloadFormatVersion = Prelude.Nothing,
+      authorizerResultTtlInSeconds = Prelude.Nothing,
+      authorizerType = Prelude.Nothing,
+      authorizerUri = Prelude.Nothing,
+      enableSimpleResponses = Prelude.Nothing,
+      identitySource = Prelude.Nothing,
+      identityValidationExpression = Prelude.Nothing,
+      jwtConfiguration = Prelude.Nothing,
+      name = Prelude.Nothing,
+      authorizerId = pAuthorizerId_,
+      apiId = pApiId_
+    }
+
+-- | Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+updateAuthorizer_authorizerCredentialsArn :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe Prelude.Text)
+updateAuthorizer_authorizerCredentialsArn = Lens.lens (\UpdateAuthorizer' {authorizerCredentialsArn} -> authorizerCredentialsArn) (\s@UpdateAuthorizer' {} a -> s {authorizerCredentialsArn = a} :: UpdateAuthorizer)
+
+-- | Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+updateAuthorizer_authorizerPayloadFormatVersion :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe Prelude.Text)
+updateAuthorizer_authorizerPayloadFormatVersion = Lens.lens (\UpdateAuthorizer' {authorizerPayloadFormatVersion} -> authorizerPayloadFormatVersion) (\s@UpdateAuthorizer' {} a -> s {authorizerPayloadFormatVersion = a} :: UpdateAuthorizer)
+
+-- | The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+updateAuthorizer_authorizerResultTtlInSeconds :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe Prelude.Natural)
+updateAuthorizer_authorizerResultTtlInSeconds = Lens.lens (\UpdateAuthorizer' {authorizerResultTtlInSeconds} -> authorizerResultTtlInSeconds) (\s@UpdateAuthorizer' {} a -> s {authorizerResultTtlInSeconds = a} :: UpdateAuthorizer)
+
+-- | The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+updateAuthorizer_authorizerType :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe AuthorizerType)
+updateAuthorizer_authorizerType = Lens.lens (\UpdateAuthorizer' {authorizerType} -> authorizerType) (\s@UpdateAuthorizer' {} a -> s {authorizerType = a} :: UpdateAuthorizer)
+
+-- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+updateAuthorizer_authorizerUri :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe Prelude.Text)
+updateAuthorizer_authorizerUri = Lens.lens (\UpdateAuthorizer' {authorizerUri} -> authorizerUri) (\s@UpdateAuthorizer' {} a -> s {authorizerUri = a} :: UpdateAuthorizer)
+
+-- | Specifies whether a Lambda authorizer returns a response in a simple
+-- format. By default, a Lambda authorizer must return an IAM policy. If
+-- enabled, the Lambda authorizer can return a boolean value instead of an
+-- IAM policy. Supported only for HTTP APIs. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+updateAuthorizer_enableSimpleResponses :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe Prelude.Bool)
+updateAuthorizer_enableSimpleResponses = Lens.lens (\UpdateAuthorizer' {enableSimpleResponses} -> enableSimpleResponses) (\s@UpdateAuthorizer' {} a -> s {enableSimpleResponses = a} :: UpdateAuthorizer)
+
+-- | The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+updateAuthorizer_identitySource :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe [Prelude.Text])
+updateAuthorizer_identitySource = Lens.lens (\UpdateAuthorizer' {identitySource} -> identitySource) (\s@UpdateAuthorizer' {} a -> s {identitySource = a} :: UpdateAuthorizer) Prelude.. Lens.mapping Lens.coerced
+
+-- | This parameter is not used.
+updateAuthorizer_identityValidationExpression :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe Prelude.Text)
+updateAuthorizer_identityValidationExpression = Lens.lens (\UpdateAuthorizer' {identityValidationExpression} -> identityValidationExpression) (\s@UpdateAuthorizer' {} a -> s {identityValidationExpression = a} :: UpdateAuthorizer)
+
+-- | Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+updateAuthorizer_jwtConfiguration :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe JWTConfiguration)
+updateAuthorizer_jwtConfiguration = Lens.lens (\UpdateAuthorizer' {jwtConfiguration} -> jwtConfiguration) (\s@UpdateAuthorizer' {} a -> s {jwtConfiguration = a} :: UpdateAuthorizer)
+
+-- | The name of the authorizer.
+updateAuthorizer_name :: Lens.Lens' UpdateAuthorizer (Prelude.Maybe Prelude.Text)
+updateAuthorizer_name = Lens.lens (\UpdateAuthorizer' {name} -> name) (\s@UpdateAuthorizer' {} a -> s {name = a} :: UpdateAuthorizer)
+
+-- | The authorizer identifier.
+updateAuthorizer_authorizerId :: Lens.Lens' UpdateAuthorizer Prelude.Text
+updateAuthorizer_authorizerId = Lens.lens (\UpdateAuthorizer' {authorizerId} -> authorizerId) (\s@UpdateAuthorizer' {} a -> s {authorizerId = a} :: UpdateAuthorizer)
+
+-- | The API identifier.
+updateAuthorizer_apiId :: Lens.Lens' UpdateAuthorizer Prelude.Text
+updateAuthorizer_apiId = Lens.lens (\UpdateAuthorizer' {apiId} -> apiId) (\s@UpdateAuthorizer' {} a -> s {apiId = a} :: UpdateAuthorizer)
+
+instance Core.AWSRequest UpdateAuthorizer where
+  type
+    AWSResponse UpdateAuthorizer =
+      UpdateAuthorizerResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAuthorizerResponse'
+            Prelude.<$> (x Data..?> "authorizerCredentialsArn")
+            Prelude.<*> (x Data..?> "authorizerId")
+            Prelude.<*> (x Data..?> "authorizerPayloadFormatVersion")
+            Prelude.<*> (x Data..?> "authorizerResultTtlInSeconds")
+            Prelude.<*> (x Data..?> "authorizerType")
+            Prelude.<*> (x Data..?> "authorizerUri")
+            Prelude.<*> (x Data..?> "enableSimpleResponses")
+            Prelude.<*> (x Data..?> "identitySource" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "identityValidationExpression")
+            Prelude.<*> (x Data..?> "jwtConfiguration")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAuthorizer where
+  hashWithSalt _salt UpdateAuthorizer' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorizerCredentialsArn
+      `Prelude.hashWithSalt` authorizerPayloadFormatVersion
+      `Prelude.hashWithSalt` authorizerResultTtlInSeconds
+      `Prelude.hashWithSalt` authorizerType
+      `Prelude.hashWithSalt` authorizerUri
+      `Prelude.hashWithSalt` enableSimpleResponses
+      `Prelude.hashWithSalt` identitySource
+      `Prelude.hashWithSalt` identityValidationExpression
+      `Prelude.hashWithSalt` jwtConfiguration
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` authorizerId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData UpdateAuthorizer where
+  rnf UpdateAuthorizer' {..} =
+    Prelude.rnf authorizerCredentialsArn
+      `Prelude.seq` Prelude.rnf authorizerPayloadFormatVersion
+      `Prelude.seq` Prelude.rnf authorizerResultTtlInSeconds
+      `Prelude.seq` Prelude.rnf authorizerType
+      `Prelude.seq` Prelude.rnf authorizerUri
+      `Prelude.seq` Prelude.rnf enableSimpleResponses
+      `Prelude.seq` Prelude.rnf identitySource
+      `Prelude.seq` Prelude.rnf identityValidationExpression
+      `Prelude.seq` Prelude.rnf jwtConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders UpdateAuthorizer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAuthorizer where
+  toJSON UpdateAuthorizer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("authorizerCredentialsArn" Data..=)
+              Prelude.<$> authorizerCredentialsArn,
+            ("authorizerPayloadFormatVersion" Data..=)
+              Prelude.<$> authorizerPayloadFormatVersion,
+            ("authorizerResultTtlInSeconds" Data..=)
+              Prelude.<$> authorizerResultTtlInSeconds,
+            ("authorizerType" Data..=)
+              Prelude.<$> authorizerType,
+            ("authorizerUri" Data..=) Prelude.<$> authorizerUri,
+            ("enableSimpleResponses" Data..=)
+              Prelude.<$> enableSimpleResponses,
+            ("identitySource" Data..=)
+              Prelude.<$> identitySource,
+            ("identityValidationExpression" Data..=)
+              Prelude.<$> identityValidationExpression,
+            ("jwtConfiguration" Data..=)
+              Prelude.<$> jwtConfiguration,
+            ("name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateAuthorizer where
+  toPath UpdateAuthorizer' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/authorizers/",
+        Data.toBS authorizerId
+      ]
+
+instance Data.ToQuery UpdateAuthorizer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAuthorizerResponse' smart constructor.
+data UpdateAuthorizerResponse = UpdateAuthorizerResponse'
+  { -- | Specifies the required credentials as an IAM role for API Gateway to
+    -- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+    -- use the role\'s Amazon Resource Name (ARN). To use resource-based
+    -- permissions on the Lambda function, don\'t specify this parameter.
+    -- Supported only for REQUEST authorizers.
+    authorizerCredentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The authorizer identifier.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format of the payload sent to an HTTP API Lambda
+    -- authorizer. Required for HTTP API Lambda authorizers. Supported values
+    -- are 1.0 and 2.0. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    authorizerPayloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time to live (TTL) for cached authorizer results, in seconds. If it
+    -- equals 0, authorization caching is disabled. If it is greater than 0,
+    -- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+    -- hour. Supported only for HTTP API Lambda authorizers.
+    authorizerResultTtlInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The authorizer type. Specify REQUEST for a Lambda function using
+    -- incoming request parameters. Specify JWT to use JSON Web Tokens
+    -- (supported only for HTTP APIs).
+    authorizerType :: Prelude.Maybe AuthorizerType,
+    -- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+    -- authorizers, this must be a well-formed Lambda function URI, for
+    -- example,
+    -- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+    -- In general, the URI has this form:
+    -- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+    -- is the same as the region hosting the Lambda function, path indicates
+    -- that the remaining substring in the URI should be treated as the path to
+    -- the resource, including the initial \/. For Lambda functions, this is
+    -- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+    -- Supported only for REQUEST authorizers.
+    authorizerUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether a Lambda authorizer returns a response in a simple
+    -- format. If enabled, the Lambda authorizer can return a boolean value
+    -- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+    -- see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+    enableSimpleResponses :: Prelude.Maybe Prelude.Bool,
+    -- | The identity source for which authorization is requested.
+    --
+    -- For a REQUEST authorizer, this is optional. The value is a set of one or
+    -- more mapping expressions of the specified request parameters. The
+    -- identity source can be headers, query string parameters, stage
+    -- variables, and context parameters. For example, if an Auth header and a
+    -- Name query string parameter are defined as identity sources, this value
+    -- is route.request.header.Auth, route.request.querystring.Name for
+    -- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+    -- \$, for example, $request.header.Auth, $request.querystring.Name. These
+    -- parameters are used to perform runtime validation for Lambda-based
+    -- authorizers by verifying all of the identity-related request parameters
+    -- are present in the request, not null, and non-empty. Only when this is
+    -- true does the authorizer invoke the authorizer Lambda function.
+    -- Otherwise, it returns a 401 Unauthorized response without calling the
+    -- Lambda function. For HTTP APIs, identity sources are also used as the
+    -- cache key when caching is enabled. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+    --
+    -- For JWT, a single entry that specifies where to extract the JSON Web
+    -- Token (JWT) from inbound requests. Currently only header-based and query
+    -- parameter-based selections are supported, for example
+    -- \$request.header.Authorization.
+    identitySource :: Prelude.Maybe [Prelude.Text],
+    -- | The validation expression does not apply to the REQUEST authorizer.
+    identityValidationExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the configuration of a JWT authorizer. Required for the JWT
+    -- authorizer type. Supported only for HTTP APIs.
+    jwtConfiguration :: Prelude.Maybe JWTConfiguration,
+    -- | The name of the authorizer.
+    name :: 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 'UpdateAuthorizerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizerCredentialsArn', 'updateAuthorizerResponse_authorizerCredentialsArn' - Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+--
+-- 'authorizerId', 'updateAuthorizerResponse_authorizerId' - The authorizer identifier.
+--
+-- 'authorizerPayloadFormatVersion', 'updateAuthorizerResponse_authorizerPayloadFormatVersion' - Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- 'authorizerResultTtlInSeconds', 'updateAuthorizerResponse_authorizerResultTtlInSeconds' - The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+--
+-- 'authorizerType', 'updateAuthorizerResponse_authorizerType' - The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+--
+-- 'authorizerUri', 'updateAuthorizerResponse_authorizerUri' - The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+--
+-- 'enableSimpleResponses', 'updateAuthorizerResponse_enableSimpleResponses' - Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+--
+-- 'identitySource', 'updateAuthorizerResponse_identitySource' - The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+--
+-- 'identityValidationExpression', 'updateAuthorizerResponse_identityValidationExpression' - The validation expression does not apply to the REQUEST authorizer.
+--
+-- 'jwtConfiguration', 'updateAuthorizerResponse_jwtConfiguration' - Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+--
+-- 'name', 'updateAuthorizerResponse_name' - The name of the authorizer.
+--
+-- 'httpStatus', 'updateAuthorizerResponse_httpStatus' - The response's http status code.
+newUpdateAuthorizerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAuthorizerResponse
+newUpdateAuthorizerResponse pHttpStatus_ =
+  UpdateAuthorizerResponse'
+    { authorizerCredentialsArn =
+        Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      authorizerPayloadFormatVersion = Prelude.Nothing,
+      authorizerResultTtlInSeconds = Prelude.Nothing,
+      authorizerType = Prelude.Nothing,
+      authorizerUri = Prelude.Nothing,
+      enableSimpleResponses = Prelude.Nothing,
+      identitySource = Prelude.Nothing,
+      identityValidationExpression = Prelude.Nothing,
+      jwtConfiguration = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies the required credentials as an IAM role for API Gateway to
+-- invoke the authorizer. To specify an IAM role for API Gateway to assume,
+-- use the role\'s Amazon Resource Name (ARN). To use resource-based
+-- permissions on the Lambda function, don\'t specify this parameter.
+-- Supported only for REQUEST authorizers.
+updateAuthorizerResponse_authorizerCredentialsArn :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+updateAuthorizerResponse_authorizerCredentialsArn = Lens.lens (\UpdateAuthorizerResponse' {authorizerCredentialsArn} -> authorizerCredentialsArn) (\s@UpdateAuthorizerResponse' {} a -> s {authorizerCredentialsArn = a} :: UpdateAuthorizerResponse)
+
+-- | The authorizer identifier.
+updateAuthorizerResponse_authorizerId :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+updateAuthorizerResponse_authorizerId = Lens.lens (\UpdateAuthorizerResponse' {authorizerId} -> authorizerId) (\s@UpdateAuthorizerResponse' {} a -> s {authorizerId = a} :: UpdateAuthorizerResponse)
+
+-- | Specifies the format of the payload sent to an HTTP API Lambda
+-- authorizer. Required for HTTP API Lambda authorizers. Supported values
+-- are 1.0 and 2.0. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+updateAuthorizerResponse_authorizerPayloadFormatVersion :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+updateAuthorizerResponse_authorizerPayloadFormatVersion = Lens.lens (\UpdateAuthorizerResponse' {authorizerPayloadFormatVersion} -> authorizerPayloadFormatVersion) (\s@UpdateAuthorizerResponse' {} a -> s {authorizerPayloadFormatVersion = a} :: UpdateAuthorizerResponse)
+
+-- | The time to live (TTL) for cached authorizer results, in seconds. If it
+-- equals 0, authorization caching is disabled. If it is greater than 0,
+-- API Gateway caches authorizer responses. The maximum value is 3600, or 1
+-- hour. Supported only for HTTP API Lambda authorizers.
+updateAuthorizerResponse_authorizerResultTtlInSeconds :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Natural)
+updateAuthorizerResponse_authorizerResultTtlInSeconds = Lens.lens (\UpdateAuthorizerResponse' {authorizerResultTtlInSeconds} -> authorizerResultTtlInSeconds) (\s@UpdateAuthorizerResponse' {} a -> s {authorizerResultTtlInSeconds = a} :: UpdateAuthorizerResponse)
+
+-- | The authorizer type. Specify REQUEST for a Lambda function using
+-- incoming request parameters. Specify JWT to use JSON Web Tokens
+-- (supported only for HTTP APIs).
+updateAuthorizerResponse_authorizerType :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe AuthorizerType)
+updateAuthorizerResponse_authorizerType = Lens.lens (\UpdateAuthorizerResponse' {authorizerType} -> authorizerType) (\s@UpdateAuthorizerResponse' {} a -> s {authorizerType = a} :: UpdateAuthorizerResponse)
+
+-- | The authorizer\'s Uniform Resource Identifier (URI). For REQUEST
+-- authorizers, this must be a well-formed Lambda function URI, for
+-- example,
+-- arn:aws:apigateway:us-west-2:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}\/invocations.
+-- In general, the URI has this form:
+-- arn:aws:apigateway:{region}:lambda:path\/{service_api} , where {region}
+-- is the same as the region hosting the Lambda function, path indicates
+-- that the remaining substring in the URI should be treated as the path to
+-- the resource, including the initial \/. For Lambda functions, this is
+-- usually of the form \/2015-03-31\/functions\/[FunctionARN]\/invocations.
+-- Supported only for REQUEST authorizers.
+updateAuthorizerResponse_authorizerUri :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+updateAuthorizerResponse_authorizerUri = Lens.lens (\UpdateAuthorizerResponse' {authorizerUri} -> authorizerUri) (\s@UpdateAuthorizerResponse' {} a -> s {authorizerUri = a} :: UpdateAuthorizerResponse)
+
+-- | Specifies whether a Lambda authorizer returns a response in a simple
+-- format. If enabled, the Lambda authorizer can return a boolean value
+-- instead of an IAM policy. Supported only for HTTP APIs. To learn more,
+-- see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>
+updateAuthorizerResponse_enableSimpleResponses :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Bool)
+updateAuthorizerResponse_enableSimpleResponses = Lens.lens (\UpdateAuthorizerResponse' {enableSimpleResponses} -> enableSimpleResponses) (\s@UpdateAuthorizerResponse' {} a -> s {enableSimpleResponses = a} :: UpdateAuthorizerResponse)
+
+-- | The identity source for which authorization is requested.
+--
+-- For a REQUEST authorizer, this is optional. The value is a set of one or
+-- more mapping expressions of the specified request parameters. The
+-- identity source can be headers, query string parameters, stage
+-- variables, and context parameters. For example, if an Auth header and a
+-- Name query string parameter are defined as identity sources, this value
+-- is route.request.header.Auth, route.request.querystring.Name for
+-- WebSocket APIs. For HTTP APIs, use selection expressions prefixed with
+-- \$, for example, $request.header.Auth, $request.querystring.Name. These
+-- parameters are used to perform runtime validation for Lambda-based
+-- authorizers by verifying all of the identity-related request parameters
+-- are present in the request, not null, and non-empty. Only when this is
+-- true does the authorizer invoke the authorizer Lambda function.
+-- Otherwise, it returns a 401 Unauthorized response without calling the
+-- Lambda function. For HTTP APIs, identity sources are also used as the
+-- cache key when caching is enabled. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html Working with AWS Lambda authorizers for HTTP APIs>.
+--
+-- For JWT, a single entry that specifies where to extract the JSON Web
+-- Token (JWT) from inbound requests. Currently only header-based and query
+-- parameter-based selections are supported, for example
+-- \$request.header.Authorization.
+updateAuthorizerResponse_identitySource :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe [Prelude.Text])
+updateAuthorizerResponse_identitySource = Lens.lens (\UpdateAuthorizerResponse' {identitySource} -> identitySource) (\s@UpdateAuthorizerResponse' {} a -> s {identitySource = a} :: UpdateAuthorizerResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The validation expression does not apply to the REQUEST authorizer.
+updateAuthorizerResponse_identityValidationExpression :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+updateAuthorizerResponse_identityValidationExpression = Lens.lens (\UpdateAuthorizerResponse' {identityValidationExpression} -> identityValidationExpression) (\s@UpdateAuthorizerResponse' {} a -> s {identityValidationExpression = a} :: UpdateAuthorizerResponse)
+
+-- | Represents the configuration of a JWT authorizer. Required for the JWT
+-- authorizer type. Supported only for HTTP APIs.
+updateAuthorizerResponse_jwtConfiguration :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe JWTConfiguration)
+updateAuthorizerResponse_jwtConfiguration = Lens.lens (\UpdateAuthorizerResponse' {jwtConfiguration} -> jwtConfiguration) (\s@UpdateAuthorizerResponse' {} a -> s {jwtConfiguration = a} :: UpdateAuthorizerResponse)
+
+-- | The name of the authorizer.
+updateAuthorizerResponse_name :: Lens.Lens' UpdateAuthorizerResponse (Prelude.Maybe Prelude.Text)
+updateAuthorizerResponse_name = Lens.lens (\UpdateAuthorizerResponse' {name} -> name) (\s@UpdateAuthorizerResponse' {} a -> s {name = a} :: UpdateAuthorizerResponse)
+
+-- | The response's http status code.
+updateAuthorizerResponse_httpStatus :: Lens.Lens' UpdateAuthorizerResponse Prelude.Int
+updateAuthorizerResponse_httpStatus = Lens.lens (\UpdateAuthorizerResponse' {httpStatus} -> httpStatus) (\s@UpdateAuthorizerResponse' {} a -> s {httpStatus = a} :: UpdateAuthorizerResponse)
+
+instance Prelude.NFData UpdateAuthorizerResponse where
+  rnf UpdateAuthorizerResponse' {..} =
+    Prelude.rnf authorizerCredentialsArn
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf authorizerPayloadFormatVersion
+      `Prelude.seq` Prelude.rnf authorizerResultTtlInSeconds
+      `Prelude.seq` Prelude.rnf authorizerType
+      `Prelude.seq` Prelude.rnf authorizerUri
+      `Prelude.seq` Prelude.rnf enableSimpleResponses
+      `Prelude.seq` Prelude.rnf identitySource
+      `Prelude.seq` Prelude.rnf identityValidationExpression
+      `Prelude.seq` Prelude.rnf jwtConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateDeployment.hs b/gen/Amazonka/ApiGatewayV2/UpdateDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateDeployment.hs
@@ -0,0 +1,262 @@
+{-# 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.ApiGatewayV2.UpdateDeployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a Deployment.
+module Amazonka.ApiGatewayV2.UpdateDeployment
+  ( -- * Creating a Request
+    UpdateDeployment (..),
+    newUpdateDeployment,
+
+    -- * Request Lenses
+    updateDeployment_description,
+    updateDeployment_apiId,
+    updateDeployment_deploymentId,
+
+    -- * Destructuring the Response
+    UpdateDeploymentResponse (..),
+    newUpdateDeploymentResponse,
+
+    -- * Response Lenses
+    updateDeploymentResponse_autoDeployed,
+    updateDeploymentResponse_createdDate,
+    updateDeploymentResponse_deploymentId,
+    updateDeploymentResponse_deploymentStatus,
+    updateDeploymentResponse_deploymentStatusMessage,
+    updateDeploymentResponse_description,
+    updateDeploymentResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates a Deployment.
+--
+-- /See:/ 'newUpdateDeployment' smart constructor.
+data UpdateDeployment = UpdateDeployment'
+  { -- | The description for the deployment resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The deployment ID.
+    deploymentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDeployment_description' - The description for the deployment resource.
+--
+-- 'apiId', 'updateDeployment_apiId' - The API identifier.
+--
+-- 'deploymentId', 'updateDeployment_deploymentId' - The deployment ID.
+newUpdateDeployment ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'deploymentId'
+  Prelude.Text ->
+  UpdateDeployment
+newUpdateDeployment pApiId_ pDeploymentId_ =
+  UpdateDeployment'
+    { description = Prelude.Nothing,
+      apiId = pApiId_,
+      deploymentId = pDeploymentId_
+    }
+
+-- | The description for the deployment resource.
+updateDeployment_description :: Lens.Lens' UpdateDeployment (Prelude.Maybe Prelude.Text)
+updateDeployment_description = Lens.lens (\UpdateDeployment' {description} -> description) (\s@UpdateDeployment' {} a -> s {description = a} :: UpdateDeployment)
+
+-- | The API identifier.
+updateDeployment_apiId :: Lens.Lens' UpdateDeployment Prelude.Text
+updateDeployment_apiId = Lens.lens (\UpdateDeployment' {apiId} -> apiId) (\s@UpdateDeployment' {} a -> s {apiId = a} :: UpdateDeployment)
+
+-- | The deployment ID.
+updateDeployment_deploymentId :: Lens.Lens' UpdateDeployment Prelude.Text
+updateDeployment_deploymentId = Lens.lens (\UpdateDeployment' {deploymentId} -> deploymentId) (\s@UpdateDeployment' {} a -> s {deploymentId = a} :: UpdateDeployment)
+
+instance Core.AWSRequest UpdateDeployment where
+  type
+    AWSResponse UpdateDeployment =
+      UpdateDeploymentResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDeploymentResponse'
+            Prelude.<$> (x Data..?> "autoDeployed")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "deploymentId")
+            Prelude.<*> (x Data..?> "deploymentStatus")
+            Prelude.<*> (x Data..?> "deploymentStatusMessage")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDeployment where
+  hashWithSalt _salt UpdateDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` deploymentId
+
+instance Prelude.NFData UpdateDeployment where
+  rnf UpdateDeployment' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf deploymentId
+
+instance Data.ToHeaders UpdateDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDeployment where
+  toJSON UpdateDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("description" Data..=) Prelude.<$> description]
+      )
+
+instance Data.ToPath UpdateDeployment where
+  toPath UpdateDeployment' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/deployments/",
+        Data.toBS deploymentId
+      ]
+
+instance Data.ToQuery UpdateDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDeploymentResponse' smart constructor.
+data UpdateDeploymentResponse = UpdateDeploymentResponse'
+  { -- | Specifies whether a deployment was automatically released.
+    autoDeployed :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time when the Deployment resource was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier for the deployment.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+    deploymentStatus :: Prelude.Maybe DeploymentStatus,
+    -- | May contain additional feedback on the status of an API deployment.
+    deploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The description for the deployment.
+    description :: 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 'UpdateDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoDeployed', 'updateDeploymentResponse_autoDeployed' - Specifies whether a deployment was automatically released.
+--
+-- 'createdDate', 'updateDeploymentResponse_createdDate' - The date and time when the Deployment resource was created.
+--
+-- 'deploymentId', 'updateDeploymentResponse_deploymentId' - The identifier for the deployment.
+--
+-- 'deploymentStatus', 'updateDeploymentResponse_deploymentStatus' - The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+--
+-- 'deploymentStatusMessage', 'updateDeploymentResponse_deploymentStatusMessage' - May contain additional feedback on the status of an API deployment.
+--
+-- 'description', 'updateDeploymentResponse_description' - The description for the deployment.
+--
+-- 'httpStatus', 'updateDeploymentResponse_httpStatus' - The response's http status code.
+newUpdateDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDeploymentResponse
+newUpdateDeploymentResponse pHttpStatus_ =
+  UpdateDeploymentResponse'
+    { autoDeployed =
+        Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      deploymentStatus = Prelude.Nothing,
+      deploymentStatusMessage = Prelude.Nothing,
+      description = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether a deployment was automatically released.
+updateDeploymentResponse_autoDeployed :: Lens.Lens' UpdateDeploymentResponse (Prelude.Maybe Prelude.Bool)
+updateDeploymentResponse_autoDeployed = Lens.lens (\UpdateDeploymentResponse' {autoDeployed} -> autoDeployed) (\s@UpdateDeploymentResponse' {} a -> s {autoDeployed = a} :: UpdateDeploymentResponse)
+
+-- | The date and time when the Deployment resource was created.
+updateDeploymentResponse_createdDate :: Lens.Lens' UpdateDeploymentResponse (Prelude.Maybe Prelude.UTCTime)
+updateDeploymentResponse_createdDate = Lens.lens (\UpdateDeploymentResponse' {createdDate} -> createdDate) (\s@UpdateDeploymentResponse' {} a -> s {createdDate = a} :: UpdateDeploymentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier for the deployment.
+updateDeploymentResponse_deploymentId :: Lens.Lens' UpdateDeploymentResponse (Prelude.Maybe Prelude.Text)
+updateDeploymentResponse_deploymentId = Lens.lens (\UpdateDeploymentResponse' {deploymentId} -> deploymentId) (\s@UpdateDeploymentResponse' {} a -> s {deploymentId = a} :: UpdateDeploymentResponse)
+
+-- | The status of the deployment: PENDING, FAILED, or SUCCEEDED.
+updateDeploymentResponse_deploymentStatus :: Lens.Lens' UpdateDeploymentResponse (Prelude.Maybe DeploymentStatus)
+updateDeploymentResponse_deploymentStatus = Lens.lens (\UpdateDeploymentResponse' {deploymentStatus} -> deploymentStatus) (\s@UpdateDeploymentResponse' {} a -> s {deploymentStatus = a} :: UpdateDeploymentResponse)
+
+-- | May contain additional feedback on the status of an API deployment.
+updateDeploymentResponse_deploymentStatusMessage :: Lens.Lens' UpdateDeploymentResponse (Prelude.Maybe Prelude.Text)
+updateDeploymentResponse_deploymentStatusMessage = Lens.lens (\UpdateDeploymentResponse' {deploymentStatusMessage} -> deploymentStatusMessage) (\s@UpdateDeploymentResponse' {} a -> s {deploymentStatusMessage = a} :: UpdateDeploymentResponse)
+
+-- | The description for the deployment.
+updateDeploymentResponse_description :: Lens.Lens' UpdateDeploymentResponse (Prelude.Maybe Prelude.Text)
+updateDeploymentResponse_description = Lens.lens (\UpdateDeploymentResponse' {description} -> description) (\s@UpdateDeploymentResponse' {} a -> s {description = a} :: UpdateDeploymentResponse)
+
+-- | The response's http status code.
+updateDeploymentResponse_httpStatus :: Lens.Lens' UpdateDeploymentResponse Prelude.Int
+updateDeploymentResponse_httpStatus = Lens.lens (\UpdateDeploymentResponse' {httpStatus} -> httpStatus) (\s@UpdateDeploymentResponse' {} a -> s {httpStatus = a} :: UpdateDeploymentResponse)
+
+instance Prelude.NFData UpdateDeploymentResponse where
+  rnf UpdateDeploymentResponse' {..} =
+    Prelude.rnf autoDeployed
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf deploymentStatus
+      `Prelude.seq` Prelude.rnf deploymentStatusMessage
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateDomainName.hs b/gen/Amazonka/ApiGatewayV2/UpdateDomainName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateDomainName.hs
@@ -0,0 +1,252 @@
+{-# 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.ApiGatewayV2.UpdateDomainName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a domain name.
+module Amazonka.ApiGatewayV2.UpdateDomainName
+  ( -- * Creating a Request
+    UpdateDomainName (..),
+    newUpdateDomainName,
+
+    -- * Request Lenses
+    updateDomainName_domainNameConfigurations,
+    updateDomainName_mutualTlsAuthentication,
+    updateDomainName_domainName,
+
+    -- * Destructuring the Response
+    UpdateDomainNameResponse (..),
+    newUpdateDomainNameResponse,
+
+    -- * Response Lenses
+    updateDomainNameResponse_apiMappingSelectionExpression,
+    updateDomainNameResponse_domainName,
+    updateDomainNameResponse_domainNameConfigurations,
+    updateDomainNameResponse_mutualTlsAuthentication,
+    updateDomainNameResponse_tags,
+    updateDomainNameResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates a DomainName.
+--
+-- /See:/ 'newUpdateDomainName' smart constructor.
+data UpdateDomainName = UpdateDomainName'
+  { -- | The domain name configurations.
+    domainNameConfigurations :: Prelude.Maybe [DomainNameConfiguration],
+    -- | The mutual TLS authentication configuration for a custom domain name.
+    mutualTlsAuthentication :: Prelude.Maybe MutualTlsAuthenticationInput,
+    -- | The domain name.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDomainName' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainNameConfigurations', 'updateDomainName_domainNameConfigurations' - The domain name configurations.
+--
+-- 'mutualTlsAuthentication', 'updateDomainName_mutualTlsAuthentication' - The mutual TLS authentication configuration for a custom domain name.
+--
+-- 'domainName', 'updateDomainName_domainName' - The domain name.
+newUpdateDomainName ::
+  -- | 'domainName'
+  Prelude.Text ->
+  UpdateDomainName
+newUpdateDomainName pDomainName_ =
+  UpdateDomainName'
+    { domainNameConfigurations =
+        Prelude.Nothing,
+      mutualTlsAuthentication = Prelude.Nothing,
+      domainName = pDomainName_
+    }
+
+-- | The domain name configurations.
+updateDomainName_domainNameConfigurations :: Lens.Lens' UpdateDomainName (Prelude.Maybe [DomainNameConfiguration])
+updateDomainName_domainNameConfigurations = Lens.lens (\UpdateDomainName' {domainNameConfigurations} -> domainNameConfigurations) (\s@UpdateDomainName' {} a -> s {domainNameConfigurations = a} :: UpdateDomainName) Prelude.. Lens.mapping Lens.coerced
+
+-- | The mutual TLS authentication configuration for a custom domain name.
+updateDomainName_mutualTlsAuthentication :: Lens.Lens' UpdateDomainName (Prelude.Maybe MutualTlsAuthenticationInput)
+updateDomainName_mutualTlsAuthentication = Lens.lens (\UpdateDomainName' {mutualTlsAuthentication} -> mutualTlsAuthentication) (\s@UpdateDomainName' {} a -> s {mutualTlsAuthentication = a} :: UpdateDomainName)
+
+-- | The domain name.
+updateDomainName_domainName :: Lens.Lens' UpdateDomainName Prelude.Text
+updateDomainName_domainName = Lens.lens (\UpdateDomainName' {domainName} -> domainName) (\s@UpdateDomainName' {} a -> s {domainName = a} :: UpdateDomainName)
+
+instance Core.AWSRequest UpdateDomainName where
+  type
+    AWSResponse UpdateDomainName =
+      UpdateDomainNameResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDomainNameResponse'
+            Prelude.<$> (x Data..?> "apiMappingSelectionExpression")
+            Prelude.<*> (x Data..?> "domainName")
+            Prelude.<*> ( x
+                            Data..?> "domainNameConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "mutualTlsAuthentication")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDomainName where
+  hashWithSalt _salt UpdateDomainName' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainNameConfigurations
+      `Prelude.hashWithSalt` mutualTlsAuthentication
+      `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData UpdateDomainName where
+  rnf UpdateDomainName' {..} =
+    Prelude.rnf domainNameConfigurations
+      `Prelude.seq` Prelude.rnf mutualTlsAuthentication
+      `Prelude.seq` Prelude.rnf domainName
+
+instance Data.ToHeaders UpdateDomainName where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDomainName where
+  toJSON UpdateDomainName' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("domainNameConfigurations" Data..=)
+              Prelude.<$> domainNameConfigurations,
+            ("mutualTlsAuthentication" Data..=)
+              Prelude.<$> mutualTlsAuthentication
+          ]
+      )
+
+instance Data.ToPath UpdateDomainName where
+  toPath UpdateDomainName' {..} =
+    Prelude.mconcat
+      ["/v2/domainnames/", Data.toBS domainName]
+
+instance Data.ToQuery UpdateDomainName where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDomainNameResponse' smart constructor.
+data UpdateDomainNameResponse = UpdateDomainNameResponse'
+  { -- | The API mapping selection expression.
+    apiMappingSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The name of the DomainName resource.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | The domain name configurations.
+    domainNameConfigurations :: Prelude.Maybe [DomainNameConfiguration],
+    -- | The mutual TLS authentication configuration for a custom domain name.
+    mutualTlsAuthentication :: Prelude.Maybe MutualTlsAuthentication,
+    -- | The collection of tags associated with a domain name.
+    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 'UpdateDomainNameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiMappingSelectionExpression', 'updateDomainNameResponse_apiMappingSelectionExpression' - The API mapping selection expression.
+--
+-- 'domainName', 'updateDomainNameResponse_domainName' - The name of the DomainName resource.
+--
+-- 'domainNameConfigurations', 'updateDomainNameResponse_domainNameConfigurations' - The domain name configurations.
+--
+-- 'mutualTlsAuthentication', 'updateDomainNameResponse_mutualTlsAuthentication' - The mutual TLS authentication configuration for a custom domain name.
+--
+-- 'tags', 'updateDomainNameResponse_tags' - The collection of tags associated with a domain name.
+--
+-- 'httpStatus', 'updateDomainNameResponse_httpStatus' - The response's http status code.
+newUpdateDomainNameResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDomainNameResponse
+newUpdateDomainNameResponse pHttpStatus_ =
+  UpdateDomainNameResponse'
+    { apiMappingSelectionExpression =
+        Prelude.Nothing,
+      domainName = Prelude.Nothing,
+      domainNameConfigurations = Prelude.Nothing,
+      mutualTlsAuthentication = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The API mapping selection expression.
+updateDomainNameResponse_apiMappingSelectionExpression :: Lens.Lens' UpdateDomainNameResponse (Prelude.Maybe Prelude.Text)
+updateDomainNameResponse_apiMappingSelectionExpression = Lens.lens (\UpdateDomainNameResponse' {apiMappingSelectionExpression} -> apiMappingSelectionExpression) (\s@UpdateDomainNameResponse' {} a -> s {apiMappingSelectionExpression = a} :: UpdateDomainNameResponse)
+
+-- | The name of the DomainName resource.
+updateDomainNameResponse_domainName :: Lens.Lens' UpdateDomainNameResponse (Prelude.Maybe Prelude.Text)
+updateDomainNameResponse_domainName = Lens.lens (\UpdateDomainNameResponse' {domainName} -> domainName) (\s@UpdateDomainNameResponse' {} a -> s {domainName = a} :: UpdateDomainNameResponse)
+
+-- | The domain name configurations.
+updateDomainNameResponse_domainNameConfigurations :: Lens.Lens' UpdateDomainNameResponse (Prelude.Maybe [DomainNameConfiguration])
+updateDomainNameResponse_domainNameConfigurations = Lens.lens (\UpdateDomainNameResponse' {domainNameConfigurations} -> domainNameConfigurations) (\s@UpdateDomainNameResponse' {} a -> s {domainNameConfigurations = a} :: UpdateDomainNameResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The mutual TLS authentication configuration for a custom domain name.
+updateDomainNameResponse_mutualTlsAuthentication :: Lens.Lens' UpdateDomainNameResponse (Prelude.Maybe MutualTlsAuthentication)
+updateDomainNameResponse_mutualTlsAuthentication = Lens.lens (\UpdateDomainNameResponse' {mutualTlsAuthentication} -> mutualTlsAuthentication) (\s@UpdateDomainNameResponse' {} a -> s {mutualTlsAuthentication = a} :: UpdateDomainNameResponse)
+
+-- | The collection of tags associated with a domain name.
+updateDomainNameResponse_tags :: Lens.Lens' UpdateDomainNameResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateDomainNameResponse_tags = Lens.lens (\UpdateDomainNameResponse' {tags} -> tags) (\s@UpdateDomainNameResponse' {} a -> s {tags = a} :: UpdateDomainNameResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateDomainNameResponse_httpStatus :: Lens.Lens' UpdateDomainNameResponse Prelude.Int
+updateDomainNameResponse_httpStatus = Lens.lens (\UpdateDomainNameResponse' {httpStatus} -> httpStatus) (\s@UpdateDomainNameResponse' {} a -> s {httpStatus = a} :: UpdateDomainNameResponse)
+
+instance Prelude.NFData UpdateDomainNameResponse where
+  rnf UpdateDomainNameResponse' {..} =
+    Prelude.rnf apiMappingSelectionExpression
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf domainNameConfigurations
+      `Prelude.seq` Prelude.rnf mutualTlsAuthentication
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateIntegration.hs b/gen/Amazonka/ApiGatewayV2/UpdateIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateIntegration.hs
@@ -0,0 +1,1357 @@
+{-# 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.ApiGatewayV2.UpdateIntegration
+-- 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 Integration.
+module Amazonka.ApiGatewayV2.UpdateIntegration
+  ( -- * Creating a Request
+    UpdateIntegration (..),
+    newUpdateIntegration,
+
+    -- * Request Lenses
+    updateIntegration_connectionId,
+    updateIntegration_connectionType,
+    updateIntegration_contentHandlingStrategy,
+    updateIntegration_credentialsArn,
+    updateIntegration_description,
+    updateIntegration_integrationMethod,
+    updateIntegration_integrationSubtype,
+    updateIntegration_integrationType,
+    updateIntegration_integrationUri,
+    updateIntegration_passthroughBehavior,
+    updateIntegration_payloadFormatVersion,
+    updateIntegration_requestParameters,
+    updateIntegration_requestTemplates,
+    updateIntegration_responseParameters,
+    updateIntegration_templateSelectionExpression,
+    updateIntegration_timeoutInMillis,
+    updateIntegration_tlsConfig,
+    updateIntegration_apiId,
+    updateIntegration_integrationId,
+
+    -- * Destructuring the Response
+    UpdateIntegrationResponse' (..),
+    newUpdateIntegrationResponse',
+
+    -- * Response Lenses
+    updateIntegrationResponse'_apiGatewayManaged,
+    updateIntegrationResponse'_connectionId,
+    updateIntegrationResponse'_connectionType,
+    updateIntegrationResponse'_contentHandlingStrategy,
+    updateIntegrationResponse'_credentialsArn,
+    updateIntegrationResponse'_description,
+    updateIntegrationResponse'_integrationId,
+    updateIntegrationResponse'_integrationMethod,
+    updateIntegrationResponse'_integrationResponseSelectionExpression,
+    updateIntegrationResponse'_integrationSubtype,
+    updateIntegrationResponse'_integrationType,
+    updateIntegrationResponse'_integrationUri,
+    updateIntegrationResponse'_passthroughBehavior,
+    updateIntegrationResponse'_payloadFormatVersion,
+    updateIntegrationResponse'_requestParameters,
+    updateIntegrationResponse'_requestTemplates,
+    updateIntegrationResponse'_responseParameters,
+    updateIntegrationResponse'_templateSelectionExpression,
+    updateIntegrationResponse'_timeoutInMillis,
+    updateIntegrationResponse'_tlsConfig,
+    updateIntegrationResponse'_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates an Integration.
+--
+-- /See:/ 'newUpdateIntegration' smart constructor.
+data UpdateIntegration = UpdateIntegration'
+  { -- | The ID of the VPC link for a private integration. Supported only for
+    -- HTTP APIs.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the network connection to the integration endpoint. Specify
+    -- INTERNET for connections through the public routable internet or
+    -- VPC_LINK for private connections between API Gateway and resources in a
+    -- VPC. The default value is INTERNET.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | Specifies the credentials required for the integration, if any. For AWS
+    -- integrations, three options are available. To specify an IAM Role for
+    -- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+    -- require that the caller\'s identity be passed through from the request,
+    -- specify the string arn:aws:iam::*:user\/*. To use resource-based
+    -- permissions on supported AWS services, specify null.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the integration
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the integration\'s HTTP method type.
+    integrationMethod :: Prelude.Maybe Prelude.Text,
+    -- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+    -- service action to invoke. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+    integrationSubtype :: Prelude.Maybe Prelude.Text,
+    -- | The integration type of an integration. One of the following:
+    --
+    -- AWS: for integrating the route or method request with an AWS service
+    -- action, including the Lambda function-invoking action. With the Lambda
+    -- function-invoking action, this is referred to as the Lambda custom
+    -- integration. With any other AWS service action, this is known as AWS
+    -- integration. Supported only for WebSocket APIs.
+    --
+    -- AWS_PROXY: for integrating the route or method request with a Lambda
+    -- function or other AWS service action. This integration is also referred
+    -- to as a Lambda proxy integration.
+    --
+    -- HTTP: for integrating the route or method request with an HTTP endpoint.
+    -- This integration is also referred to as the HTTP custom integration.
+    -- Supported only for WebSocket APIs.
+    --
+    -- HTTP_PROXY: for integrating the route or method request with an HTTP
+    -- endpoint, with the client request passed through as-is. This is also
+    -- referred to as HTTP proxy integration. For HTTP API private
+    -- integrations, use an HTTP_PROXY integration.
+    --
+    -- MOCK: for integrating the route or method request with API Gateway as a
+    -- \"loopback\" endpoint without invoking any backend. Supported only for
+    -- WebSocket APIs.
+    integrationType :: Prelude.Maybe IntegrationType,
+    -- | For a Lambda integration, specify the URI of a Lambda function.
+    --
+    -- For an HTTP integration, specify a fully-qualified URL.
+    --
+    -- For an HTTP API private integration, specify the ARN of an Application
+    -- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+    -- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+    -- uses DiscoverInstances to identify resources. You can use query
+    -- parameters to target specific resources. To learn more, see
+    -- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+    -- For private integrations, all resources must be owned by the same AWS
+    -- account.
+    integrationUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the pass-through behavior for incoming requests based on the
+    -- Content-Type header in the request, and the available mapping templates
+    -- specified as the requestTemplates property on the Integration resource.
+    -- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+    -- NEVER. Supported only for WebSocket APIs.
+    --
+    -- WHEN_NO_MATCH passes the request body for unmapped content types through
+    -- to the integration backend without transformation.
+    --
+    -- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+    -- Type response.
+    --
+    -- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+    -- content types mapped to templates. However, if there is at least one
+    -- content type defined, unmapped content types will be rejected with the
+    -- same HTTP 415 Unsupported Media Type response.
+    passthroughBehavior :: Prelude.Maybe PassthroughBehavior,
+    -- | Specifies the format of the payload sent to an integration. Required for
+    -- HTTP APIs.
+    payloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | For WebSocket APIs, a key-value map specifying request parameters that
+    -- are passed from the method request to the backend. The key is an
+    -- integration request parameter name and the associated value is a method
+    -- request parameter value or static value that must be enclosed within
+    -- single quotes and pre-encoded as required by the backend. The method
+    -- request parameter value must match the pattern of
+    -- method.request.{location}.{name} , where {location} is querystring,
+    -- path, or header; and {name} must be a valid and unique method request
+    -- parameter name.
+    --
+    -- For HTTP API integrations with a specified integrationSubtype, request
+    -- parameters are a key-value map specifying parameters that are passed to
+    -- AWS_PROXY integrations. You can provide static values, or map request
+    -- data, stage variables, or context variables that are evaluated at
+    -- runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+    --
+    -- For HTTP API integrations, without a specified integrationSubtype
+    -- request parameters are a key-value map specifying how to transform HTTP
+    -- requests before sending them to the backend. The key should follow the
+    -- pattern \<action>:\<header|querystring|path>.\<location> where action
+    -- can be append, overwrite or remove. For values, you can provide static
+    -- values, or map request data, stage variables, or context variables that
+    -- are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping. Transforming API requests and responses>.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents a map of Velocity templates that are applied on the request
+    -- payload based on the value of the Content-Type header sent by the
+    -- client. The content type value is the key in this map, and the template
+    -- (as a String) is the value. Supported only for WebSocket APIs.
+    requestTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Supported only for HTTP APIs. You use response parameters to transform
+    -- the HTTP response from a backend integration before returning the
+    -- response to clients. Specify a key-value map from a selection key to
+    -- response parameters. The selection key must be a valid HTTP status code
+    -- within the range of 200-599. Response parameters are a key-value map.
+    -- The key must match pattern \<action>:\<header>.\<location> or
+    -- overwrite.statuscode. The action can be append, overwrite or remove. The
+    -- value can be a static value, or map to response data, stage variables,
+    -- or context variables that are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The template selection expression for the integration.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+    -- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+    -- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+    timeoutInMillis :: Prelude.Maybe Prelude.Natural,
+    -- | The TLS configuration for a private integration. If you specify a TLS
+    -- configuration, private integration traffic uses the HTTPS protocol.
+    -- Supported only for HTTP APIs.
+    tlsConfig :: Prelude.Maybe TlsConfigInput,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionId', 'updateIntegration_connectionId' - The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+--
+-- 'connectionType', 'updateIntegration_connectionType' - The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+--
+-- 'contentHandlingStrategy', 'updateIntegration_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'credentialsArn', 'updateIntegration_credentialsArn' - Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+--
+-- 'description', 'updateIntegration_description' - The description of the integration
+--
+-- 'integrationMethod', 'updateIntegration_integrationMethod' - Specifies the integration\'s HTTP method type.
+--
+-- 'integrationSubtype', 'updateIntegration_integrationSubtype' - Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+--
+-- 'integrationType', 'updateIntegration_integrationType' - The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration. For HTTP API private
+-- integrations, use an HTTP_PROXY integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+--
+-- 'integrationUri', 'updateIntegration_integrationUri' - For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+--
+-- 'passthroughBehavior', 'updateIntegration_passthroughBehavior' - Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+--
+-- 'payloadFormatVersion', 'updateIntegration_payloadFormatVersion' - Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+--
+-- 'requestParameters', 'updateIntegration_requestParameters' - For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API integrations, without a specified integrationSubtype
+-- request parameters are a key-value map specifying how to transform HTTP
+-- requests before sending them to the backend. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location> where action
+-- can be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping. Transforming API requests and responses>.
+--
+-- 'requestTemplates', 'updateIntegration_requestTemplates' - Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+--
+-- 'responseParameters', 'updateIntegration_responseParameters' - Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'templateSelectionExpression', 'updateIntegration_templateSelectionExpression' - The template selection expression for the integration.
+--
+-- 'timeoutInMillis', 'updateIntegration_timeoutInMillis' - Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+--
+-- 'tlsConfig', 'updateIntegration_tlsConfig' - The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+--
+-- 'apiId', 'updateIntegration_apiId' - The API identifier.
+--
+-- 'integrationId', 'updateIntegration_integrationId' - The integration ID.
+newUpdateIntegration ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationId'
+  Prelude.Text ->
+  UpdateIntegration
+newUpdateIntegration pApiId_ pIntegrationId_ =
+  UpdateIntegration'
+    { connectionId = Prelude.Nothing,
+      connectionType = Prelude.Nothing,
+      contentHandlingStrategy = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      integrationMethod = Prelude.Nothing,
+      integrationSubtype = Prelude.Nothing,
+      integrationType = Prelude.Nothing,
+      integrationUri = Prelude.Nothing,
+      passthroughBehavior = Prelude.Nothing,
+      payloadFormatVersion = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      requestTemplates = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      templateSelectionExpression = Prelude.Nothing,
+      timeoutInMillis = Prelude.Nothing,
+      tlsConfig = Prelude.Nothing,
+      apiId = pApiId_,
+      integrationId = pIntegrationId_
+    }
+
+-- | The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+updateIntegration_connectionId :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_connectionId = Lens.lens (\UpdateIntegration' {connectionId} -> connectionId) (\s@UpdateIntegration' {} a -> s {connectionId = a} :: UpdateIntegration)
+
+-- | The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+updateIntegration_connectionType :: Lens.Lens' UpdateIntegration (Prelude.Maybe ConnectionType)
+updateIntegration_connectionType = Lens.lens (\UpdateIntegration' {connectionType} -> connectionType) (\s@UpdateIntegration' {} a -> s {connectionType = a} :: UpdateIntegration)
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+updateIntegration_contentHandlingStrategy :: Lens.Lens' UpdateIntegration (Prelude.Maybe ContentHandlingStrategy)
+updateIntegration_contentHandlingStrategy = Lens.lens (\UpdateIntegration' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@UpdateIntegration' {} a -> s {contentHandlingStrategy = a} :: UpdateIntegration)
+
+-- | Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+updateIntegration_credentialsArn :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_credentialsArn = Lens.lens (\UpdateIntegration' {credentialsArn} -> credentialsArn) (\s@UpdateIntegration' {} a -> s {credentialsArn = a} :: UpdateIntegration)
+
+-- | The description of the integration
+updateIntegration_description :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_description = Lens.lens (\UpdateIntegration' {description} -> description) (\s@UpdateIntegration' {} a -> s {description = a} :: UpdateIntegration)
+
+-- | Specifies the integration\'s HTTP method type.
+updateIntegration_integrationMethod :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_integrationMethod = Lens.lens (\UpdateIntegration' {integrationMethod} -> integrationMethod) (\s@UpdateIntegration' {} a -> s {integrationMethod = a} :: UpdateIntegration)
+
+-- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+updateIntegration_integrationSubtype :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_integrationSubtype = Lens.lens (\UpdateIntegration' {integrationSubtype} -> integrationSubtype) (\s@UpdateIntegration' {} a -> s {integrationSubtype = a} :: UpdateIntegration)
+
+-- | The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration. For HTTP API private
+-- integrations, use an HTTP_PROXY integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+updateIntegration_integrationType :: Lens.Lens' UpdateIntegration (Prelude.Maybe IntegrationType)
+updateIntegration_integrationType = Lens.lens (\UpdateIntegration' {integrationType} -> integrationType) (\s@UpdateIntegration' {} a -> s {integrationType = a} :: UpdateIntegration)
+
+-- | For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+updateIntegration_integrationUri :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_integrationUri = Lens.lens (\UpdateIntegration' {integrationUri} -> integrationUri) (\s@UpdateIntegration' {} a -> s {integrationUri = a} :: UpdateIntegration)
+
+-- | Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+updateIntegration_passthroughBehavior :: Lens.Lens' UpdateIntegration (Prelude.Maybe PassthroughBehavior)
+updateIntegration_passthroughBehavior = Lens.lens (\UpdateIntegration' {passthroughBehavior} -> passthroughBehavior) (\s@UpdateIntegration' {} a -> s {passthroughBehavior = a} :: UpdateIntegration)
+
+-- | Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+updateIntegration_payloadFormatVersion :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_payloadFormatVersion = Lens.lens (\UpdateIntegration' {payloadFormatVersion} -> payloadFormatVersion) (\s@UpdateIntegration' {} a -> s {payloadFormatVersion = a} :: UpdateIntegration)
+
+-- | For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API integrations, without a specified integrationSubtype
+-- request parameters are a key-value map specifying how to transform HTTP
+-- requests before sending them to the backend. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location> where action
+-- can be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping. Transforming API requests and responses>.
+updateIntegration_requestParameters :: Lens.Lens' UpdateIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegration_requestParameters = Lens.lens (\UpdateIntegration' {requestParameters} -> requestParameters) (\s@UpdateIntegration' {} a -> s {requestParameters = a} :: UpdateIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+updateIntegration_requestTemplates :: Lens.Lens' UpdateIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegration_requestTemplates = Lens.lens (\UpdateIntegration' {requestTemplates} -> requestTemplates) (\s@UpdateIntegration' {} a -> s {requestTemplates = a} :: UpdateIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+updateIntegration_responseParameters :: Lens.Lens' UpdateIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+updateIntegration_responseParameters = Lens.lens (\UpdateIntegration' {responseParameters} -> responseParameters) (\s@UpdateIntegration' {} a -> s {responseParameters = a} :: UpdateIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration.
+updateIntegration_templateSelectionExpression :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Text)
+updateIntegration_templateSelectionExpression = Lens.lens (\UpdateIntegration' {templateSelectionExpression} -> templateSelectionExpression) (\s@UpdateIntegration' {} a -> s {templateSelectionExpression = a} :: UpdateIntegration)
+
+-- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+updateIntegration_timeoutInMillis :: Lens.Lens' UpdateIntegration (Prelude.Maybe Prelude.Natural)
+updateIntegration_timeoutInMillis = Lens.lens (\UpdateIntegration' {timeoutInMillis} -> timeoutInMillis) (\s@UpdateIntegration' {} a -> s {timeoutInMillis = a} :: UpdateIntegration)
+
+-- | The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+updateIntegration_tlsConfig :: Lens.Lens' UpdateIntegration (Prelude.Maybe TlsConfigInput)
+updateIntegration_tlsConfig = Lens.lens (\UpdateIntegration' {tlsConfig} -> tlsConfig) (\s@UpdateIntegration' {} a -> s {tlsConfig = a} :: UpdateIntegration)
+
+-- | The API identifier.
+updateIntegration_apiId :: Lens.Lens' UpdateIntegration Prelude.Text
+updateIntegration_apiId = Lens.lens (\UpdateIntegration' {apiId} -> apiId) (\s@UpdateIntegration' {} a -> s {apiId = a} :: UpdateIntegration)
+
+-- | The integration ID.
+updateIntegration_integrationId :: Lens.Lens' UpdateIntegration Prelude.Text
+updateIntegration_integrationId = Lens.lens (\UpdateIntegration' {integrationId} -> integrationId) (\s@UpdateIntegration' {} a -> s {integrationId = a} :: UpdateIntegration)
+
+instance Core.AWSRequest UpdateIntegration where
+  type
+    AWSResponse UpdateIntegration =
+      UpdateIntegrationResponse'
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateIntegrationResponse''
+            Prelude.<$> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "connectionId")
+            Prelude.<*> (x Data..?> "connectionType")
+            Prelude.<*> (x Data..?> "contentHandlingStrategy")
+            Prelude.<*> (x Data..?> "credentialsArn")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "integrationId")
+            Prelude.<*> (x Data..?> "integrationMethod")
+            Prelude.<*> (x Data..?> "integrationResponseSelectionExpression")
+            Prelude.<*> (x Data..?> "integrationSubtype")
+            Prelude.<*> (x Data..?> "integrationType")
+            Prelude.<*> (x Data..?> "integrationUri")
+            Prelude.<*> (x Data..?> "passthroughBehavior")
+            Prelude.<*> (x Data..?> "payloadFormatVersion")
+            Prelude.<*> ( x
+                            Data..?> "requestParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "requestTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "templateSelectionExpression")
+            Prelude.<*> (x Data..?> "timeoutInMillis")
+            Prelude.<*> (x Data..?> "tlsConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateIntegration where
+  hashWithSalt _salt UpdateIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionId
+      `Prelude.hashWithSalt` connectionType
+      `Prelude.hashWithSalt` contentHandlingStrategy
+      `Prelude.hashWithSalt` credentialsArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` integrationMethod
+      `Prelude.hashWithSalt` integrationSubtype
+      `Prelude.hashWithSalt` integrationType
+      `Prelude.hashWithSalt` integrationUri
+      `Prelude.hashWithSalt` passthroughBehavior
+      `Prelude.hashWithSalt` payloadFormatVersion
+      `Prelude.hashWithSalt` requestParameters
+      `Prelude.hashWithSalt` requestTemplates
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` templateSelectionExpression
+      `Prelude.hashWithSalt` timeoutInMillis
+      `Prelude.hashWithSalt` tlsConfig
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationId
+
+instance Prelude.NFData UpdateIntegration where
+  rnf UpdateIntegration' {..} =
+    Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf integrationMethod
+      `Prelude.seq` Prelude.rnf integrationSubtype
+      `Prelude.seq` Prelude.rnf integrationType
+      `Prelude.seq` Prelude.rnf integrationUri
+      `Prelude.seq` Prelude.rnf passthroughBehavior
+      `Prelude.seq` Prelude.rnf payloadFormatVersion
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf requestTemplates
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf timeoutInMillis
+      `Prelude.seq` Prelude.rnf tlsConfig
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationId
+
+instance Data.ToHeaders UpdateIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateIntegration where
+  toJSON UpdateIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("connectionId" Data..=) Prelude.<$> connectionId,
+            ("connectionType" Data..=)
+              Prelude.<$> connectionType,
+            ("contentHandlingStrategy" Data..=)
+              Prelude.<$> contentHandlingStrategy,
+            ("credentialsArn" Data..=)
+              Prelude.<$> credentialsArn,
+            ("description" Data..=) Prelude.<$> description,
+            ("integrationMethod" Data..=)
+              Prelude.<$> integrationMethod,
+            ("integrationSubtype" Data..=)
+              Prelude.<$> integrationSubtype,
+            ("integrationType" Data..=)
+              Prelude.<$> integrationType,
+            ("integrationUri" Data..=)
+              Prelude.<$> integrationUri,
+            ("passthroughBehavior" Data..=)
+              Prelude.<$> passthroughBehavior,
+            ("payloadFormatVersion" Data..=)
+              Prelude.<$> payloadFormatVersion,
+            ("requestParameters" Data..=)
+              Prelude.<$> requestParameters,
+            ("requestTemplates" Data..=)
+              Prelude.<$> requestTemplates,
+            ("responseParameters" Data..=)
+              Prelude.<$> responseParameters,
+            ("templateSelectionExpression" Data..=)
+              Prelude.<$> templateSelectionExpression,
+            ("timeoutInMillis" Data..=)
+              Prelude.<$> timeoutInMillis,
+            ("tlsConfig" Data..=) Prelude.<$> tlsConfig
+          ]
+      )
+
+instance Data.ToPath UpdateIntegration where
+  toPath UpdateIntegration' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId
+      ]
+
+instance Data.ToQuery UpdateIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateIntegrationResponse'' smart constructor.
+data UpdateIntegrationResponse' = UpdateIntegrationResponse''
+  { -- | Specifies whether an integration is managed by API Gateway. If you
+    -- created an API using using quick create, the resulting integration is
+    -- managed by API Gateway. You can update a managed integration, but you
+    -- can\'t delete it.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC link for a private integration. Supported only for
+    -- HTTP APIs.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the network connection to the integration endpoint. Specify
+    -- INTERNET for connections through the public routable internet or
+    -- VPC_LINK for private connections between API Gateway and resources in a
+    -- VPC. The default value is INTERNET.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | Specifies the credentials required for the integration, if any. For AWS
+    -- integrations, three options are available. To specify an IAM Role for
+    -- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+    -- require that the caller\'s identity be passed through from the request,
+    -- specify the string arn:aws:iam::*:user\/*. To use resource-based
+    -- permissions on supported AWS services, specify null.
+    credentialsArn :: Prelude.Maybe Prelude.Text,
+    -- | Represents the description of an integration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Represents the identifier of an integration.
+    integrationId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the integration\'s HTTP method type.
+    integrationMethod :: Prelude.Maybe Prelude.Text,
+    -- | The integration response selection expression for the integration.
+    -- Supported only for WebSocket APIs. See
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+    integrationResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+    -- service action to invoke. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+    integrationSubtype :: Prelude.Maybe Prelude.Text,
+    -- | The integration type of an integration. One of the following:
+    --
+    -- AWS: for integrating the route or method request with an AWS service
+    -- action, including the Lambda function-invoking action. With the Lambda
+    -- function-invoking action, this is referred to as the Lambda custom
+    -- integration. With any other AWS service action, this is known as AWS
+    -- integration. Supported only for WebSocket APIs.
+    --
+    -- AWS_PROXY: for integrating the route or method request with a Lambda
+    -- function or other AWS service action. This integration is also referred
+    -- to as a Lambda proxy integration.
+    --
+    -- HTTP: for integrating the route or method request with an HTTP endpoint.
+    -- This integration is also referred to as the HTTP custom integration.
+    -- Supported only for WebSocket APIs.
+    --
+    -- HTTP_PROXY: for integrating the route or method request with an HTTP
+    -- endpoint, with the client request passed through as-is. This is also
+    -- referred to as HTTP proxy integration.
+    --
+    -- MOCK: for integrating the route or method request with API Gateway as a
+    -- \"loopback\" endpoint without invoking any backend. Supported only for
+    -- WebSocket APIs.
+    integrationType :: Prelude.Maybe IntegrationType,
+    -- | For a Lambda integration, specify the URI of a Lambda function.
+    --
+    -- For an HTTP integration, specify a fully-qualified URL.
+    --
+    -- For an HTTP API private integration, specify the ARN of an Application
+    -- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+    -- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+    -- uses DiscoverInstances to identify resources. You can use query
+    -- parameters to target specific resources. To learn more, see
+    -- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+    -- For private integrations, all resources must be owned by the same AWS
+    -- account.
+    integrationUri :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the pass-through behavior for incoming requests based on the
+    -- Content-Type header in the request, and the available mapping templates
+    -- specified as the requestTemplates property on the Integration resource.
+    -- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+    -- NEVER. Supported only for WebSocket APIs.
+    --
+    -- WHEN_NO_MATCH passes the request body for unmapped content types through
+    -- to the integration backend without transformation.
+    --
+    -- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+    -- Type response.
+    --
+    -- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+    -- content types mapped to templates. However, if there is at least one
+    -- content type defined, unmapped content types will be rejected with the
+    -- same HTTP 415 Unsupported Media Type response.
+    passthroughBehavior :: Prelude.Maybe PassthroughBehavior,
+    -- | Specifies the format of the payload sent to an integration. Required for
+    -- HTTP APIs.
+    payloadFormatVersion :: Prelude.Maybe Prelude.Text,
+    -- | For WebSocket APIs, a key-value map specifying request parameters that
+    -- are passed from the method request to the backend. The key is an
+    -- integration request parameter name and the associated value is a method
+    -- request parameter value or static value that must be enclosed within
+    -- single quotes and pre-encoded as required by the backend. The method
+    -- request parameter value must match the pattern of
+    -- method.request.{location}.{name} , where {location} is querystring,
+    -- path, or header; and {name} must be a valid and unique method request
+    -- parameter name.
+    --
+    -- For HTTP API integrations with a specified integrationSubtype, request
+    -- parameters are a key-value map specifying parameters that are passed to
+    -- AWS_PROXY integrations. You can provide static values, or map request
+    -- data, stage variables, or context variables that are evaluated at
+    -- runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+    --
+    -- For HTTP API itegrations, without a specified integrationSubtype request
+    -- parameters are a key-value map specifying how to transform HTTP requests
+    -- before sending them to backend integrations. The key should follow the
+    -- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+    -- be append, overwrite or remove. For values, you can provide static
+    -- values, or map request data, stage variables, or context variables that
+    -- are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents a map of Velocity templates that are applied on the request
+    -- payload based on the value of the Content-Type header sent by the
+    -- client. The content type value is the key in this map, and the template
+    -- (as a String) is the value. Supported only for WebSocket APIs.
+    requestTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Supported only for HTTP APIs. You use response parameters to transform
+    -- the HTTP response from a backend integration before returning the
+    -- response to clients. Specify a key-value map from a selection key to
+    -- response parameters. The selection key must be a valid HTTP status code
+    -- within the range of 200-599. Response parameters are a key-value map.
+    -- The key must match pattern \<action>:\<header>.\<location> or
+    -- overwrite.statuscode. The action can be append, overwrite or remove. The
+    -- value can be a static value, or map to response data, stage variables,
+    -- or context variables that are evaluated at runtime. To learn more, see
+    -- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The template selection expression for the integration. Supported only
+    -- for WebSocket APIs.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+    -- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+    -- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+    timeoutInMillis :: Prelude.Maybe Prelude.Natural,
+    -- | The TLS configuration for a private integration. If you specify a TLS
+    -- configuration, private integration traffic uses the HTTPS protocol.
+    -- Supported only for HTTP APIs.
+    tlsConfig :: Prelude.Maybe TlsConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateIntegrationResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'updateIntegrationResponse'_apiGatewayManaged' - Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+--
+-- 'connectionId', 'updateIntegrationResponse'_connectionId' - The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+--
+-- 'connectionType', 'updateIntegrationResponse'_connectionType' - The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+--
+-- 'contentHandlingStrategy', 'updateIntegrationResponse'_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'credentialsArn', 'updateIntegrationResponse'_credentialsArn' - Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+--
+-- 'description', 'updateIntegrationResponse'_description' - Represents the description of an integration.
+--
+-- 'integrationId', 'updateIntegrationResponse'_integrationId' - Represents the identifier of an integration.
+--
+-- 'integrationMethod', 'updateIntegrationResponse'_integrationMethod' - Specifies the integration\'s HTTP method type.
+--
+-- 'integrationResponseSelectionExpression', 'updateIntegrationResponse'_integrationResponseSelectionExpression' - The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+--
+-- 'integrationSubtype', 'updateIntegrationResponse'_integrationSubtype' - Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+--
+-- 'integrationType', 'updateIntegrationResponse'_integrationType' - The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+--
+-- 'integrationUri', 'updateIntegrationResponse'_integrationUri' - For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+--
+-- 'passthroughBehavior', 'updateIntegrationResponse'_passthroughBehavior' - Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+--
+-- 'payloadFormatVersion', 'updateIntegrationResponse'_payloadFormatVersion' - Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+--
+-- 'requestParameters', 'updateIntegrationResponse'_requestParameters' - For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'requestTemplates', 'updateIntegrationResponse'_requestTemplates' - Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+--
+-- 'responseParameters', 'updateIntegrationResponse'_responseParameters' - Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+--
+-- 'templateSelectionExpression', 'updateIntegrationResponse'_templateSelectionExpression' - The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+--
+-- 'timeoutInMillis', 'updateIntegrationResponse'_timeoutInMillis' - Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+--
+-- 'tlsConfig', 'updateIntegrationResponse'_tlsConfig' - The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+--
+-- 'httpStatus', 'updateIntegrationResponse'_httpStatus' - The response's http status code.
+newUpdateIntegrationResponse' ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateIntegrationResponse'
+newUpdateIntegrationResponse' pHttpStatus_ =
+  UpdateIntegrationResponse''
+    { apiGatewayManaged =
+        Prelude.Nothing,
+      connectionId = Prelude.Nothing,
+      connectionType = Prelude.Nothing,
+      contentHandlingStrategy = Prelude.Nothing,
+      credentialsArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      integrationId = Prelude.Nothing,
+      integrationMethod = Prelude.Nothing,
+      integrationResponseSelectionExpression =
+        Prelude.Nothing,
+      integrationSubtype = Prelude.Nothing,
+      integrationType = Prelude.Nothing,
+      integrationUri = Prelude.Nothing,
+      passthroughBehavior = Prelude.Nothing,
+      payloadFormatVersion = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      requestTemplates = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      templateSelectionExpression = Prelude.Nothing,
+      timeoutInMillis = Prelude.Nothing,
+      tlsConfig = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether an integration is managed by API Gateway. If you
+-- created an API using using quick create, the resulting integration is
+-- managed by API Gateway. You can update a managed integration, but you
+-- can\'t delete it.
+updateIntegrationResponse'_apiGatewayManaged :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Bool)
+updateIntegrationResponse'_apiGatewayManaged = Lens.lens (\UpdateIntegrationResponse'' {apiGatewayManaged} -> apiGatewayManaged) (\s@UpdateIntegrationResponse'' {} a -> s {apiGatewayManaged = a} :: UpdateIntegrationResponse')
+
+-- | The ID of the VPC link for a private integration. Supported only for
+-- HTTP APIs.
+updateIntegrationResponse'_connectionId :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_connectionId = Lens.lens (\UpdateIntegrationResponse'' {connectionId} -> connectionId) (\s@UpdateIntegrationResponse'' {} a -> s {connectionId = a} :: UpdateIntegrationResponse')
+
+-- | The type of the network connection to the integration endpoint. Specify
+-- INTERNET for connections through the public routable internet or
+-- VPC_LINK for private connections between API Gateway and resources in a
+-- VPC. The default value is INTERNET.
+updateIntegrationResponse'_connectionType :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe ConnectionType)
+updateIntegrationResponse'_connectionType = Lens.lens (\UpdateIntegrationResponse'' {connectionType} -> connectionType) (\s@UpdateIntegrationResponse'' {} a -> s {connectionType = a} :: UpdateIntegrationResponse')
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+updateIntegrationResponse'_contentHandlingStrategy :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe ContentHandlingStrategy)
+updateIntegrationResponse'_contentHandlingStrategy = Lens.lens (\UpdateIntegrationResponse'' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@UpdateIntegrationResponse'' {} a -> s {contentHandlingStrategy = a} :: UpdateIntegrationResponse')
+
+-- | Specifies the credentials required for the integration, if any. For AWS
+-- integrations, three options are available. To specify an IAM Role for
+-- API Gateway to assume, use the role\'s Amazon Resource Name (ARN). To
+-- require that the caller\'s identity be passed through from the request,
+-- specify the string arn:aws:iam::*:user\/*. To use resource-based
+-- permissions on supported AWS services, specify null.
+updateIntegrationResponse'_credentialsArn :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_credentialsArn = Lens.lens (\UpdateIntegrationResponse'' {credentialsArn} -> credentialsArn) (\s@UpdateIntegrationResponse'' {} a -> s {credentialsArn = a} :: UpdateIntegrationResponse')
+
+-- | Represents the description of an integration.
+updateIntegrationResponse'_description :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_description = Lens.lens (\UpdateIntegrationResponse'' {description} -> description) (\s@UpdateIntegrationResponse'' {} a -> s {description = a} :: UpdateIntegrationResponse')
+
+-- | Represents the identifier of an integration.
+updateIntegrationResponse'_integrationId :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_integrationId = Lens.lens (\UpdateIntegrationResponse'' {integrationId} -> integrationId) (\s@UpdateIntegrationResponse'' {} a -> s {integrationId = a} :: UpdateIntegrationResponse')
+
+-- | Specifies the integration\'s HTTP method type.
+updateIntegrationResponse'_integrationMethod :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_integrationMethod = Lens.lens (\UpdateIntegrationResponse'' {integrationMethod} -> integrationMethod) (\s@UpdateIntegrationResponse'' {} a -> s {integrationMethod = a} :: UpdateIntegrationResponse')
+
+-- | The integration response selection expression for the integration.
+-- Supported only for WebSocket APIs. See
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions Integration Response Selection Expressions>.
+updateIntegrationResponse'_integrationResponseSelectionExpression :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_integrationResponseSelectionExpression = Lens.lens (\UpdateIntegrationResponse'' {integrationResponseSelectionExpression} -> integrationResponseSelectionExpression) (\s@UpdateIntegrationResponse'' {} a -> s {integrationResponseSelectionExpression = a} :: UpdateIntegrationResponse')
+
+-- | Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS
+-- service action to invoke. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html Integration subtype reference>.
+updateIntegrationResponse'_integrationSubtype :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_integrationSubtype = Lens.lens (\UpdateIntegrationResponse'' {integrationSubtype} -> integrationSubtype) (\s@UpdateIntegrationResponse'' {} a -> s {integrationSubtype = a} :: UpdateIntegrationResponse')
+
+-- | The integration type of an integration. One of the following:
+--
+-- AWS: for integrating the route or method request with an AWS service
+-- action, including the Lambda function-invoking action. With the Lambda
+-- function-invoking action, this is referred to as the Lambda custom
+-- integration. With any other AWS service action, this is known as AWS
+-- integration. Supported only for WebSocket APIs.
+--
+-- AWS_PROXY: for integrating the route or method request with a Lambda
+-- function or other AWS service action. This integration is also referred
+-- to as a Lambda proxy integration.
+--
+-- HTTP: for integrating the route or method request with an HTTP endpoint.
+-- This integration is also referred to as the HTTP custom integration.
+-- Supported only for WebSocket APIs.
+--
+-- HTTP_PROXY: for integrating the route or method request with an HTTP
+-- endpoint, with the client request passed through as-is. This is also
+-- referred to as HTTP proxy integration.
+--
+-- MOCK: for integrating the route or method request with API Gateway as a
+-- \"loopback\" endpoint without invoking any backend. Supported only for
+-- WebSocket APIs.
+updateIntegrationResponse'_integrationType :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe IntegrationType)
+updateIntegrationResponse'_integrationType = Lens.lens (\UpdateIntegrationResponse'' {integrationType} -> integrationType) (\s@UpdateIntegrationResponse'' {} a -> s {integrationType = a} :: UpdateIntegrationResponse')
+
+-- | For a Lambda integration, specify the URI of a Lambda function.
+--
+-- For an HTTP integration, specify a fully-qualified URL.
+--
+-- For an HTTP API private integration, specify the ARN of an Application
+-- Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map
+-- service. If you specify the ARN of an AWS Cloud Map service, API Gateway
+-- uses DiscoverInstances to identify resources. You can use query
+-- parameters to target specific resources. To learn more, see
+-- <https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html DiscoverInstances>.
+-- For private integrations, all resources must be owned by the same AWS
+-- account.
+updateIntegrationResponse'_integrationUri :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_integrationUri = Lens.lens (\UpdateIntegrationResponse'' {integrationUri} -> integrationUri) (\s@UpdateIntegrationResponse'' {} a -> s {integrationUri = a} :: UpdateIntegrationResponse')
+
+-- | Specifies the pass-through behavior for incoming requests based on the
+-- Content-Type header in the request, and the available mapping templates
+-- specified as the requestTemplates property on the Integration resource.
+-- There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and
+-- NEVER. Supported only for WebSocket APIs.
+--
+-- WHEN_NO_MATCH passes the request body for unmapped content types through
+-- to the integration backend without transformation.
+--
+-- NEVER rejects unmapped content types with an HTTP 415 Unsupported Media
+-- Type response.
+--
+-- WHEN_NO_TEMPLATES allows pass-through when the integration has no
+-- content types mapped to templates. However, if there is at least one
+-- content type defined, unmapped content types will be rejected with the
+-- same HTTP 415 Unsupported Media Type response.
+updateIntegrationResponse'_passthroughBehavior :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe PassthroughBehavior)
+updateIntegrationResponse'_passthroughBehavior = Lens.lens (\UpdateIntegrationResponse'' {passthroughBehavior} -> passthroughBehavior) (\s@UpdateIntegrationResponse'' {} a -> s {passthroughBehavior = a} :: UpdateIntegrationResponse')
+
+-- | Specifies the format of the payload sent to an integration. Required for
+-- HTTP APIs.
+updateIntegrationResponse'_payloadFormatVersion :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_payloadFormatVersion = Lens.lens (\UpdateIntegrationResponse'' {payloadFormatVersion} -> payloadFormatVersion) (\s@UpdateIntegrationResponse'' {} a -> s {payloadFormatVersion = a} :: UpdateIntegrationResponse')
+
+-- | For WebSocket APIs, a key-value map specifying request parameters that
+-- are passed from the method request to the backend. The key is an
+-- integration request parameter name and the associated value is a method
+-- request parameter value or static value that must be enclosed within
+-- single quotes and pre-encoded as required by the backend. The method
+-- request parameter value must match the pattern of
+-- method.request.{location}.{name} , where {location} is querystring,
+-- path, or header; and {name} must be a valid and unique method request
+-- parameter name.
+--
+-- For HTTP API integrations with a specified integrationSubtype, request
+-- parameters are a key-value map specifying parameters that are passed to
+-- AWS_PROXY integrations. You can provide static values, or map request
+-- data, stage variables, or context variables that are evaluated at
+-- runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html Working with AWS service integrations for HTTP APIs>.
+--
+-- For HTTP API itegrations, without a specified integrationSubtype request
+-- parameters are a key-value map specifying how to transform HTTP requests
+-- before sending them to backend integrations. The key should follow the
+-- pattern \<action>:\<header|querystring|path>.\<location>. The action can
+-- be append, overwrite or remove. For values, you can provide static
+-- values, or map request data, stage variables, or context variables that
+-- are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+updateIntegrationResponse'_requestParameters :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegrationResponse'_requestParameters = Lens.lens (\UpdateIntegrationResponse'' {requestParameters} -> requestParameters) (\s@UpdateIntegrationResponse'' {} a -> s {requestParameters = a} :: UpdateIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents a map of Velocity templates that are applied on the request
+-- payload based on the value of the Content-Type header sent by the
+-- client. The content type value is the key in this map, and the template
+-- (as a String) is the value. Supported only for WebSocket APIs.
+updateIntegrationResponse'_requestTemplates :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegrationResponse'_requestTemplates = Lens.lens (\UpdateIntegrationResponse'' {requestTemplates} -> requestTemplates) (\s@UpdateIntegrationResponse'' {} a -> s {requestTemplates = a} :: UpdateIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | Supported only for HTTP APIs. You use response parameters to transform
+-- the HTTP response from a backend integration before returning the
+-- response to clients. Specify a key-value map from a selection key to
+-- response parameters. The selection key must be a valid HTTP status code
+-- within the range of 200-599. Response parameters are a key-value map.
+-- The key must match pattern \<action>:\<header>.\<location> or
+-- overwrite.statuscode. The action can be append, overwrite or remove. The
+-- value can be a static value, or map to response data, stage variables,
+-- or context variables that are evaluated at runtime. To learn more, see
+-- <https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html Transforming API requests and responses>.
+updateIntegrationResponse'_responseParameters :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+updateIntegrationResponse'_responseParameters = Lens.lens (\UpdateIntegrationResponse'' {responseParameters} -> responseParameters) (\s@UpdateIntegrationResponse'' {} a -> s {responseParameters = a} :: UpdateIntegrationResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration. Supported only
+-- for WebSocket APIs.
+updateIntegrationResponse'_templateSelectionExpression :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse'_templateSelectionExpression = Lens.lens (\UpdateIntegrationResponse'' {templateSelectionExpression} -> templateSelectionExpression) (\s@UpdateIntegrationResponse'' {} a -> s {templateSelectionExpression = a} :: UpdateIntegrationResponse')
+
+-- | Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and
+-- between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is
+-- 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
+updateIntegrationResponse'_timeoutInMillis :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe Prelude.Natural)
+updateIntegrationResponse'_timeoutInMillis = Lens.lens (\UpdateIntegrationResponse'' {timeoutInMillis} -> timeoutInMillis) (\s@UpdateIntegrationResponse'' {} a -> s {timeoutInMillis = a} :: UpdateIntegrationResponse')
+
+-- | The TLS configuration for a private integration. If you specify a TLS
+-- configuration, private integration traffic uses the HTTPS protocol.
+-- Supported only for HTTP APIs.
+updateIntegrationResponse'_tlsConfig :: Lens.Lens' UpdateIntegrationResponse' (Prelude.Maybe TlsConfig)
+updateIntegrationResponse'_tlsConfig = Lens.lens (\UpdateIntegrationResponse'' {tlsConfig} -> tlsConfig) (\s@UpdateIntegrationResponse'' {} a -> s {tlsConfig = a} :: UpdateIntegrationResponse')
+
+-- | The response's http status code.
+updateIntegrationResponse'_httpStatus :: Lens.Lens' UpdateIntegrationResponse' Prelude.Int
+updateIntegrationResponse'_httpStatus = Lens.lens (\UpdateIntegrationResponse'' {httpStatus} -> httpStatus) (\s@UpdateIntegrationResponse'' {} a -> s {httpStatus = a} :: UpdateIntegrationResponse')
+
+instance Prelude.NFData UpdateIntegrationResponse' where
+  rnf UpdateIntegrationResponse'' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf credentialsArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf integrationId
+      `Prelude.seq` Prelude.rnf integrationMethod
+      `Prelude.seq` Prelude.rnf integrationResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf integrationSubtype
+      `Prelude.seq` Prelude.rnf integrationType
+      `Prelude.seq` Prelude.rnf integrationUri
+      `Prelude.seq` Prelude.rnf passthroughBehavior
+      `Prelude.seq` Prelude.rnf payloadFormatVersion
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf requestTemplates
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf
+        templateSelectionExpression
+      `Prelude.seq` Prelude.rnf timeoutInMillis
+      `Prelude.seq` Prelude.rnf tlsConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateIntegrationResponse.hs b/gen/Amazonka/ApiGatewayV2/UpdateIntegrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateIntegrationResponse.hs
@@ -0,0 +1,503 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.UpdateIntegrationResponse
+-- 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 IntegrationResponses.
+module Amazonka.ApiGatewayV2.UpdateIntegrationResponse
+  ( -- * Creating a Request
+    UpdateIntegrationResponse (..),
+    newUpdateIntegrationResponse,
+
+    -- * Request Lenses
+    updateIntegrationResponse_contentHandlingStrategy,
+    updateIntegrationResponse_integrationResponseKey,
+    updateIntegrationResponse_responseParameters,
+    updateIntegrationResponse_responseTemplates,
+    updateIntegrationResponse_templateSelectionExpression,
+    updateIntegrationResponse_apiId,
+    updateIntegrationResponse_integrationResponseId,
+    updateIntegrationResponse_integrationId,
+
+    -- * Destructuring the Response
+    UpdateIntegrationResponseResponse (..),
+    newUpdateIntegrationResponseResponse,
+
+    -- * Response Lenses
+    updateIntegrationResponseResponse_contentHandlingStrategy,
+    updateIntegrationResponseResponse_integrationResponseId,
+    updateIntegrationResponseResponse_integrationResponseKey,
+    updateIntegrationResponseResponse_responseParameters,
+    updateIntegrationResponseResponse_responseTemplates,
+    updateIntegrationResponseResponse_templateSelectionExpression,
+    updateIntegrationResponseResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates an IntegrationResponses.
+--
+-- /See:/ 'newUpdateIntegrationResponse' smart constructor.
+data UpdateIntegrationResponse = UpdateIntegrationResponse'
+  { -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | The integration response key.
+    integrationResponseKey :: Prelude.Maybe Prelude.Text,
+    -- | A key-value map specifying response parameters that are passed to the
+    -- method response from the backend. The key is a method response header
+    -- parameter name and the mapped value is an integration response header
+    -- value, a static value enclosed within a pair of single quotes, or a JSON
+    -- expression from the integration response body. The mapping key must
+    -- match the pattern of method.response.header.{name} , where name is a
+    -- valid and unique header name. The mapped non-static value must match the
+    -- pattern of integration.response.header.{name} or
+    -- integration.response.body.{JSON-expression} , where {name} is a valid
+    -- and unique response header name and {JSON-expression} is a valid JSON
+    -- expression without the $ prefix.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of response templates for the integration response as a
+    -- string-to-string map of key-value pairs. Response templates are
+    -- represented as a key\/value map, with a content-type as the key and a
+    -- template as the value.
+    responseTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The template selection expression for the integration response.
+    -- Supported only for WebSocket APIs.
+    templateSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The integration response ID.
+    integrationResponseId :: Prelude.Text,
+    -- | The integration ID.
+    integrationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentHandlingStrategy', 'updateIntegrationResponse_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'integrationResponseKey', 'updateIntegrationResponse_integrationResponseKey' - The integration response key.
+--
+-- 'responseParameters', 'updateIntegrationResponse_responseParameters' - A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name} , where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression} , where {name} is a valid
+-- and unique response header name and {JSON-expression} is a valid JSON
+-- expression without the $ prefix.
+--
+-- 'responseTemplates', 'updateIntegrationResponse_responseTemplates' - The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+--
+-- 'templateSelectionExpression', 'updateIntegrationResponse_templateSelectionExpression' - The template selection expression for the integration response.
+-- Supported only for WebSocket APIs.
+--
+-- 'apiId', 'updateIntegrationResponse_apiId' - The API identifier.
+--
+-- 'integrationResponseId', 'updateIntegrationResponse_integrationResponseId' - The integration response ID.
+--
+-- 'integrationId', 'updateIntegrationResponse_integrationId' - The integration ID.
+newUpdateIntegrationResponse ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'integrationResponseId'
+  Prelude.Text ->
+  -- | 'integrationId'
+  Prelude.Text ->
+  UpdateIntegrationResponse
+newUpdateIntegrationResponse
+  pApiId_
+  pIntegrationResponseId_
+  pIntegrationId_ =
+    UpdateIntegrationResponse'
+      { contentHandlingStrategy =
+          Prelude.Nothing,
+        integrationResponseKey = Prelude.Nothing,
+        responseParameters = Prelude.Nothing,
+        responseTemplates = Prelude.Nothing,
+        templateSelectionExpression = Prelude.Nothing,
+        apiId = pApiId_,
+        integrationResponseId = pIntegrationResponseId_,
+        integrationId = pIntegrationId_
+      }
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+updateIntegrationResponse_contentHandlingStrategy :: Lens.Lens' UpdateIntegrationResponse (Prelude.Maybe ContentHandlingStrategy)
+updateIntegrationResponse_contentHandlingStrategy = Lens.lens (\UpdateIntegrationResponse' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@UpdateIntegrationResponse' {} a -> s {contentHandlingStrategy = a} :: UpdateIntegrationResponse)
+
+-- | The integration response key.
+updateIntegrationResponse_integrationResponseKey :: Lens.Lens' UpdateIntegrationResponse (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse_integrationResponseKey = Lens.lens (\UpdateIntegrationResponse' {integrationResponseKey} -> integrationResponseKey) (\s@UpdateIntegrationResponse' {} a -> s {integrationResponseKey = a} :: UpdateIntegrationResponse)
+
+-- | A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name} , where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression} , where {name} is a valid
+-- and unique response header name and {JSON-expression} is a valid JSON
+-- expression without the $ prefix.
+updateIntegrationResponse_responseParameters :: Lens.Lens' UpdateIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegrationResponse_responseParameters = Lens.lens (\UpdateIntegrationResponse' {responseParameters} -> responseParameters) (\s@UpdateIntegrationResponse' {} a -> s {responseParameters = a} :: UpdateIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+updateIntegrationResponse_responseTemplates :: Lens.Lens' UpdateIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegrationResponse_responseTemplates = Lens.lens (\UpdateIntegrationResponse' {responseTemplates} -> responseTemplates) (\s@UpdateIntegrationResponse' {} a -> s {responseTemplates = a} :: UpdateIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expression for the integration response.
+-- Supported only for WebSocket APIs.
+updateIntegrationResponse_templateSelectionExpression :: Lens.Lens' UpdateIntegrationResponse (Prelude.Maybe Prelude.Text)
+updateIntegrationResponse_templateSelectionExpression = Lens.lens (\UpdateIntegrationResponse' {templateSelectionExpression} -> templateSelectionExpression) (\s@UpdateIntegrationResponse' {} a -> s {templateSelectionExpression = a} :: UpdateIntegrationResponse)
+
+-- | The API identifier.
+updateIntegrationResponse_apiId :: Lens.Lens' UpdateIntegrationResponse Prelude.Text
+updateIntegrationResponse_apiId = Lens.lens (\UpdateIntegrationResponse' {apiId} -> apiId) (\s@UpdateIntegrationResponse' {} a -> s {apiId = a} :: UpdateIntegrationResponse)
+
+-- | The integration response ID.
+updateIntegrationResponse_integrationResponseId :: Lens.Lens' UpdateIntegrationResponse Prelude.Text
+updateIntegrationResponse_integrationResponseId = Lens.lens (\UpdateIntegrationResponse' {integrationResponseId} -> integrationResponseId) (\s@UpdateIntegrationResponse' {} a -> s {integrationResponseId = a} :: UpdateIntegrationResponse)
+
+-- | The integration ID.
+updateIntegrationResponse_integrationId :: Lens.Lens' UpdateIntegrationResponse Prelude.Text
+updateIntegrationResponse_integrationId = Lens.lens (\UpdateIntegrationResponse' {integrationId} -> integrationId) (\s@UpdateIntegrationResponse' {} a -> s {integrationId = a} :: UpdateIntegrationResponse)
+
+instance Core.AWSRequest UpdateIntegrationResponse where
+  type
+    AWSResponse UpdateIntegrationResponse =
+      UpdateIntegrationResponseResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateIntegrationResponseResponse'
+            Prelude.<$> (x Data..?> "contentHandlingStrategy")
+            Prelude.<*> (x Data..?> "integrationResponseId")
+            Prelude.<*> (x Data..?> "integrationResponseKey")
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "responseTemplates"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "templateSelectionExpression")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateIntegrationResponse where
+  hashWithSalt _salt UpdateIntegrationResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentHandlingStrategy
+      `Prelude.hashWithSalt` integrationResponseKey
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` responseTemplates
+      `Prelude.hashWithSalt` templateSelectionExpression
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` integrationResponseId
+      `Prelude.hashWithSalt` integrationId
+
+instance Prelude.NFData UpdateIntegrationResponse where
+  rnf UpdateIntegrationResponse' {..} =
+    Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf integrationResponseKey
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf responseTemplates
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf integrationResponseId
+      `Prelude.seq` Prelude.rnf integrationId
+
+instance Data.ToHeaders UpdateIntegrationResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateIntegrationResponse where
+  toJSON UpdateIntegrationResponse' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("contentHandlingStrategy" Data..=)
+              Prelude.<$> contentHandlingStrategy,
+            ("integrationResponseKey" Data..=)
+              Prelude.<$> integrationResponseKey,
+            ("responseParameters" Data..=)
+              Prelude.<$> responseParameters,
+            ("responseTemplates" Data..=)
+              Prelude.<$> responseTemplates,
+            ("templateSelectionExpression" Data..=)
+              Prelude.<$> templateSelectionExpression
+          ]
+      )
+
+instance Data.ToPath UpdateIntegrationResponse where
+  toPath UpdateIntegrationResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/integrations/",
+        Data.toBS integrationId,
+        "/integrationresponses/",
+        Data.toBS integrationResponseId
+      ]
+
+instance Data.ToQuery UpdateIntegrationResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateIntegrationResponseResponse' smart constructor.
+data UpdateIntegrationResponseResponse = UpdateIntegrationResponseResponse'
+  { -- | Supported only for WebSocket APIs. Specifies how to handle response
+    -- payload content type conversions. Supported values are CONVERT_TO_BINARY
+    -- and CONVERT_TO_TEXT, with the following behaviors:
+    --
+    -- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+    -- string to the corresponding binary blob.
+    --
+    -- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+    -- Base64-encoded string.
+    --
+    -- If this property is not defined, the response payload will be passed
+    -- through from the integration response to the route response or method
+    -- response without modification.
+    contentHandlingStrategy :: Prelude.Maybe ContentHandlingStrategy,
+    -- | The integration response ID.
+    integrationResponseId :: Prelude.Maybe Prelude.Text,
+    -- | The integration response key.
+    integrationResponseKey :: Prelude.Maybe Prelude.Text,
+    -- | A key-value map specifying response parameters that are passed to the
+    -- method response from the backend. The key is a method response header
+    -- parameter name and the mapped value is an integration response header
+    -- value, a static value enclosed within a pair of single quotes, or a JSON
+    -- expression from the integration response body. The mapping key must
+    -- match the pattern of method.response.header.{name}, where name is a
+    -- valid and unique header name. The mapped non-static value must match the
+    -- pattern of integration.response.header.{name} or
+    -- integration.response.body.{JSON-expression}, where name is a valid and
+    -- unique response header name and JSON-expression is a valid JSON
+    -- expression without the $ prefix.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of response templates for the integration response as a
+    -- string-to-string map of key-value pairs. Response templates are
+    -- represented as a key\/value map, with a content-type as the key and a
+    -- template as the value.
+    responseTemplates :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The template selection expressions for the integration response.
+    templateSelectionExpression :: 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 'UpdateIntegrationResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentHandlingStrategy', 'updateIntegrationResponseResponse_contentHandlingStrategy' - Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+--
+-- 'integrationResponseId', 'updateIntegrationResponseResponse_integrationResponseId' - The integration response ID.
+--
+-- 'integrationResponseKey', 'updateIntegrationResponseResponse_integrationResponseKey' - The integration response key.
+--
+-- 'responseParameters', 'updateIntegrationResponseResponse_responseParameters' - A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+--
+-- 'responseTemplates', 'updateIntegrationResponseResponse_responseTemplates' - The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+--
+-- 'templateSelectionExpression', 'updateIntegrationResponseResponse_templateSelectionExpression' - The template selection expressions for the integration response.
+--
+-- 'httpStatus', 'updateIntegrationResponseResponse_httpStatus' - The response's http status code.
+newUpdateIntegrationResponseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateIntegrationResponseResponse
+newUpdateIntegrationResponseResponse pHttpStatus_ =
+  UpdateIntegrationResponseResponse'
+    { contentHandlingStrategy =
+        Prelude.Nothing,
+      integrationResponseId = Prelude.Nothing,
+      integrationResponseKey = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      responseTemplates = Prelude.Nothing,
+      templateSelectionExpression =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Supported only for WebSocket APIs. Specifies how to handle response
+-- payload content type conversions. Supported values are CONVERT_TO_BINARY
+-- and CONVERT_TO_TEXT, with the following behaviors:
+--
+-- CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded
+-- string to the corresponding binary blob.
+--
+-- CONVERT_TO_TEXT: Converts a response payload from a binary blob to a
+-- Base64-encoded string.
+--
+-- If this property is not defined, the response payload will be passed
+-- through from the integration response to the route response or method
+-- response without modification.
+updateIntegrationResponseResponse_contentHandlingStrategy :: Lens.Lens' UpdateIntegrationResponseResponse (Prelude.Maybe ContentHandlingStrategy)
+updateIntegrationResponseResponse_contentHandlingStrategy = Lens.lens (\UpdateIntegrationResponseResponse' {contentHandlingStrategy} -> contentHandlingStrategy) (\s@UpdateIntegrationResponseResponse' {} a -> s {contentHandlingStrategy = a} :: UpdateIntegrationResponseResponse)
+
+-- | The integration response ID.
+updateIntegrationResponseResponse_integrationResponseId :: Lens.Lens' UpdateIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+updateIntegrationResponseResponse_integrationResponseId = Lens.lens (\UpdateIntegrationResponseResponse' {integrationResponseId} -> integrationResponseId) (\s@UpdateIntegrationResponseResponse' {} a -> s {integrationResponseId = a} :: UpdateIntegrationResponseResponse)
+
+-- | The integration response key.
+updateIntegrationResponseResponse_integrationResponseKey :: Lens.Lens' UpdateIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+updateIntegrationResponseResponse_integrationResponseKey = Lens.lens (\UpdateIntegrationResponseResponse' {integrationResponseKey} -> integrationResponseKey) (\s@UpdateIntegrationResponseResponse' {} a -> s {integrationResponseKey = a} :: UpdateIntegrationResponseResponse)
+
+-- | A key-value map specifying response parameters that are passed to the
+-- method response from the backend. The key is a method response header
+-- parameter name and the mapped value is an integration response header
+-- value, a static value enclosed within a pair of single quotes, or a JSON
+-- expression from the integration response body. The mapping key must
+-- match the pattern of method.response.header.{name}, where name is a
+-- valid and unique header name. The mapped non-static value must match the
+-- pattern of integration.response.header.{name} or
+-- integration.response.body.{JSON-expression}, where name is a valid and
+-- unique response header name and JSON-expression is a valid JSON
+-- expression without the $ prefix.
+updateIntegrationResponseResponse_responseParameters :: Lens.Lens' UpdateIntegrationResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegrationResponseResponse_responseParameters = Lens.lens (\UpdateIntegrationResponseResponse' {responseParameters} -> responseParameters) (\s@UpdateIntegrationResponseResponse' {} a -> s {responseParameters = a} :: UpdateIntegrationResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of response templates for the integration response as a
+-- string-to-string map of key-value pairs. Response templates are
+-- represented as a key\/value map, with a content-type as the key and a
+-- template as the value.
+updateIntegrationResponseResponse_responseTemplates :: Lens.Lens' UpdateIntegrationResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateIntegrationResponseResponse_responseTemplates = Lens.lens (\UpdateIntegrationResponseResponse' {responseTemplates} -> responseTemplates) (\s@UpdateIntegrationResponseResponse' {} a -> s {responseTemplates = a} :: UpdateIntegrationResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The template selection expressions for the integration response.
+updateIntegrationResponseResponse_templateSelectionExpression :: Lens.Lens' UpdateIntegrationResponseResponse (Prelude.Maybe Prelude.Text)
+updateIntegrationResponseResponse_templateSelectionExpression = Lens.lens (\UpdateIntegrationResponseResponse' {templateSelectionExpression} -> templateSelectionExpression) (\s@UpdateIntegrationResponseResponse' {} a -> s {templateSelectionExpression = a} :: UpdateIntegrationResponseResponse)
+
+-- | The response's http status code.
+updateIntegrationResponseResponse_httpStatus :: Lens.Lens' UpdateIntegrationResponseResponse Prelude.Int
+updateIntegrationResponseResponse_httpStatus = Lens.lens (\UpdateIntegrationResponseResponse' {httpStatus} -> httpStatus) (\s@UpdateIntegrationResponseResponse' {} a -> s {httpStatus = a} :: UpdateIntegrationResponseResponse)
+
+instance
+  Prelude.NFData
+    UpdateIntegrationResponseResponse
+  where
+  rnf UpdateIntegrationResponseResponse' {..} =
+    Prelude.rnf contentHandlingStrategy
+      `Prelude.seq` Prelude.rnf integrationResponseId
+      `Prelude.seq` Prelude.rnf integrationResponseKey
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf responseTemplates
+      `Prelude.seq` Prelude.rnf templateSelectionExpression
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateModel.hs b/gen/Amazonka/ApiGatewayV2/UpdateModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateModel.hs
@@ -0,0 +1,293 @@
+{-# 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.ApiGatewayV2.UpdateModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a Model.
+module Amazonka.ApiGatewayV2.UpdateModel
+  ( -- * Creating a Request
+    UpdateModel (..),
+    newUpdateModel,
+
+    -- * Request Lenses
+    updateModel_contentType,
+    updateModel_description,
+    updateModel_name,
+    updateModel_schema,
+    updateModel_modelId,
+    updateModel_apiId,
+
+    -- * Destructuring the Response
+    UpdateModelResponse (..),
+    newUpdateModelResponse,
+
+    -- * Response Lenses
+    updateModelResponse_contentType,
+    updateModelResponse_description,
+    updateModelResponse_modelId,
+    updateModelResponse_name,
+    updateModelResponse_schema,
+    updateModelResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates a Model.
+--
+-- /See:/ 'newUpdateModel' smart constructor.
+data UpdateModel = UpdateModel'
+  { -- | The content-type for the model, for example, \"application\/json\".
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The description of the model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the model.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The schema for the model. For application\/json models, this should be
+    -- JSON schema draft 4 model.
+    schema :: Prelude.Maybe Prelude.Text,
+    -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'updateModel_contentType' - The content-type for the model, for example, \"application\/json\".
+--
+-- 'description', 'updateModel_description' - The description of the model.
+--
+-- 'name', 'updateModel_name' - The name of the model.
+--
+-- 'schema', 'updateModel_schema' - The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+--
+-- 'modelId', 'updateModel_modelId' - The model ID.
+--
+-- 'apiId', 'updateModel_apiId' - The API identifier.
+newUpdateModel ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  UpdateModel
+newUpdateModel pModelId_ pApiId_ =
+  UpdateModel'
+    { contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      modelId = pModelId_,
+      apiId = pApiId_
+    }
+
+-- | The content-type for the model, for example, \"application\/json\".
+updateModel_contentType :: Lens.Lens' UpdateModel (Prelude.Maybe Prelude.Text)
+updateModel_contentType = Lens.lens (\UpdateModel' {contentType} -> contentType) (\s@UpdateModel' {} a -> s {contentType = a} :: UpdateModel)
+
+-- | The description of the model.
+updateModel_description :: Lens.Lens' UpdateModel (Prelude.Maybe Prelude.Text)
+updateModel_description = Lens.lens (\UpdateModel' {description} -> description) (\s@UpdateModel' {} a -> s {description = a} :: UpdateModel)
+
+-- | The name of the model.
+updateModel_name :: Lens.Lens' UpdateModel (Prelude.Maybe Prelude.Text)
+updateModel_name = Lens.lens (\UpdateModel' {name} -> name) (\s@UpdateModel' {} a -> s {name = a} :: UpdateModel)
+
+-- | The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+updateModel_schema :: Lens.Lens' UpdateModel (Prelude.Maybe Prelude.Text)
+updateModel_schema = Lens.lens (\UpdateModel' {schema} -> schema) (\s@UpdateModel' {} a -> s {schema = a} :: UpdateModel)
+
+-- | The model ID.
+updateModel_modelId :: Lens.Lens' UpdateModel Prelude.Text
+updateModel_modelId = Lens.lens (\UpdateModel' {modelId} -> modelId) (\s@UpdateModel' {} a -> s {modelId = a} :: UpdateModel)
+
+-- | The API identifier.
+updateModel_apiId :: Lens.Lens' UpdateModel Prelude.Text
+updateModel_apiId = Lens.lens (\UpdateModel' {apiId} -> apiId) (\s@UpdateModel' {} a -> s {apiId = a} :: UpdateModel)
+
+instance Core.AWSRequest UpdateModel where
+  type AWSResponse UpdateModel = UpdateModelResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateModelResponse'
+            Prelude.<$> (x Data..?> "contentType")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "modelId")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "schema")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateModel where
+  hashWithSalt _salt UpdateModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` schema
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData UpdateModel where
+  rnf UpdateModel' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders UpdateModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateModel where
+  toJSON UpdateModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("contentType" Data..=) Prelude.<$> contentType,
+            ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            ("schema" Data..=) Prelude.<$> schema
+          ]
+      )
+
+instance Data.ToPath UpdateModel where
+  toPath UpdateModel' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/models/",
+        Data.toBS modelId
+      ]
+
+instance Data.ToQuery UpdateModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateModelResponse' smart constructor.
+data UpdateModelResponse = UpdateModelResponse'
+  { -- | The content-type for the model, for example, \"application\/json\".
+    contentType :: Prelude.Maybe Prelude.Text,
+    -- | The description of the model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The model identifier.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the model. Must be alphanumeric.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The schema for the model. For application\/json models, this should be
+    -- JSON schema draft 4 model.
+    schema :: 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 'UpdateModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'updateModelResponse_contentType' - The content-type for the model, for example, \"application\/json\".
+--
+-- 'description', 'updateModelResponse_description' - The description of the model.
+--
+-- 'modelId', 'updateModelResponse_modelId' - The model identifier.
+--
+-- 'name', 'updateModelResponse_name' - The name of the model. Must be alphanumeric.
+--
+-- 'schema', 'updateModelResponse_schema' - The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+--
+-- 'httpStatus', 'updateModelResponse_httpStatus' - The response's http status code.
+newUpdateModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateModelResponse
+newUpdateModelResponse pHttpStatus_ =
+  UpdateModelResponse'
+    { contentType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The content-type for the model, for example, \"application\/json\".
+updateModelResponse_contentType :: Lens.Lens' UpdateModelResponse (Prelude.Maybe Prelude.Text)
+updateModelResponse_contentType = Lens.lens (\UpdateModelResponse' {contentType} -> contentType) (\s@UpdateModelResponse' {} a -> s {contentType = a} :: UpdateModelResponse)
+
+-- | The description of the model.
+updateModelResponse_description :: Lens.Lens' UpdateModelResponse (Prelude.Maybe Prelude.Text)
+updateModelResponse_description = Lens.lens (\UpdateModelResponse' {description} -> description) (\s@UpdateModelResponse' {} a -> s {description = a} :: UpdateModelResponse)
+
+-- | The model identifier.
+updateModelResponse_modelId :: Lens.Lens' UpdateModelResponse (Prelude.Maybe Prelude.Text)
+updateModelResponse_modelId = Lens.lens (\UpdateModelResponse' {modelId} -> modelId) (\s@UpdateModelResponse' {} a -> s {modelId = a} :: UpdateModelResponse)
+
+-- | The name of the model. Must be alphanumeric.
+updateModelResponse_name :: Lens.Lens' UpdateModelResponse (Prelude.Maybe Prelude.Text)
+updateModelResponse_name = Lens.lens (\UpdateModelResponse' {name} -> name) (\s@UpdateModelResponse' {} a -> s {name = a} :: UpdateModelResponse)
+
+-- | The schema for the model. For application\/json models, this should be
+-- JSON schema draft 4 model.
+updateModelResponse_schema :: Lens.Lens' UpdateModelResponse (Prelude.Maybe Prelude.Text)
+updateModelResponse_schema = Lens.lens (\UpdateModelResponse' {schema} -> schema) (\s@UpdateModelResponse' {} a -> s {schema = a} :: UpdateModelResponse)
+
+-- | The response's http status code.
+updateModelResponse_httpStatus :: Lens.Lens' UpdateModelResponse Prelude.Int
+updateModelResponse_httpStatus = Lens.lens (\UpdateModelResponse' {httpStatus} -> httpStatus) (\s@UpdateModelResponse' {} a -> s {httpStatus = a} :: UpdateModelResponse)
+
+instance Prelude.NFData UpdateModelResponse where
+  rnf UpdateModelResponse' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateRoute.hs b/gen/Amazonka/ApiGatewayV2/UpdateRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateRoute.hs
@@ -0,0 +1,568 @@
+{-# 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.ApiGatewayV2.UpdateRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a Route.
+module Amazonka.ApiGatewayV2.UpdateRoute
+  ( -- * Creating a Request
+    UpdateRoute (..),
+    newUpdateRoute,
+
+    -- * Request Lenses
+    updateRoute_apiKeyRequired,
+    updateRoute_authorizationScopes,
+    updateRoute_authorizationType,
+    updateRoute_authorizerId,
+    updateRoute_modelSelectionExpression,
+    updateRoute_operationName,
+    updateRoute_requestModels,
+    updateRoute_requestParameters,
+    updateRoute_routeKey,
+    updateRoute_routeResponseSelectionExpression,
+    updateRoute_target,
+    updateRoute_apiId,
+    updateRoute_routeId,
+
+    -- * Destructuring the Response
+    UpdateRouteResponse' (..),
+    newUpdateRouteResponse',
+
+    -- * Response Lenses
+    updateRouteResponse'_apiGatewayManaged,
+    updateRouteResponse'_apiKeyRequired,
+    updateRouteResponse'_authorizationScopes,
+    updateRouteResponse'_authorizationType,
+    updateRouteResponse'_authorizerId,
+    updateRouteResponse'_modelSelectionExpression,
+    updateRouteResponse'_operationName,
+    updateRouteResponse'_requestModels,
+    updateRouteResponse'_requestParameters,
+    updateRouteResponse'_routeId,
+    updateRouteResponse'_routeKey,
+    updateRouteResponse'_routeResponseSelectionExpression,
+    updateRouteResponse'_target,
+    updateRouteResponse'_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates a Route.
+--
+-- /See:/ 'newUpdateRoute' smart constructor.
+data UpdateRoute = UpdateRoute'
+  { -- | Specifies whether an API key is required for the route. Supported only
+    -- for WebSocket APIs.
+    apiKeyRequired :: Prelude.Maybe Prelude.Bool,
+    -- | The authorization scopes supported by this route.
+    authorizationScopes :: Prelude.Maybe [Prelude.Text],
+    -- | The authorization type for the route. For WebSocket APIs, valid values
+    -- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+    -- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+    -- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+    -- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+    authorizationType :: Prelude.Maybe AuthorizationType,
+    -- | The identifier of the Authorizer resource to be associated with this
+    -- route. The authorizer identifier is generated by API Gateway when you
+    -- created the authorizer.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | The model selection expression for the route. Supported only for
+    -- WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The operation name for the route.
+    operationName :: Prelude.Maybe Prelude.Text,
+    -- | The request models for the route. Supported only for WebSocket APIs.
+    requestModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The request parameters for the route. Supported only for WebSocket APIs.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The route key for the route.
+    routeKey :: Prelude.Maybe Prelude.Text,
+    -- | The route response selection expression for the route. Supported only
+    -- for WebSocket APIs.
+    routeResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The target for the route.
+    target :: Prelude.Maybe Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiKeyRequired', 'updateRoute_apiKeyRequired' - Specifies whether an API key is required for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'authorizationScopes', 'updateRoute_authorizationScopes' - The authorization scopes supported by this route.
+--
+-- 'authorizationType', 'updateRoute_authorizationType' - The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+--
+-- 'authorizerId', 'updateRoute_authorizerId' - The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+--
+-- 'modelSelectionExpression', 'updateRoute_modelSelectionExpression' - The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+--
+-- 'operationName', 'updateRoute_operationName' - The operation name for the route.
+--
+-- 'requestModels', 'updateRoute_requestModels' - The request models for the route. Supported only for WebSocket APIs.
+--
+-- 'requestParameters', 'updateRoute_requestParameters' - The request parameters for the route. Supported only for WebSocket APIs.
+--
+-- 'routeKey', 'updateRoute_routeKey' - The route key for the route.
+--
+-- 'routeResponseSelectionExpression', 'updateRoute_routeResponseSelectionExpression' - The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'target', 'updateRoute_target' - The target for the route.
+--
+-- 'apiId', 'updateRoute_apiId' - The API identifier.
+--
+-- 'routeId', 'updateRoute_routeId' - The route ID.
+newUpdateRoute ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  UpdateRoute
+newUpdateRoute pApiId_ pRouteId_ =
+  UpdateRoute'
+    { apiKeyRequired = Prelude.Nothing,
+      authorizationScopes = Prelude.Nothing,
+      authorizationType = Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      modelSelectionExpression = Prelude.Nothing,
+      operationName = Prelude.Nothing,
+      requestModels = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      routeKey = Prelude.Nothing,
+      routeResponseSelectionExpression = Prelude.Nothing,
+      target = Prelude.Nothing,
+      apiId = pApiId_,
+      routeId = pRouteId_
+    }
+
+-- | Specifies whether an API key is required for the route. Supported only
+-- for WebSocket APIs.
+updateRoute_apiKeyRequired :: Lens.Lens' UpdateRoute (Prelude.Maybe Prelude.Bool)
+updateRoute_apiKeyRequired = Lens.lens (\UpdateRoute' {apiKeyRequired} -> apiKeyRequired) (\s@UpdateRoute' {} a -> s {apiKeyRequired = a} :: UpdateRoute)
+
+-- | The authorization scopes supported by this route.
+updateRoute_authorizationScopes :: Lens.Lens' UpdateRoute (Prelude.Maybe [Prelude.Text])
+updateRoute_authorizationScopes = Lens.lens (\UpdateRoute' {authorizationScopes} -> authorizationScopes) (\s@UpdateRoute' {} a -> s {authorizationScopes = a} :: UpdateRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+updateRoute_authorizationType :: Lens.Lens' UpdateRoute (Prelude.Maybe AuthorizationType)
+updateRoute_authorizationType = Lens.lens (\UpdateRoute' {authorizationType} -> authorizationType) (\s@UpdateRoute' {} a -> s {authorizationType = a} :: UpdateRoute)
+
+-- | The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+updateRoute_authorizerId :: Lens.Lens' UpdateRoute (Prelude.Maybe Prelude.Text)
+updateRoute_authorizerId = Lens.lens (\UpdateRoute' {authorizerId} -> authorizerId) (\s@UpdateRoute' {} a -> s {authorizerId = a} :: UpdateRoute)
+
+-- | The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+updateRoute_modelSelectionExpression :: Lens.Lens' UpdateRoute (Prelude.Maybe Prelude.Text)
+updateRoute_modelSelectionExpression = Lens.lens (\UpdateRoute' {modelSelectionExpression} -> modelSelectionExpression) (\s@UpdateRoute' {} a -> s {modelSelectionExpression = a} :: UpdateRoute)
+
+-- | The operation name for the route.
+updateRoute_operationName :: Lens.Lens' UpdateRoute (Prelude.Maybe Prelude.Text)
+updateRoute_operationName = Lens.lens (\UpdateRoute' {operationName} -> operationName) (\s@UpdateRoute' {} a -> s {operationName = a} :: UpdateRoute)
+
+-- | The request models for the route. Supported only for WebSocket APIs.
+updateRoute_requestModels :: Lens.Lens' UpdateRoute (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateRoute_requestModels = Lens.lens (\UpdateRoute' {requestModels} -> requestModels) (\s@UpdateRoute' {} a -> s {requestModels = a} :: UpdateRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The request parameters for the route. Supported only for WebSocket APIs.
+updateRoute_requestParameters :: Lens.Lens' UpdateRoute (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+updateRoute_requestParameters = Lens.lens (\UpdateRoute' {requestParameters} -> requestParameters) (\s@UpdateRoute' {} a -> s {requestParameters = a} :: UpdateRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route key for the route.
+updateRoute_routeKey :: Lens.Lens' UpdateRoute (Prelude.Maybe Prelude.Text)
+updateRoute_routeKey = Lens.lens (\UpdateRoute' {routeKey} -> routeKey) (\s@UpdateRoute' {} a -> s {routeKey = a} :: UpdateRoute)
+
+-- | The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+updateRoute_routeResponseSelectionExpression :: Lens.Lens' UpdateRoute (Prelude.Maybe Prelude.Text)
+updateRoute_routeResponseSelectionExpression = Lens.lens (\UpdateRoute' {routeResponseSelectionExpression} -> routeResponseSelectionExpression) (\s@UpdateRoute' {} a -> s {routeResponseSelectionExpression = a} :: UpdateRoute)
+
+-- | The target for the route.
+updateRoute_target :: Lens.Lens' UpdateRoute (Prelude.Maybe Prelude.Text)
+updateRoute_target = Lens.lens (\UpdateRoute' {target} -> target) (\s@UpdateRoute' {} a -> s {target = a} :: UpdateRoute)
+
+-- | The API identifier.
+updateRoute_apiId :: Lens.Lens' UpdateRoute Prelude.Text
+updateRoute_apiId = Lens.lens (\UpdateRoute' {apiId} -> apiId) (\s@UpdateRoute' {} a -> s {apiId = a} :: UpdateRoute)
+
+-- | The route ID.
+updateRoute_routeId :: Lens.Lens' UpdateRoute Prelude.Text
+updateRoute_routeId = Lens.lens (\UpdateRoute' {routeId} -> routeId) (\s@UpdateRoute' {} a -> s {routeId = a} :: UpdateRoute)
+
+instance Core.AWSRequest UpdateRoute where
+  type AWSResponse UpdateRoute = UpdateRouteResponse'
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRouteResponse''
+            Prelude.<$> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "apiKeyRequired")
+            Prelude.<*> ( x
+                            Data..?> "authorizationScopes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "authorizationType")
+            Prelude.<*> (x Data..?> "authorizerId")
+            Prelude.<*> (x Data..?> "modelSelectionExpression")
+            Prelude.<*> (x Data..?> "operationName")
+            Prelude.<*> (x Data..?> "requestModels" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "requestParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "routeId")
+            Prelude.<*> (x Data..?> "routeKey")
+            Prelude.<*> (x Data..?> "routeResponseSelectionExpression")
+            Prelude.<*> (x Data..?> "target")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRoute where
+  hashWithSalt _salt UpdateRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiKeyRequired
+      `Prelude.hashWithSalt` authorizationScopes
+      `Prelude.hashWithSalt` authorizationType
+      `Prelude.hashWithSalt` authorizerId
+      `Prelude.hashWithSalt` modelSelectionExpression
+      `Prelude.hashWithSalt` operationName
+      `Prelude.hashWithSalt` requestModels
+      `Prelude.hashWithSalt` requestParameters
+      `Prelude.hashWithSalt` routeKey
+      `Prelude.hashWithSalt` routeResponseSelectionExpression
+      `Prelude.hashWithSalt` target
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+
+instance Prelude.NFData UpdateRoute where
+  rnf UpdateRoute' {..} =
+    Prelude.rnf apiKeyRequired
+      `Prelude.seq` Prelude.rnf authorizationScopes
+      `Prelude.seq` Prelude.rnf authorizationType
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf operationName
+      `Prelude.seq` Prelude.rnf requestModels
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf routeKey
+      `Prelude.seq` Prelude.rnf routeResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf routeId
+
+instance Data.ToHeaders UpdateRoute where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRoute where
+  toJSON UpdateRoute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("apiKeyRequired" Data..=)
+              Prelude.<$> apiKeyRequired,
+            ("authorizationScopes" Data..=)
+              Prelude.<$> authorizationScopes,
+            ("authorizationType" Data..=)
+              Prelude.<$> authorizationType,
+            ("authorizerId" Data..=) Prelude.<$> authorizerId,
+            ("modelSelectionExpression" Data..=)
+              Prelude.<$> modelSelectionExpression,
+            ("operationName" Data..=) Prelude.<$> operationName,
+            ("requestModels" Data..=) Prelude.<$> requestModels,
+            ("requestParameters" Data..=)
+              Prelude.<$> requestParameters,
+            ("routeKey" Data..=) Prelude.<$> routeKey,
+            ("routeResponseSelectionExpression" Data..=)
+              Prelude.<$> routeResponseSelectionExpression,
+            ("target" Data..=) Prelude.<$> target
+          ]
+      )
+
+instance Data.ToPath UpdateRoute where
+  toPath UpdateRoute' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId
+      ]
+
+instance Data.ToQuery UpdateRoute where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRouteResponse'' smart constructor.
+data UpdateRouteResponse' = UpdateRouteResponse''
+  { -- | Specifies whether a route is managed by API Gateway. If you created an
+    -- API using quick create, the $default route is managed by API Gateway.
+    -- You can\'t modify the $default route key.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether an API key is required for this route. Supported only
+    -- for WebSocket APIs.
+    apiKeyRequired :: Prelude.Maybe Prelude.Bool,
+    -- | A list of authorization scopes configured on a route. The scopes are
+    -- used with a JWT authorizer to authorize the method invocation. The
+    -- authorization works by matching the route scopes against the scopes
+    -- parsed from the access token in the incoming request. The method
+    -- invocation is authorized if any route scope matches a claimed scope in
+    -- the access token. Otherwise, the invocation is not authorized. When the
+    -- route scope is configured, the client must provide an access token
+    -- instead of an identity token for authorization purposes.
+    authorizationScopes :: Prelude.Maybe [Prelude.Text],
+    -- | The authorization type for the route. For WebSocket APIs, valid values
+    -- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+    -- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+    -- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+    -- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+    authorizationType :: Prelude.Maybe AuthorizationType,
+    -- | The identifier of the Authorizer resource to be associated with this
+    -- route. The authorizer identifier is generated by API Gateway when you
+    -- created the authorizer.
+    authorizerId :: Prelude.Maybe Prelude.Text,
+    -- | The model selection expression for the route. Supported only for
+    -- WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The operation name for the route.
+    operationName :: Prelude.Maybe Prelude.Text,
+    -- | The request models for the route. Supported only for WebSocket APIs.
+    requestModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The request parameters for the route. Supported only for WebSocket APIs.
+    requestParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The route ID.
+    routeId :: Prelude.Maybe Prelude.Text,
+    -- | The route key for the route.
+    routeKey :: Prelude.Maybe Prelude.Text,
+    -- | The route response selection expression for the route. Supported only
+    -- for WebSocket APIs.
+    routeResponseSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The target for the route.
+    target :: 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 'UpdateRouteResponse'' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayManaged', 'updateRouteResponse'_apiGatewayManaged' - Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+--
+-- 'apiKeyRequired', 'updateRouteResponse'_apiKeyRequired' - Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+--
+-- 'authorizationScopes', 'updateRouteResponse'_authorizationScopes' - A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+--
+-- 'authorizationType', 'updateRouteResponse'_authorizationType' - The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+--
+-- 'authorizerId', 'updateRouteResponse'_authorizerId' - The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+--
+-- 'modelSelectionExpression', 'updateRouteResponse'_modelSelectionExpression' - The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+--
+-- 'operationName', 'updateRouteResponse'_operationName' - The operation name for the route.
+--
+-- 'requestModels', 'updateRouteResponse'_requestModels' - The request models for the route. Supported only for WebSocket APIs.
+--
+-- 'requestParameters', 'updateRouteResponse'_requestParameters' - The request parameters for the route. Supported only for WebSocket APIs.
+--
+-- 'routeId', 'updateRouteResponse'_routeId' - The route ID.
+--
+-- 'routeKey', 'updateRouteResponse'_routeKey' - The route key for the route.
+--
+-- 'routeResponseSelectionExpression', 'updateRouteResponse'_routeResponseSelectionExpression' - The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+--
+-- 'target', 'updateRouteResponse'_target' - The target for the route.
+--
+-- 'httpStatus', 'updateRouteResponse'_httpStatus' - The response's http status code.
+newUpdateRouteResponse' ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRouteResponse'
+newUpdateRouteResponse' pHttpStatus_ =
+  UpdateRouteResponse''
+    { apiGatewayManaged =
+        Prelude.Nothing,
+      apiKeyRequired = Prelude.Nothing,
+      authorizationScopes = Prelude.Nothing,
+      authorizationType = Prelude.Nothing,
+      authorizerId = Prelude.Nothing,
+      modelSelectionExpression = Prelude.Nothing,
+      operationName = Prelude.Nothing,
+      requestModels = Prelude.Nothing,
+      requestParameters = Prelude.Nothing,
+      routeId = Prelude.Nothing,
+      routeKey = Prelude.Nothing,
+      routeResponseSelectionExpression = Prelude.Nothing,
+      target = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Specifies whether a route is managed by API Gateway. If you created an
+-- API using quick create, the $default route is managed by API Gateway.
+-- You can\'t modify the $default route key.
+updateRouteResponse'_apiGatewayManaged :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Bool)
+updateRouteResponse'_apiGatewayManaged = Lens.lens (\UpdateRouteResponse'' {apiGatewayManaged} -> apiGatewayManaged) (\s@UpdateRouteResponse'' {} a -> s {apiGatewayManaged = a} :: UpdateRouteResponse')
+
+-- | Specifies whether an API key is required for this route. Supported only
+-- for WebSocket APIs.
+updateRouteResponse'_apiKeyRequired :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Bool)
+updateRouteResponse'_apiKeyRequired = Lens.lens (\UpdateRouteResponse'' {apiKeyRequired} -> apiKeyRequired) (\s@UpdateRouteResponse'' {} a -> s {apiKeyRequired = a} :: UpdateRouteResponse')
+
+-- | A list of authorization scopes configured on a route. The scopes are
+-- used with a JWT authorizer to authorize the method invocation. The
+-- authorization works by matching the route scopes against the scopes
+-- parsed from the access token in the incoming request. The method
+-- invocation is authorized if any route scope matches a claimed scope in
+-- the access token. Otherwise, the invocation is not authorized. When the
+-- route scope is configured, the client must provide an access token
+-- instead of an identity token for authorization purposes.
+updateRouteResponse'_authorizationScopes :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe [Prelude.Text])
+updateRouteResponse'_authorizationScopes = Lens.lens (\UpdateRouteResponse'' {authorizationScopes} -> authorizationScopes) (\s@UpdateRouteResponse'' {} a -> s {authorizationScopes = a} :: UpdateRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The authorization type for the route. For WebSocket APIs, valid values
+-- are NONE for open access, AWS_IAM for using AWS IAM permissions, and
+-- CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are
+-- NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using
+-- AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
+updateRouteResponse'_authorizationType :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe AuthorizationType)
+updateRouteResponse'_authorizationType = Lens.lens (\UpdateRouteResponse'' {authorizationType} -> authorizationType) (\s@UpdateRouteResponse'' {} a -> s {authorizationType = a} :: UpdateRouteResponse')
+
+-- | The identifier of the Authorizer resource to be associated with this
+-- route. The authorizer identifier is generated by API Gateway when you
+-- created the authorizer.
+updateRouteResponse'_authorizerId :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Text)
+updateRouteResponse'_authorizerId = Lens.lens (\UpdateRouteResponse'' {authorizerId} -> authorizerId) (\s@UpdateRouteResponse'' {} a -> s {authorizerId = a} :: UpdateRouteResponse')
+
+-- | The model selection expression for the route. Supported only for
+-- WebSocket APIs.
+updateRouteResponse'_modelSelectionExpression :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Text)
+updateRouteResponse'_modelSelectionExpression = Lens.lens (\UpdateRouteResponse'' {modelSelectionExpression} -> modelSelectionExpression) (\s@UpdateRouteResponse'' {} a -> s {modelSelectionExpression = a} :: UpdateRouteResponse')
+
+-- | The operation name for the route.
+updateRouteResponse'_operationName :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Text)
+updateRouteResponse'_operationName = Lens.lens (\UpdateRouteResponse'' {operationName} -> operationName) (\s@UpdateRouteResponse'' {} a -> s {operationName = a} :: UpdateRouteResponse')
+
+-- | The request models for the route. Supported only for WebSocket APIs.
+updateRouteResponse'_requestModels :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateRouteResponse'_requestModels = Lens.lens (\UpdateRouteResponse'' {requestModels} -> requestModels) (\s@UpdateRouteResponse'' {} a -> s {requestModels = a} :: UpdateRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The request parameters for the route. Supported only for WebSocket APIs.
+updateRouteResponse'_requestParameters :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+updateRouteResponse'_requestParameters = Lens.lens (\UpdateRouteResponse'' {requestParameters} -> requestParameters) (\s@UpdateRouteResponse'' {} a -> s {requestParameters = a} :: UpdateRouteResponse') Prelude.. Lens.mapping Lens.coerced
+
+-- | The route ID.
+updateRouteResponse'_routeId :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Text)
+updateRouteResponse'_routeId = Lens.lens (\UpdateRouteResponse'' {routeId} -> routeId) (\s@UpdateRouteResponse'' {} a -> s {routeId = a} :: UpdateRouteResponse')
+
+-- | The route key for the route.
+updateRouteResponse'_routeKey :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Text)
+updateRouteResponse'_routeKey = Lens.lens (\UpdateRouteResponse'' {routeKey} -> routeKey) (\s@UpdateRouteResponse'' {} a -> s {routeKey = a} :: UpdateRouteResponse')
+
+-- | The route response selection expression for the route. Supported only
+-- for WebSocket APIs.
+updateRouteResponse'_routeResponseSelectionExpression :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Text)
+updateRouteResponse'_routeResponseSelectionExpression = Lens.lens (\UpdateRouteResponse'' {routeResponseSelectionExpression} -> routeResponseSelectionExpression) (\s@UpdateRouteResponse'' {} a -> s {routeResponseSelectionExpression = a} :: UpdateRouteResponse')
+
+-- | The target for the route.
+updateRouteResponse'_target :: Lens.Lens' UpdateRouteResponse' (Prelude.Maybe Prelude.Text)
+updateRouteResponse'_target = Lens.lens (\UpdateRouteResponse'' {target} -> target) (\s@UpdateRouteResponse'' {} a -> s {target = a} :: UpdateRouteResponse')
+
+-- | The response's http status code.
+updateRouteResponse'_httpStatus :: Lens.Lens' UpdateRouteResponse' Prelude.Int
+updateRouteResponse'_httpStatus = Lens.lens (\UpdateRouteResponse'' {httpStatus} -> httpStatus) (\s@UpdateRouteResponse'' {} a -> s {httpStatus = a} :: UpdateRouteResponse')
+
+instance Prelude.NFData UpdateRouteResponse' where
+  rnf UpdateRouteResponse'' {..} =
+    Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf apiKeyRequired
+      `Prelude.seq` Prelude.rnf authorizationScopes
+      `Prelude.seq` Prelude.rnf authorizationType
+      `Prelude.seq` Prelude.rnf authorizerId
+      `Prelude.seq` Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf operationName
+      `Prelude.seq` Prelude.rnf requestModels
+      `Prelude.seq` Prelude.rnf requestParameters
+      `Prelude.seq` Prelude.rnf routeId
+      `Prelude.seq` Prelude.rnf routeKey
+      `Prelude.seq` Prelude.rnf routeResponseSelectionExpression
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateRouteResponse.hs b/gen/Amazonka/ApiGatewayV2/UpdateRouteResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateRouteResponse.hs
@@ -0,0 +1,323 @@
+{-# 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.ApiGatewayV2.UpdateRouteResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a RouteResponse.
+module Amazonka.ApiGatewayV2.UpdateRouteResponse
+  ( -- * Creating a Request
+    UpdateRouteResponse (..),
+    newUpdateRouteResponse,
+
+    -- * Request Lenses
+    updateRouteResponse_modelSelectionExpression,
+    updateRouteResponse_responseModels,
+    updateRouteResponse_responseParameters,
+    updateRouteResponse_routeResponseKey,
+    updateRouteResponse_routeResponseId,
+    updateRouteResponse_apiId,
+    updateRouteResponse_routeId,
+
+    -- * Destructuring the Response
+    UpdateRouteResponseResponse (..),
+    newUpdateRouteResponseResponse,
+
+    -- * Response Lenses
+    updateRouteResponseResponse_modelSelectionExpression,
+    updateRouteResponseResponse_responseModels,
+    updateRouteResponseResponse_responseParameters,
+    updateRouteResponseResponse_routeResponseId,
+    updateRouteResponseResponse_routeResponseKey,
+    updateRouteResponseResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates a RouteResponse.
+--
+-- /See:/ 'newUpdateRouteResponse' smart constructor.
+data UpdateRouteResponse = UpdateRouteResponse'
+  { -- | The model selection expression for the route response. Supported only
+    -- for WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | The response models for the route response.
+    responseModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The route response parameters.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | The route response key.
+    routeResponseKey :: Prelude.Maybe Prelude.Text,
+    -- | The route response ID.
+    routeResponseId :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text,
+    -- | The route ID.
+    routeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelSelectionExpression', 'updateRouteResponse_modelSelectionExpression' - The model selection expression for the route response. Supported only
+-- for WebSocket APIs.
+--
+-- 'responseModels', 'updateRouteResponse_responseModels' - The response models for the route response.
+--
+-- 'responseParameters', 'updateRouteResponse_responseParameters' - The route response parameters.
+--
+-- 'routeResponseKey', 'updateRouteResponse_routeResponseKey' - The route response key.
+--
+-- 'routeResponseId', 'updateRouteResponse_routeResponseId' - The route response ID.
+--
+-- 'apiId', 'updateRouteResponse_apiId' - The API identifier.
+--
+-- 'routeId', 'updateRouteResponse_routeId' - The route ID.
+newUpdateRouteResponse ::
+  -- | 'routeResponseId'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'routeId'
+  Prelude.Text ->
+  UpdateRouteResponse
+newUpdateRouteResponse
+  pRouteResponseId_
+  pApiId_
+  pRouteId_ =
+    UpdateRouteResponse'
+      { modelSelectionExpression =
+          Prelude.Nothing,
+        responseModels = Prelude.Nothing,
+        responseParameters = Prelude.Nothing,
+        routeResponseKey = Prelude.Nothing,
+        routeResponseId = pRouteResponseId_,
+        apiId = pApiId_,
+        routeId = pRouteId_
+      }
+
+-- | The model selection expression for the route response. Supported only
+-- for WebSocket APIs.
+updateRouteResponse_modelSelectionExpression :: Lens.Lens' UpdateRouteResponse (Prelude.Maybe Prelude.Text)
+updateRouteResponse_modelSelectionExpression = Lens.lens (\UpdateRouteResponse' {modelSelectionExpression} -> modelSelectionExpression) (\s@UpdateRouteResponse' {} a -> s {modelSelectionExpression = a} :: UpdateRouteResponse)
+
+-- | The response models for the route response.
+updateRouteResponse_responseModels :: Lens.Lens' UpdateRouteResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateRouteResponse_responseModels = Lens.lens (\UpdateRouteResponse' {responseModels} -> responseModels) (\s@UpdateRouteResponse' {} a -> s {responseModels = a} :: UpdateRouteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route response parameters.
+updateRouteResponse_responseParameters :: Lens.Lens' UpdateRouteResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+updateRouteResponse_responseParameters = Lens.lens (\UpdateRouteResponse' {responseParameters} -> responseParameters) (\s@UpdateRouteResponse' {} a -> s {responseParameters = a} :: UpdateRouteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route response key.
+updateRouteResponse_routeResponseKey :: Lens.Lens' UpdateRouteResponse (Prelude.Maybe Prelude.Text)
+updateRouteResponse_routeResponseKey = Lens.lens (\UpdateRouteResponse' {routeResponseKey} -> routeResponseKey) (\s@UpdateRouteResponse' {} a -> s {routeResponseKey = a} :: UpdateRouteResponse)
+
+-- | The route response ID.
+updateRouteResponse_routeResponseId :: Lens.Lens' UpdateRouteResponse Prelude.Text
+updateRouteResponse_routeResponseId = Lens.lens (\UpdateRouteResponse' {routeResponseId} -> routeResponseId) (\s@UpdateRouteResponse' {} a -> s {routeResponseId = a} :: UpdateRouteResponse)
+
+-- | The API identifier.
+updateRouteResponse_apiId :: Lens.Lens' UpdateRouteResponse Prelude.Text
+updateRouteResponse_apiId = Lens.lens (\UpdateRouteResponse' {apiId} -> apiId) (\s@UpdateRouteResponse' {} a -> s {apiId = a} :: UpdateRouteResponse)
+
+-- | The route ID.
+updateRouteResponse_routeId :: Lens.Lens' UpdateRouteResponse Prelude.Text
+updateRouteResponse_routeId = Lens.lens (\UpdateRouteResponse' {routeId} -> routeId) (\s@UpdateRouteResponse' {} a -> s {routeId = a} :: UpdateRouteResponse)
+
+instance Core.AWSRequest UpdateRouteResponse where
+  type
+    AWSResponse UpdateRouteResponse =
+      UpdateRouteResponseResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRouteResponseResponse'
+            Prelude.<$> (x Data..?> "modelSelectionExpression")
+            Prelude.<*> (x Data..?> "responseModels" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "responseParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "routeResponseId")
+            Prelude.<*> (x Data..?> "routeResponseKey")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRouteResponse where
+  hashWithSalt _salt UpdateRouteResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelSelectionExpression
+      `Prelude.hashWithSalt` responseModels
+      `Prelude.hashWithSalt` responseParameters
+      `Prelude.hashWithSalt` routeResponseKey
+      `Prelude.hashWithSalt` routeResponseId
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` routeId
+
+instance Prelude.NFData UpdateRouteResponse where
+  rnf UpdateRouteResponse' {..} =
+    Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf responseModels
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf routeResponseKey
+      `Prelude.seq` Prelude.rnf routeResponseId
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf routeId
+
+instance Data.ToHeaders UpdateRouteResponse where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRouteResponse where
+  toJSON UpdateRouteResponse' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("modelSelectionExpression" Data..=)
+              Prelude.<$> modelSelectionExpression,
+            ("responseModels" Data..=)
+              Prelude.<$> responseModels,
+            ("responseParameters" Data..=)
+              Prelude.<$> responseParameters,
+            ("routeResponseKey" Data..=)
+              Prelude.<$> routeResponseKey
+          ]
+      )
+
+instance Data.ToPath UpdateRouteResponse where
+  toPath UpdateRouteResponse' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/routes/",
+        Data.toBS routeId,
+        "/routeresponses/",
+        Data.toBS routeResponseId
+      ]
+
+instance Data.ToQuery UpdateRouteResponse where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRouteResponseResponse' smart constructor.
+data UpdateRouteResponseResponse = UpdateRouteResponseResponse'
+  { -- | Represents the model selection expression of a route response. Supported
+    -- only for WebSocket APIs.
+    modelSelectionExpression :: Prelude.Maybe Prelude.Text,
+    -- | Represents the response models of a route response.
+    responseModels :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Represents the response parameters of a route response.
+    responseParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints),
+    -- | Represents the identifier of a route response.
+    routeResponseId :: Prelude.Maybe Prelude.Text,
+    -- | Represents the route response key of a route response.
+    routeResponseKey :: 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 'UpdateRouteResponseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelSelectionExpression', 'updateRouteResponseResponse_modelSelectionExpression' - Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+--
+-- 'responseModels', 'updateRouteResponseResponse_responseModels' - Represents the response models of a route response.
+--
+-- 'responseParameters', 'updateRouteResponseResponse_responseParameters' - Represents the response parameters of a route response.
+--
+-- 'routeResponseId', 'updateRouteResponseResponse_routeResponseId' - Represents the identifier of a route response.
+--
+-- 'routeResponseKey', 'updateRouteResponseResponse_routeResponseKey' - Represents the route response key of a route response.
+--
+-- 'httpStatus', 'updateRouteResponseResponse_httpStatus' - The response's http status code.
+newUpdateRouteResponseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRouteResponseResponse
+newUpdateRouteResponseResponse pHttpStatus_ =
+  UpdateRouteResponseResponse'
+    { modelSelectionExpression =
+        Prelude.Nothing,
+      responseModels = Prelude.Nothing,
+      responseParameters = Prelude.Nothing,
+      routeResponseId = Prelude.Nothing,
+      routeResponseKey = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Represents the model selection expression of a route response. Supported
+-- only for WebSocket APIs.
+updateRouteResponseResponse_modelSelectionExpression :: Lens.Lens' UpdateRouteResponseResponse (Prelude.Maybe Prelude.Text)
+updateRouteResponseResponse_modelSelectionExpression = Lens.lens (\UpdateRouteResponseResponse' {modelSelectionExpression} -> modelSelectionExpression) (\s@UpdateRouteResponseResponse' {} a -> s {modelSelectionExpression = a} :: UpdateRouteResponseResponse)
+
+-- | Represents the response models of a route response.
+updateRouteResponseResponse_responseModels :: Lens.Lens' UpdateRouteResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateRouteResponseResponse_responseModels = Lens.lens (\UpdateRouteResponseResponse' {responseModels} -> responseModels) (\s@UpdateRouteResponseResponse' {} a -> s {responseModels = a} :: UpdateRouteResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the response parameters of a route response.
+updateRouteResponseResponse_responseParameters :: Lens.Lens' UpdateRouteResponseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text ParameterConstraints))
+updateRouteResponseResponse_responseParameters = Lens.lens (\UpdateRouteResponseResponse' {responseParameters} -> responseParameters) (\s@UpdateRouteResponseResponse' {} a -> s {responseParameters = a} :: UpdateRouteResponseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the identifier of a route response.
+updateRouteResponseResponse_routeResponseId :: Lens.Lens' UpdateRouteResponseResponse (Prelude.Maybe Prelude.Text)
+updateRouteResponseResponse_routeResponseId = Lens.lens (\UpdateRouteResponseResponse' {routeResponseId} -> routeResponseId) (\s@UpdateRouteResponseResponse' {} a -> s {routeResponseId = a} :: UpdateRouteResponseResponse)
+
+-- | Represents the route response key of a route response.
+updateRouteResponseResponse_routeResponseKey :: Lens.Lens' UpdateRouteResponseResponse (Prelude.Maybe Prelude.Text)
+updateRouteResponseResponse_routeResponseKey = Lens.lens (\UpdateRouteResponseResponse' {routeResponseKey} -> routeResponseKey) (\s@UpdateRouteResponseResponse' {} a -> s {routeResponseKey = a} :: UpdateRouteResponseResponse)
+
+-- | The response's http status code.
+updateRouteResponseResponse_httpStatus :: Lens.Lens' UpdateRouteResponseResponse Prelude.Int
+updateRouteResponseResponse_httpStatus = Lens.lens (\UpdateRouteResponseResponse' {httpStatus} -> httpStatus) (\s@UpdateRouteResponseResponse' {} a -> s {httpStatus = a} :: UpdateRouteResponseResponse)
+
+instance Prelude.NFData UpdateRouteResponseResponse where
+  rnf UpdateRouteResponseResponse' {..} =
+    Prelude.rnf modelSelectionExpression
+      `Prelude.seq` Prelude.rnf responseModels
+      `Prelude.seq` Prelude.rnf responseParameters
+      `Prelude.seq` Prelude.rnf routeResponseId
+      `Prelude.seq` Prelude.rnf routeResponseKey
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateStage.hs b/gen/Amazonka/ApiGatewayV2/UpdateStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateStage.hs
@@ -0,0 +1,497 @@
+{-# 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.ApiGatewayV2.UpdateStage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a Stage.
+module Amazonka.ApiGatewayV2.UpdateStage
+  ( -- * Creating a Request
+    UpdateStage (..),
+    newUpdateStage,
+
+    -- * Request Lenses
+    updateStage_accessLogSettings,
+    updateStage_autoDeploy,
+    updateStage_clientCertificateId,
+    updateStage_defaultRouteSettings,
+    updateStage_deploymentId,
+    updateStage_description,
+    updateStage_routeSettings,
+    updateStage_stageVariables,
+    updateStage_stageName,
+    updateStage_apiId,
+
+    -- * Destructuring the Response
+    UpdateStageResponse (..),
+    newUpdateStageResponse,
+
+    -- * Response Lenses
+    updateStageResponse_accessLogSettings,
+    updateStageResponse_apiGatewayManaged,
+    updateStageResponse_autoDeploy,
+    updateStageResponse_clientCertificateId,
+    updateStageResponse_createdDate,
+    updateStageResponse_defaultRouteSettings,
+    updateStageResponse_deploymentId,
+    updateStageResponse_description,
+    updateStageResponse_lastDeploymentStatusMessage,
+    updateStageResponse_lastUpdatedDate,
+    updateStageResponse_routeSettings,
+    updateStageResponse_stageName,
+    updateStageResponse_stageVariables,
+    updateStageResponse_tags,
+    updateStageResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates a Stage.
+--
+-- /See:/ 'newUpdateStage' smart constructor.
+data UpdateStage = UpdateStage'
+  { -- | Settings for logging access in this stage.
+    accessLogSettings :: Prelude.Maybe AccessLogSettings,
+    -- | Specifies whether updates to an API automatically trigger a new
+    -- deployment. The default value is false.
+    autoDeploy :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of a client certificate for a Stage.
+    clientCertificateId :: Prelude.Maybe Prelude.Text,
+    -- | The default route settings for the stage.
+    defaultRouteSettings :: Prelude.Maybe RouteSettings,
+    -- | The deployment identifier for the API stage. Can\'t be updated if
+    -- autoDeploy is enabled.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The description for the API stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Route settings for the stage.
+    routeSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings),
+    -- | A map that defines the stage variables for a Stage. Variable names can
+    -- have alphanumeric and underscore characters, and the values must match
+    -- [A-Za-z0-9-._~:\/?#&=,]+.
+    stageVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The stage name. Stage names can contain only alphanumeric characters,
+    -- hyphens, and underscores, or be $default. Maximum length is 128
+    -- characters.
+    stageName :: Prelude.Text,
+    -- | The API identifier.
+    apiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessLogSettings', 'updateStage_accessLogSettings' - Settings for logging access in this stage.
+--
+-- 'autoDeploy', 'updateStage_autoDeploy' - Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+--
+-- 'clientCertificateId', 'updateStage_clientCertificateId' - The identifier of a client certificate for a Stage.
+--
+-- 'defaultRouteSettings', 'updateStage_defaultRouteSettings' - The default route settings for the stage.
+--
+-- 'deploymentId', 'updateStage_deploymentId' - The deployment identifier for the API stage. Can\'t be updated if
+-- autoDeploy is enabled.
+--
+-- 'description', 'updateStage_description' - The description for the API stage.
+--
+-- 'routeSettings', 'updateStage_routeSettings' - Route settings for the stage.
+--
+-- 'stageVariables', 'updateStage_stageVariables' - A map that defines the stage variables for a Stage. Variable names can
+-- have alphanumeric and underscore characters, and the values must match
+-- [A-Za-z0-9-._~:\/?#&=,]+.
+--
+-- 'stageName', 'updateStage_stageName' - The stage name. Stage names can contain only alphanumeric characters,
+-- hyphens, and underscores, or be $default. Maximum length is 128
+-- characters.
+--
+-- 'apiId', 'updateStage_apiId' - The API identifier.
+newUpdateStage ::
+  -- | 'stageName'
+  Prelude.Text ->
+  -- | 'apiId'
+  Prelude.Text ->
+  UpdateStage
+newUpdateStage pStageName_ pApiId_ =
+  UpdateStage'
+    { accessLogSettings = Prelude.Nothing,
+      autoDeploy = Prelude.Nothing,
+      clientCertificateId = Prelude.Nothing,
+      defaultRouteSettings = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      routeSettings = Prelude.Nothing,
+      stageVariables = Prelude.Nothing,
+      stageName = pStageName_,
+      apiId = pApiId_
+    }
+
+-- | Settings for logging access in this stage.
+updateStage_accessLogSettings :: Lens.Lens' UpdateStage (Prelude.Maybe AccessLogSettings)
+updateStage_accessLogSettings = Lens.lens (\UpdateStage' {accessLogSettings} -> accessLogSettings) (\s@UpdateStage' {} a -> s {accessLogSettings = a} :: UpdateStage)
+
+-- | Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+updateStage_autoDeploy :: Lens.Lens' UpdateStage (Prelude.Maybe Prelude.Bool)
+updateStage_autoDeploy = Lens.lens (\UpdateStage' {autoDeploy} -> autoDeploy) (\s@UpdateStage' {} a -> s {autoDeploy = a} :: UpdateStage)
+
+-- | The identifier of a client certificate for a Stage.
+updateStage_clientCertificateId :: Lens.Lens' UpdateStage (Prelude.Maybe Prelude.Text)
+updateStage_clientCertificateId = Lens.lens (\UpdateStage' {clientCertificateId} -> clientCertificateId) (\s@UpdateStage' {} a -> s {clientCertificateId = a} :: UpdateStage)
+
+-- | The default route settings for the stage.
+updateStage_defaultRouteSettings :: Lens.Lens' UpdateStage (Prelude.Maybe RouteSettings)
+updateStage_defaultRouteSettings = Lens.lens (\UpdateStage' {defaultRouteSettings} -> defaultRouteSettings) (\s@UpdateStage' {} a -> s {defaultRouteSettings = a} :: UpdateStage)
+
+-- | The deployment identifier for the API stage. Can\'t be updated if
+-- autoDeploy is enabled.
+updateStage_deploymentId :: Lens.Lens' UpdateStage (Prelude.Maybe Prelude.Text)
+updateStage_deploymentId = Lens.lens (\UpdateStage' {deploymentId} -> deploymentId) (\s@UpdateStage' {} a -> s {deploymentId = a} :: UpdateStage)
+
+-- | The description for the API stage.
+updateStage_description :: Lens.Lens' UpdateStage (Prelude.Maybe Prelude.Text)
+updateStage_description = Lens.lens (\UpdateStage' {description} -> description) (\s@UpdateStage' {} a -> s {description = a} :: UpdateStage)
+
+-- | Route settings for the stage.
+updateStage_routeSettings :: Lens.Lens' UpdateStage (Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings))
+updateStage_routeSettings = Lens.lens (\UpdateStage' {routeSettings} -> routeSettings) (\s@UpdateStage' {} a -> s {routeSettings = a} :: UpdateStage) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that defines the stage variables for a Stage. Variable names can
+-- have alphanumeric and underscore characters, and the values must match
+-- [A-Za-z0-9-._~:\/?#&=,]+.
+updateStage_stageVariables :: Lens.Lens' UpdateStage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateStage_stageVariables = Lens.lens (\UpdateStage' {stageVariables} -> stageVariables) (\s@UpdateStage' {} a -> s {stageVariables = a} :: UpdateStage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The stage name. Stage names can contain only alphanumeric characters,
+-- hyphens, and underscores, or be $default. Maximum length is 128
+-- characters.
+updateStage_stageName :: Lens.Lens' UpdateStage Prelude.Text
+updateStage_stageName = Lens.lens (\UpdateStage' {stageName} -> stageName) (\s@UpdateStage' {} a -> s {stageName = a} :: UpdateStage)
+
+-- | The API identifier.
+updateStage_apiId :: Lens.Lens' UpdateStage Prelude.Text
+updateStage_apiId = Lens.lens (\UpdateStage' {apiId} -> apiId) (\s@UpdateStage' {} a -> s {apiId = a} :: UpdateStage)
+
+instance Core.AWSRequest UpdateStage where
+  type AWSResponse UpdateStage = UpdateStageResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateStageResponse'
+            Prelude.<$> (x Data..?> "accessLogSettings")
+            Prelude.<*> (x Data..?> "apiGatewayManaged")
+            Prelude.<*> (x Data..?> "autoDeploy")
+            Prelude.<*> (x Data..?> "clientCertificateId")
+            Prelude.<*> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "defaultRouteSettings")
+            Prelude.<*> (x Data..?> "deploymentId")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "lastDeploymentStatusMessage")
+            Prelude.<*> (x Data..?> "lastUpdatedDate")
+            Prelude.<*> (x Data..?> "routeSettings" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "stageName")
+            Prelude.<*> (x Data..?> "stageVariables" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateStage where
+  hashWithSalt _salt UpdateStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessLogSettings
+      `Prelude.hashWithSalt` autoDeploy
+      `Prelude.hashWithSalt` clientCertificateId
+      `Prelude.hashWithSalt` defaultRouteSettings
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` routeSettings
+      `Prelude.hashWithSalt` stageVariables
+      `Prelude.hashWithSalt` stageName
+      `Prelude.hashWithSalt` apiId
+
+instance Prelude.NFData UpdateStage where
+  rnf UpdateStage' {..} =
+    Prelude.rnf accessLogSettings
+      `Prelude.seq` Prelude.rnf autoDeploy
+      `Prelude.seq` Prelude.rnf clientCertificateId
+      `Prelude.seq` Prelude.rnf defaultRouteSettings
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf routeSettings
+      `Prelude.seq` Prelude.rnf stageVariables
+      `Prelude.seq` Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf apiId
+
+instance Data.ToHeaders UpdateStage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateStage where
+  toJSON UpdateStage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("accessLogSettings" Data..=)
+              Prelude.<$> accessLogSettings,
+            ("autoDeploy" Data..=) Prelude.<$> autoDeploy,
+            ("clientCertificateId" Data..=)
+              Prelude.<$> clientCertificateId,
+            ("defaultRouteSettings" Data..=)
+              Prelude.<$> defaultRouteSettings,
+            ("deploymentId" Data..=) Prelude.<$> deploymentId,
+            ("description" Data..=) Prelude.<$> description,
+            ("routeSettings" Data..=) Prelude.<$> routeSettings,
+            ("stageVariables" Data..=)
+              Prelude.<$> stageVariables
+          ]
+      )
+
+instance Data.ToPath UpdateStage where
+  toPath UpdateStage' {..} =
+    Prelude.mconcat
+      [ "/v2/apis/",
+        Data.toBS apiId,
+        "/stages/",
+        Data.toBS stageName
+      ]
+
+instance Data.ToQuery UpdateStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateStageResponse' smart constructor.
+data UpdateStageResponse = UpdateStageResponse'
+  { -- | Settings for logging access in this stage.
+    accessLogSettings :: Prelude.Maybe AccessLogSettings,
+    -- | Specifies whether a stage is managed by API Gateway. If you created an
+    -- API using quick create, the $default stage is managed by API Gateway.
+    -- You can\'t modify the $default stage.
+    apiGatewayManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether updates to an API automatically trigger a new
+    -- deployment. The default value is false.
+    autoDeploy :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of a client certificate for a Stage. Supported only for
+    -- WebSocket APIs.
+    clientCertificateId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | Default route settings for the stage.
+    defaultRouteSettings :: Prelude.Maybe RouteSettings,
+    -- | The identifier of the Deployment that the Stage is associated with.
+    -- Can\'t be updated if autoDeploy is enabled.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Describes the status of the last deployment of a stage. Supported only
+    -- for stages with autoDeploy enabled.
+    lastDeploymentStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the stage was last updated.
+    lastUpdatedDate :: Prelude.Maybe Data.ISO8601,
+    -- | Route settings for the stage, by routeKey.
+    routeSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings),
+    -- | The name of the stage.
+    stageName :: Prelude.Maybe Prelude.Text,
+    -- | A map that defines the stage variables for a stage resource. Variable
+    -- names can have alphanumeric and underscore characters, and the values
+    -- must match [A-Za-z0-9-._~:\/?#&=,]+.
+    stageVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The collection of tags. Each tag element is associated with a given
+    -- resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessLogSettings', 'updateStageResponse_accessLogSettings' - Settings for logging access in this stage.
+--
+-- 'apiGatewayManaged', 'updateStageResponse_apiGatewayManaged' - Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+--
+-- 'autoDeploy', 'updateStageResponse_autoDeploy' - Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+--
+-- 'clientCertificateId', 'updateStageResponse_clientCertificateId' - The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+--
+-- 'createdDate', 'updateStageResponse_createdDate' - The timestamp when the stage was created.
+--
+-- 'defaultRouteSettings', 'updateStageResponse_defaultRouteSettings' - Default route settings for the stage.
+--
+-- 'deploymentId', 'updateStageResponse_deploymentId' - The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+--
+-- 'description', 'updateStageResponse_description' - The description of the stage.
+--
+-- 'lastDeploymentStatusMessage', 'updateStageResponse_lastDeploymentStatusMessage' - Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+--
+-- 'lastUpdatedDate', 'updateStageResponse_lastUpdatedDate' - The timestamp when the stage was last updated.
+--
+-- 'routeSettings', 'updateStageResponse_routeSettings' - Route settings for the stage, by routeKey.
+--
+-- 'stageName', 'updateStageResponse_stageName' - The name of the stage.
+--
+-- 'stageVariables', 'updateStageResponse_stageVariables' - A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+--
+-- 'tags', 'updateStageResponse_tags' - The collection of tags. Each tag element is associated with a given
+-- resource.
+--
+-- 'httpStatus', 'updateStageResponse_httpStatus' - The response's http status code.
+newUpdateStageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateStageResponse
+newUpdateStageResponse pHttpStatus_ =
+  UpdateStageResponse'
+    { accessLogSettings =
+        Prelude.Nothing,
+      apiGatewayManaged = Prelude.Nothing,
+      autoDeploy = Prelude.Nothing,
+      clientCertificateId = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      defaultRouteSettings = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastDeploymentStatusMessage = Prelude.Nothing,
+      lastUpdatedDate = Prelude.Nothing,
+      routeSettings = Prelude.Nothing,
+      stageName = Prelude.Nothing,
+      stageVariables = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Settings for logging access in this stage.
+updateStageResponse_accessLogSettings :: Lens.Lens' UpdateStageResponse (Prelude.Maybe AccessLogSettings)
+updateStageResponse_accessLogSettings = Lens.lens (\UpdateStageResponse' {accessLogSettings} -> accessLogSettings) (\s@UpdateStageResponse' {} a -> s {accessLogSettings = a} :: UpdateStageResponse)
+
+-- | Specifies whether a stage is managed by API Gateway. If you created an
+-- API using quick create, the $default stage is managed by API Gateway.
+-- You can\'t modify the $default stage.
+updateStageResponse_apiGatewayManaged :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.Bool)
+updateStageResponse_apiGatewayManaged = Lens.lens (\UpdateStageResponse' {apiGatewayManaged} -> apiGatewayManaged) (\s@UpdateStageResponse' {} a -> s {apiGatewayManaged = a} :: UpdateStageResponse)
+
+-- | Specifies whether updates to an API automatically trigger a new
+-- deployment. The default value is false.
+updateStageResponse_autoDeploy :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.Bool)
+updateStageResponse_autoDeploy = Lens.lens (\UpdateStageResponse' {autoDeploy} -> autoDeploy) (\s@UpdateStageResponse' {} a -> s {autoDeploy = a} :: UpdateStageResponse)
+
+-- | The identifier of a client certificate for a Stage. Supported only for
+-- WebSocket APIs.
+updateStageResponse_clientCertificateId :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.Text)
+updateStageResponse_clientCertificateId = Lens.lens (\UpdateStageResponse' {clientCertificateId} -> clientCertificateId) (\s@UpdateStageResponse' {} a -> s {clientCertificateId = a} :: UpdateStageResponse)
+
+-- | The timestamp when the stage was created.
+updateStageResponse_createdDate :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.UTCTime)
+updateStageResponse_createdDate = Lens.lens (\UpdateStageResponse' {createdDate} -> createdDate) (\s@UpdateStageResponse' {} a -> s {createdDate = a} :: UpdateStageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Default route settings for the stage.
+updateStageResponse_defaultRouteSettings :: Lens.Lens' UpdateStageResponse (Prelude.Maybe RouteSettings)
+updateStageResponse_defaultRouteSettings = Lens.lens (\UpdateStageResponse' {defaultRouteSettings} -> defaultRouteSettings) (\s@UpdateStageResponse' {} a -> s {defaultRouteSettings = a} :: UpdateStageResponse)
+
+-- | The identifier of the Deployment that the Stage is associated with.
+-- Can\'t be updated if autoDeploy is enabled.
+updateStageResponse_deploymentId :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.Text)
+updateStageResponse_deploymentId = Lens.lens (\UpdateStageResponse' {deploymentId} -> deploymentId) (\s@UpdateStageResponse' {} a -> s {deploymentId = a} :: UpdateStageResponse)
+
+-- | The description of the stage.
+updateStageResponse_description :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.Text)
+updateStageResponse_description = Lens.lens (\UpdateStageResponse' {description} -> description) (\s@UpdateStageResponse' {} a -> s {description = a} :: UpdateStageResponse)
+
+-- | Describes the status of the last deployment of a stage. Supported only
+-- for stages with autoDeploy enabled.
+updateStageResponse_lastDeploymentStatusMessage :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.Text)
+updateStageResponse_lastDeploymentStatusMessage = Lens.lens (\UpdateStageResponse' {lastDeploymentStatusMessage} -> lastDeploymentStatusMessage) (\s@UpdateStageResponse' {} a -> s {lastDeploymentStatusMessage = a} :: UpdateStageResponse)
+
+-- | The timestamp when the stage was last updated.
+updateStageResponse_lastUpdatedDate :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.UTCTime)
+updateStageResponse_lastUpdatedDate = Lens.lens (\UpdateStageResponse' {lastUpdatedDate} -> lastUpdatedDate) (\s@UpdateStageResponse' {} a -> s {lastUpdatedDate = a} :: UpdateStageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Route settings for the stage, by routeKey.
+updateStageResponse_routeSettings :: Lens.Lens' UpdateStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text RouteSettings))
+updateStageResponse_routeSettings = Lens.lens (\UpdateStageResponse' {routeSettings} -> routeSettings) (\s@UpdateStageResponse' {} a -> s {routeSettings = a} :: UpdateStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the stage.
+updateStageResponse_stageName :: Lens.Lens' UpdateStageResponse (Prelude.Maybe Prelude.Text)
+updateStageResponse_stageName = Lens.lens (\UpdateStageResponse' {stageName} -> stageName) (\s@UpdateStageResponse' {} a -> s {stageName = a} :: UpdateStageResponse)
+
+-- | A map that defines the stage variables for a stage resource. Variable
+-- names can have alphanumeric and underscore characters, and the values
+-- must match [A-Za-z0-9-._~:\/?#&=,]+.
+updateStageResponse_stageVariables :: Lens.Lens' UpdateStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateStageResponse_stageVariables = Lens.lens (\UpdateStageResponse' {stageVariables} -> stageVariables) (\s@UpdateStageResponse' {} a -> s {stageVariables = a} :: UpdateStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The collection of tags. Each tag element is associated with a given
+-- resource.
+updateStageResponse_tags :: Lens.Lens' UpdateStageResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateStageResponse_tags = Lens.lens (\UpdateStageResponse' {tags} -> tags) (\s@UpdateStageResponse' {} a -> s {tags = a} :: UpdateStageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateStageResponse_httpStatus :: Lens.Lens' UpdateStageResponse Prelude.Int
+updateStageResponse_httpStatus = Lens.lens (\UpdateStageResponse' {httpStatus} -> httpStatus) (\s@UpdateStageResponse' {} a -> s {httpStatus = a} :: UpdateStageResponse)
+
+instance Prelude.NFData UpdateStageResponse where
+  rnf UpdateStageResponse' {..} =
+    Prelude.rnf accessLogSettings
+      `Prelude.seq` Prelude.rnf apiGatewayManaged
+      `Prelude.seq` Prelude.rnf autoDeploy
+      `Prelude.seq` Prelude.rnf clientCertificateId
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf defaultRouteSettings
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastDeploymentStatusMessage
+      `Prelude.seq` Prelude.rnf lastUpdatedDate
+      `Prelude.seq` Prelude.rnf routeSettings
+      `Prelude.seq` Prelude.rnf stageName
+      `Prelude.seq` Prelude.rnf stageVariables
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/UpdateVpcLink.hs b/gen/Amazonka/ApiGatewayV2/UpdateVpcLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/UpdateVpcLink.hs
@@ -0,0 +1,283 @@
+{-# 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.ApiGatewayV2.UpdateVpcLink
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a VPC link.
+module Amazonka.ApiGatewayV2.UpdateVpcLink
+  ( -- * Creating a Request
+    UpdateVpcLink (..),
+    newUpdateVpcLink,
+
+    -- * Request Lenses
+    updateVpcLink_name,
+    updateVpcLink_vpcLinkId,
+
+    -- * Destructuring the Response
+    UpdateVpcLinkResponse (..),
+    newUpdateVpcLinkResponse,
+
+    -- * Response Lenses
+    updateVpcLinkResponse_createdDate,
+    updateVpcLinkResponse_name,
+    updateVpcLinkResponse_securityGroupIds,
+    updateVpcLinkResponse_subnetIds,
+    updateVpcLinkResponse_tags,
+    updateVpcLinkResponse_vpcLinkId,
+    updateVpcLinkResponse_vpcLinkStatus,
+    updateVpcLinkResponse_vpcLinkStatusMessage,
+    updateVpcLinkResponse_vpcLinkVersion,
+    updateVpcLinkResponse_httpStatus,
+  )
+where
+
+import Amazonka.ApiGatewayV2.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Updates a VPC link.
+--
+-- /See:/ 'newUpdateVpcLink' smart constructor.
+data UpdateVpcLink = UpdateVpcLink'
+  { -- | The name of the VPC link.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC link.
+    vpcLinkId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVpcLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateVpcLink_name' - The name of the VPC link.
+--
+-- 'vpcLinkId', 'updateVpcLink_vpcLinkId' - The ID of the VPC link.
+newUpdateVpcLink ::
+  -- | 'vpcLinkId'
+  Prelude.Text ->
+  UpdateVpcLink
+newUpdateVpcLink pVpcLinkId_ =
+  UpdateVpcLink'
+    { name = Prelude.Nothing,
+      vpcLinkId = pVpcLinkId_
+    }
+
+-- | The name of the VPC link.
+updateVpcLink_name :: Lens.Lens' UpdateVpcLink (Prelude.Maybe Prelude.Text)
+updateVpcLink_name = Lens.lens (\UpdateVpcLink' {name} -> name) (\s@UpdateVpcLink' {} a -> s {name = a} :: UpdateVpcLink)
+
+-- | The ID of the VPC link.
+updateVpcLink_vpcLinkId :: Lens.Lens' UpdateVpcLink Prelude.Text
+updateVpcLink_vpcLinkId = Lens.lens (\UpdateVpcLink' {vpcLinkId} -> vpcLinkId) (\s@UpdateVpcLink' {} a -> s {vpcLinkId = a} :: UpdateVpcLink)
+
+instance Core.AWSRequest UpdateVpcLink where
+  type
+    AWSResponse UpdateVpcLink =
+      UpdateVpcLinkResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateVpcLinkResponse'
+            Prelude.<$> (x Data..?> "createdDate")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> ( x
+                            Data..?> "securityGroupIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "subnetIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "vpcLinkId")
+            Prelude.<*> (x Data..?> "vpcLinkStatus")
+            Prelude.<*> (x Data..?> "vpcLinkStatusMessage")
+            Prelude.<*> (x Data..?> "vpcLinkVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateVpcLink where
+  hashWithSalt _salt UpdateVpcLink' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` vpcLinkId
+
+instance Prelude.NFData UpdateVpcLink where
+  rnf UpdateVpcLink' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf vpcLinkId
+
+instance Data.ToHeaders UpdateVpcLink where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateVpcLink where
+  toJSON UpdateVpcLink' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("name" Data..=) Prelude.<$> name]
+      )
+
+instance Data.ToPath UpdateVpcLink where
+  toPath UpdateVpcLink' {..} =
+    Prelude.mconcat
+      ["/v2/vpclinks/", Data.toBS vpcLinkId]
+
+instance Data.ToQuery UpdateVpcLink where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateVpcLinkResponse' smart constructor.
+data UpdateVpcLinkResponse = UpdateVpcLinkResponse'
+  { -- | The timestamp when the VPC link was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the VPC link.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of security group IDs for the VPC link.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | A list of subnet IDs to include in the VPC link.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | Tags for the VPC link.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ID of the VPC link.
+    vpcLinkId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the VPC link.
+    vpcLinkStatus :: Prelude.Maybe VpcLinkStatus,
+    -- | A message summarizing the cause of the status of the VPC link.
+    vpcLinkStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The version of the VPC link.
+    vpcLinkVersion :: Prelude.Maybe VpcLinkVersion,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVpcLinkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'updateVpcLinkResponse_createdDate' - The timestamp when the VPC link was created.
+--
+-- 'name', 'updateVpcLinkResponse_name' - The name of the VPC link.
+--
+-- 'securityGroupIds', 'updateVpcLinkResponse_securityGroupIds' - A list of security group IDs for the VPC link.
+--
+-- 'subnetIds', 'updateVpcLinkResponse_subnetIds' - A list of subnet IDs to include in the VPC link.
+--
+-- 'tags', 'updateVpcLinkResponse_tags' - Tags for the VPC link.
+--
+-- 'vpcLinkId', 'updateVpcLinkResponse_vpcLinkId' - The ID of the VPC link.
+--
+-- 'vpcLinkStatus', 'updateVpcLinkResponse_vpcLinkStatus' - The status of the VPC link.
+--
+-- 'vpcLinkStatusMessage', 'updateVpcLinkResponse_vpcLinkStatusMessage' - A message summarizing the cause of the status of the VPC link.
+--
+-- 'vpcLinkVersion', 'updateVpcLinkResponse_vpcLinkVersion' - The version of the VPC link.
+--
+-- 'httpStatus', 'updateVpcLinkResponse_httpStatus' - The response's http status code.
+newUpdateVpcLinkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateVpcLinkResponse
+newUpdateVpcLinkResponse pHttpStatus_ =
+  UpdateVpcLinkResponse'
+    { createdDate =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcLinkId = Prelude.Nothing,
+      vpcLinkStatus = Prelude.Nothing,
+      vpcLinkStatusMessage = Prelude.Nothing,
+      vpcLinkVersion = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The timestamp when the VPC link was created.
+updateVpcLinkResponse_createdDate :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe Prelude.UTCTime)
+updateVpcLinkResponse_createdDate = Lens.lens (\UpdateVpcLinkResponse' {createdDate} -> createdDate) (\s@UpdateVpcLinkResponse' {} a -> s {createdDate = a} :: UpdateVpcLinkResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the VPC link.
+updateVpcLinkResponse_name :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe Prelude.Text)
+updateVpcLinkResponse_name = Lens.lens (\UpdateVpcLinkResponse' {name} -> name) (\s@UpdateVpcLinkResponse' {} a -> s {name = a} :: UpdateVpcLinkResponse)
+
+-- | A list of security group IDs for the VPC link.
+updateVpcLinkResponse_securityGroupIds :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe [Prelude.Text])
+updateVpcLinkResponse_securityGroupIds = Lens.lens (\UpdateVpcLinkResponse' {securityGroupIds} -> securityGroupIds) (\s@UpdateVpcLinkResponse' {} a -> s {securityGroupIds = a} :: UpdateVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of subnet IDs to include in the VPC link.
+updateVpcLinkResponse_subnetIds :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe [Prelude.Text])
+updateVpcLinkResponse_subnetIds = Lens.lens (\UpdateVpcLinkResponse' {subnetIds} -> subnetIds) (\s@UpdateVpcLinkResponse' {} a -> s {subnetIds = a} :: UpdateVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags for the VPC link.
+updateVpcLinkResponse_tags :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateVpcLinkResponse_tags = Lens.lens (\UpdateVpcLinkResponse' {tags} -> tags) (\s@UpdateVpcLinkResponse' {} a -> s {tags = a} :: UpdateVpcLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC link.
+updateVpcLinkResponse_vpcLinkId :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe Prelude.Text)
+updateVpcLinkResponse_vpcLinkId = Lens.lens (\UpdateVpcLinkResponse' {vpcLinkId} -> vpcLinkId) (\s@UpdateVpcLinkResponse' {} a -> s {vpcLinkId = a} :: UpdateVpcLinkResponse)
+
+-- | The status of the VPC link.
+updateVpcLinkResponse_vpcLinkStatus :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe VpcLinkStatus)
+updateVpcLinkResponse_vpcLinkStatus = Lens.lens (\UpdateVpcLinkResponse' {vpcLinkStatus} -> vpcLinkStatus) (\s@UpdateVpcLinkResponse' {} a -> s {vpcLinkStatus = a} :: UpdateVpcLinkResponse)
+
+-- | A message summarizing the cause of the status of the VPC link.
+updateVpcLinkResponse_vpcLinkStatusMessage :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe Prelude.Text)
+updateVpcLinkResponse_vpcLinkStatusMessage = Lens.lens (\UpdateVpcLinkResponse' {vpcLinkStatusMessage} -> vpcLinkStatusMessage) (\s@UpdateVpcLinkResponse' {} a -> s {vpcLinkStatusMessage = a} :: UpdateVpcLinkResponse)
+
+-- | The version of the VPC link.
+updateVpcLinkResponse_vpcLinkVersion :: Lens.Lens' UpdateVpcLinkResponse (Prelude.Maybe VpcLinkVersion)
+updateVpcLinkResponse_vpcLinkVersion = Lens.lens (\UpdateVpcLinkResponse' {vpcLinkVersion} -> vpcLinkVersion) (\s@UpdateVpcLinkResponse' {} a -> s {vpcLinkVersion = a} :: UpdateVpcLinkResponse)
+
+-- | The response's http status code.
+updateVpcLinkResponse_httpStatus :: Lens.Lens' UpdateVpcLinkResponse Prelude.Int
+updateVpcLinkResponse_httpStatus = Lens.lens (\UpdateVpcLinkResponse' {httpStatus} -> httpStatus) (\s@UpdateVpcLinkResponse' {} a -> s {httpStatus = a} :: UpdateVpcLinkResponse)
+
+instance Prelude.NFData UpdateVpcLinkResponse where
+  rnf UpdateVpcLinkResponse' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcLinkId
+      `Prelude.seq` Prelude.rnf vpcLinkStatus
+      `Prelude.seq` Prelude.rnf vpcLinkStatusMessage
+      `Prelude.seq` Prelude.rnf vpcLinkVersion
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ApiGatewayV2/Waiters.hs b/gen/Amazonka/ApiGatewayV2/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ApiGatewayV2/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ApiGatewayV2.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.ApiGatewayV2.Waiters where
+
+import Amazonka.ApiGatewayV2.Lens
+import Amazonka.ApiGatewayV2.Types
+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
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.ApiGatewayV2
+import Test.Amazonka.ApiGatewayV2.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ApiGatewayV2"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/ApiGatewayV2.hs b/test/Test/Amazonka/ApiGatewayV2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ApiGatewayV2.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ApiGatewayV2
+-- 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.ApiGatewayV2
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ApiGatewayV2/Internal.hs b/test/Test/Amazonka/ApiGatewayV2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ApiGatewayV2/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ApiGatewayV2.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.ApiGatewayV2.Internal where
diff --git a/test/Test/Amazonka/Gen/ApiGatewayV2.hs b/test/Test/Amazonka/Gen/ApiGatewayV2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ApiGatewayV2.hs
@@ -0,0 +1,1478 @@
+{-# 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.ApiGatewayV2
+-- 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.ApiGatewayV2 where
+
+import Amazonka.ApiGatewayV2
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.ApiGatewayV2.Internal
+import Test.Amazonka.Fixture
+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"
+--         [ requestCreateApi $
+--             newCreateApi
+--
+--         , requestCreateApiMapping $
+--             newCreateApiMapping
+--
+--         , requestCreateAuthorizer $
+--             newCreateAuthorizer
+--
+--         , requestCreateDeployment $
+--             newCreateDeployment
+--
+--         , requestCreateDomainName $
+--             newCreateDomainName
+--
+--         , requestCreateIntegration $
+--             newCreateIntegration
+--
+--         , requestCreateIntegrationResponse $
+--             newCreateIntegrationResponse
+--
+--         , requestCreateModel $
+--             newCreateModel
+--
+--         , requestCreateRoute $
+--             newCreateRoute
+--
+--         , requestCreateRouteResponse $
+--             newCreateRouteResponse
+--
+--         , requestCreateStage $
+--             newCreateStage
+--
+--         , requestCreateVpcLink $
+--             newCreateVpcLink
+--
+--         , requestDeleteAccessLogSettings $
+--             newDeleteAccessLogSettings
+--
+--         , requestDeleteApi $
+--             newDeleteApi
+--
+--         , requestDeleteApiMapping $
+--             newDeleteApiMapping
+--
+--         , requestDeleteAuthorizer $
+--             newDeleteAuthorizer
+--
+--         , requestDeleteCorsConfiguration $
+--             newDeleteCorsConfiguration
+--
+--         , requestDeleteDeployment $
+--             newDeleteDeployment
+--
+--         , requestDeleteDomainName $
+--             newDeleteDomainName
+--
+--         , requestDeleteIntegration $
+--             newDeleteIntegration
+--
+--         , requestDeleteIntegrationResponse $
+--             newDeleteIntegrationResponse
+--
+--         , requestDeleteModel $
+--             newDeleteModel
+--
+--         , requestDeleteRoute $
+--             newDeleteRoute
+--
+--         , requestDeleteRouteRequestParameter $
+--             newDeleteRouteRequestParameter
+--
+--         , requestDeleteRouteResponse $
+--             newDeleteRouteResponse
+--
+--         , requestDeleteRouteSettings $
+--             newDeleteRouteSettings
+--
+--         , requestDeleteStage $
+--             newDeleteStage
+--
+--         , requestDeleteVpcLink $
+--             newDeleteVpcLink
+--
+--         , requestExportApi $
+--             newExportApi
+--
+--         , requestGetApi $
+--             newGetApi
+--
+--         , requestGetApiMapping $
+--             newGetApiMapping
+--
+--         , requestGetApiMappings $
+--             newGetApiMappings
+--
+--         , requestGetApis $
+--             newGetApis
+--
+--         , requestGetAuthorizer $
+--             newGetAuthorizer
+--
+--         , requestGetAuthorizers $
+--             newGetAuthorizers
+--
+--         , requestGetDeployment $
+--             newGetDeployment
+--
+--         , requestGetDeployments $
+--             newGetDeployments
+--
+--         , requestGetDomainName $
+--             newGetDomainName
+--
+--         , requestGetDomainNames $
+--             newGetDomainNames
+--
+--         , requestGetIntegration $
+--             newGetIntegration
+--
+--         , requestGetIntegrationResponse $
+--             newGetIntegrationResponse
+--
+--         , requestGetIntegrationResponses $
+--             newGetIntegrationResponses
+--
+--         , requestGetIntegrations $
+--             newGetIntegrations
+--
+--         , requestGetModel $
+--             newGetModel
+--
+--         , requestGetModelTemplate $
+--             newGetModelTemplate
+--
+--         , requestGetModels $
+--             newGetModels
+--
+--         , requestGetRoute $
+--             newGetRoute
+--
+--         , requestGetRouteResponse $
+--             newGetRouteResponse
+--
+--         , requestGetRouteResponses $
+--             newGetRouteResponses
+--
+--         , requestGetRoutes $
+--             newGetRoutes
+--
+--         , requestGetStage $
+--             newGetStage
+--
+--         , requestGetStages $
+--             newGetStages
+--
+--         , requestGetTags $
+--             newGetTags
+--
+--         , requestGetVpcLink $
+--             newGetVpcLink
+--
+--         , requestGetVpcLinks $
+--             newGetVpcLinks
+--
+--         , requestImportApi $
+--             newImportApi
+--
+--         , requestReimportApi $
+--             newReimportApi
+--
+--         , requestResetAuthorizersCache $
+--             newResetAuthorizersCache
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApi $
+--             newUpdateApi
+--
+--         , requestUpdateApiMapping $
+--             newUpdateApiMapping
+--
+--         , requestUpdateAuthorizer $
+--             newUpdateAuthorizer
+--
+--         , requestUpdateDeployment $
+--             newUpdateDeployment
+--
+--         , requestUpdateDomainName $
+--             newUpdateDomainName
+--
+--         , requestUpdateIntegration $
+--             newUpdateIntegration
+--
+--         , requestUpdateIntegrationResponse $
+--             newUpdateIntegrationResponse
+--
+--         , requestUpdateModel $
+--             newUpdateModel
+--
+--         , requestUpdateRoute $
+--             newUpdateRoute
+--
+--         , requestUpdateRouteResponse $
+--             newUpdateRouteResponse
+--
+--         , requestUpdateStage $
+--             newUpdateStage
+--
+--         , requestUpdateVpcLink $
+--             newUpdateVpcLink
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateApi $
+--             newCreateApiResponse
+--
+--         , responseCreateApiMapping $
+--             newCreateApiMappingResponse
+--
+--         , responseCreateAuthorizer $
+--             newCreateAuthorizerResponse
+--
+--         , responseCreateDeployment $
+--             newCreateDeploymentResponse
+--
+--         , responseCreateDomainName $
+--             newCreateDomainNameResponse
+--
+--         , responseCreateIntegration $
+--             newCreateIntegrationResponse'
+--
+--         , responseCreateIntegrationResponse $
+--             newCreateIntegrationResponseResponse
+--
+--         , responseCreateModel $
+--             newCreateModelResponse
+--
+--         , responseCreateRoute $
+--             newCreateRouteResponse'
+--
+--         , responseCreateRouteResponse $
+--             newCreateRouteResponseResponse
+--
+--         , responseCreateStage $
+--             newCreateStageResponse
+--
+--         , responseCreateVpcLink $
+--             newCreateVpcLinkResponse
+--
+--         , responseDeleteAccessLogSettings $
+--             newDeleteAccessLogSettingsResponse
+--
+--         , responseDeleteApi $
+--             newDeleteApiResponse
+--
+--         , responseDeleteApiMapping $
+--             newDeleteApiMappingResponse
+--
+--         , responseDeleteAuthorizer $
+--             newDeleteAuthorizerResponse
+--
+--         , responseDeleteCorsConfiguration $
+--             newDeleteCorsConfigurationResponse
+--
+--         , responseDeleteDeployment $
+--             newDeleteDeploymentResponse
+--
+--         , responseDeleteDomainName $
+--             newDeleteDomainNameResponse
+--
+--         , responseDeleteIntegration $
+--             newDeleteIntegrationResponse'
+--
+--         , responseDeleteIntegrationResponse $
+--             newDeleteIntegrationResponseResponse
+--
+--         , responseDeleteModel $
+--             newDeleteModelResponse
+--
+--         , responseDeleteRoute $
+--             newDeleteRouteResponse'
+--
+--         , responseDeleteRouteRequestParameter $
+--             newDeleteRouteRequestParameterResponse
+--
+--         , responseDeleteRouteResponse $
+--             newDeleteRouteResponseResponse
+--
+--         , responseDeleteRouteSettings $
+--             newDeleteRouteSettingsResponse
+--
+--         , responseDeleteStage $
+--             newDeleteStageResponse
+--
+--         , responseDeleteVpcLink $
+--             newDeleteVpcLinkResponse
+--
+--         , responseExportApi $
+--             newExportApiResponse
+--
+--         , responseGetApi $
+--             newGetApiResponse
+--
+--         , responseGetApiMapping $
+--             newGetApiMappingResponse
+--
+--         , responseGetApiMappings $
+--             newGetApiMappingsResponse
+--
+--         , responseGetApis $
+--             newGetApisResponse
+--
+--         , responseGetAuthorizer $
+--             newGetAuthorizerResponse
+--
+--         , responseGetAuthorizers $
+--             newGetAuthorizersResponse
+--
+--         , responseGetDeployment $
+--             newGetDeploymentResponse
+--
+--         , responseGetDeployments $
+--             newGetDeploymentsResponse
+--
+--         , responseGetDomainName $
+--             newGetDomainNameResponse
+--
+--         , responseGetDomainNames $
+--             newGetDomainNamesResponse
+--
+--         , responseGetIntegration $
+--             newGetIntegrationResponse'
+--
+--         , responseGetIntegrationResponse $
+--             newGetIntegrationResponseResponse
+--
+--         , responseGetIntegrationResponses $
+--             newGetIntegrationResponsesResponse
+--
+--         , responseGetIntegrations $
+--             newGetIntegrationsResponse
+--
+--         , responseGetModel $
+--             newGetModelResponse
+--
+--         , responseGetModelTemplate $
+--             newGetModelTemplateResponse
+--
+--         , responseGetModels $
+--             newGetModelsResponse
+--
+--         , responseGetRoute $
+--             newGetRouteResponse'
+--
+--         , responseGetRouteResponse $
+--             newGetRouteResponseResponse
+--
+--         , responseGetRouteResponses $
+--             newGetRouteResponsesResponse
+--
+--         , responseGetRoutes $
+--             newGetRoutesResponse
+--
+--         , responseGetStage $
+--             newGetStageResponse
+--
+--         , responseGetStages $
+--             newGetStagesResponse
+--
+--         , responseGetTags $
+--             newGetTagsResponse
+--
+--         , responseGetVpcLink $
+--             newGetVpcLinkResponse
+--
+--         , responseGetVpcLinks $
+--             newGetVpcLinksResponse
+--
+--         , responseImportApi $
+--             newImportApiResponse
+--
+--         , responseReimportApi $
+--             newReimportApiResponse
+--
+--         , responseResetAuthorizersCache $
+--             newResetAuthorizersCacheResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApi $
+--             newUpdateApiResponse
+--
+--         , responseUpdateApiMapping $
+--             newUpdateApiMappingResponse
+--
+--         , responseUpdateAuthorizer $
+--             newUpdateAuthorizerResponse
+--
+--         , responseUpdateDeployment $
+--             newUpdateDeploymentResponse
+--
+--         , responseUpdateDomainName $
+--             newUpdateDomainNameResponse
+--
+--         , responseUpdateIntegration $
+--             newUpdateIntegrationResponse'
+--
+--         , responseUpdateIntegrationResponse $
+--             newUpdateIntegrationResponseResponse
+--
+--         , responseUpdateModel $
+--             newUpdateModelResponse
+--
+--         , responseUpdateRoute $
+--             newUpdateRouteResponse'
+--
+--         , responseUpdateRouteResponse $
+--             newUpdateRouteResponseResponse
+--
+--         , responseUpdateStage $
+--             newUpdateStageResponse
+--
+--         , responseUpdateVpcLink $
+--             newUpdateVpcLinkResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateApi :: CreateApi -> TestTree
+requestCreateApi =
+  req
+    "CreateApi"
+    "fixture/CreateApi.yaml"
+
+requestCreateApiMapping :: CreateApiMapping -> TestTree
+requestCreateApiMapping =
+  req
+    "CreateApiMapping"
+    "fixture/CreateApiMapping.yaml"
+
+requestCreateAuthorizer :: CreateAuthorizer -> TestTree
+requestCreateAuthorizer =
+  req
+    "CreateAuthorizer"
+    "fixture/CreateAuthorizer.yaml"
+
+requestCreateDeployment :: CreateDeployment -> TestTree
+requestCreateDeployment =
+  req
+    "CreateDeployment"
+    "fixture/CreateDeployment.yaml"
+
+requestCreateDomainName :: CreateDomainName -> TestTree
+requestCreateDomainName =
+  req
+    "CreateDomainName"
+    "fixture/CreateDomainName.yaml"
+
+requestCreateIntegration :: CreateIntegration -> TestTree
+requestCreateIntegration =
+  req
+    "CreateIntegration"
+    "fixture/CreateIntegration.yaml"
+
+requestCreateIntegrationResponse :: CreateIntegrationResponse -> TestTree
+requestCreateIntegrationResponse =
+  req
+    "CreateIntegrationResponse"
+    "fixture/CreateIntegrationResponse.yaml"
+
+requestCreateModel :: CreateModel -> TestTree
+requestCreateModel =
+  req
+    "CreateModel"
+    "fixture/CreateModel.yaml"
+
+requestCreateRoute :: CreateRoute -> TestTree
+requestCreateRoute =
+  req
+    "CreateRoute"
+    "fixture/CreateRoute.yaml"
+
+requestCreateRouteResponse :: CreateRouteResponse -> TestTree
+requestCreateRouteResponse =
+  req
+    "CreateRouteResponse"
+    "fixture/CreateRouteResponse.yaml"
+
+requestCreateStage :: CreateStage -> TestTree
+requestCreateStage =
+  req
+    "CreateStage"
+    "fixture/CreateStage.yaml"
+
+requestCreateVpcLink :: CreateVpcLink -> TestTree
+requestCreateVpcLink =
+  req
+    "CreateVpcLink"
+    "fixture/CreateVpcLink.yaml"
+
+requestDeleteAccessLogSettings :: DeleteAccessLogSettings -> TestTree
+requestDeleteAccessLogSettings =
+  req
+    "DeleteAccessLogSettings"
+    "fixture/DeleteAccessLogSettings.yaml"
+
+requestDeleteApi :: DeleteApi -> TestTree
+requestDeleteApi =
+  req
+    "DeleteApi"
+    "fixture/DeleteApi.yaml"
+
+requestDeleteApiMapping :: DeleteApiMapping -> TestTree
+requestDeleteApiMapping =
+  req
+    "DeleteApiMapping"
+    "fixture/DeleteApiMapping.yaml"
+
+requestDeleteAuthorizer :: DeleteAuthorizer -> TestTree
+requestDeleteAuthorizer =
+  req
+    "DeleteAuthorizer"
+    "fixture/DeleteAuthorizer.yaml"
+
+requestDeleteCorsConfiguration :: DeleteCorsConfiguration -> TestTree
+requestDeleteCorsConfiguration =
+  req
+    "DeleteCorsConfiguration"
+    "fixture/DeleteCorsConfiguration.yaml"
+
+requestDeleteDeployment :: DeleteDeployment -> TestTree
+requestDeleteDeployment =
+  req
+    "DeleteDeployment"
+    "fixture/DeleteDeployment.yaml"
+
+requestDeleteDomainName :: DeleteDomainName -> TestTree
+requestDeleteDomainName =
+  req
+    "DeleteDomainName"
+    "fixture/DeleteDomainName.yaml"
+
+requestDeleteIntegration :: DeleteIntegration -> TestTree
+requestDeleteIntegration =
+  req
+    "DeleteIntegration"
+    "fixture/DeleteIntegration.yaml"
+
+requestDeleteIntegrationResponse :: DeleteIntegrationResponse -> TestTree
+requestDeleteIntegrationResponse =
+  req
+    "DeleteIntegrationResponse"
+    "fixture/DeleteIntegrationResponse.yaml"
+
+requestDeleteModel :: DeleteModel -> TestTree
+requestDeleteModel =
+  req
+    "DeleteModel"
+    "fixture/DeleteModel.yaml"
+
+requestDeleteRoute :: DeleteRoute -> TestTree
+requestDeleteRoute =
+  req
+    "DeleteRoute"
+    "fixture/DeleteRoute.yaml"
+
+requestDeleteRouteRequestParameter :: DeleteRouteRequestParameter -> TestTree
+requestDeleteRouteRequestParameter =
+  req
+    "DeleteRouteRequestParameter"
+    "fixture/DeleteRouteRequestParameter.yaml"
+
+requestDeleteRouteResponse :: DeleteRouteResponse -> TestTree
+requestDeleteRouteResponse =
+  req
+    "DeleteRouteResponse"
+    "fixture/DeleteRouteResponse.yaml"
+
+requestDeleteRouteSettings :: DeleteRouteSettings -> TestTree
+requestDeleteRouteSettings =
+  req
+    "DeleteRouteSettings"
+    "fixture/DeleteRouteSettings.yaml"
+
+requestDeleteStage :: DeleteStage -> TestTree
+requestDeleteStage =
+  req
+    "DeleteStage"
+    "fixture/DeleteStage.yaml"
+
+requestDeleteVpcLink :: DeleteVpcLink -> TestTree
+requestDeleteVpcLink =
+  req
+    "DeleteVpcLink"
+    "fixture/DeleteVpcLink.yaml"
+
+requestExportApi :: ExportApi -> TestTree
+requestExportApi =
+  req
+    "ExportApi"
+    "fixture/ExportApi.yaml"
+
+requestGetApi :: GetApi -> TestTree
+requestGetApi =
+  req
+    "GetApi"
+    "fixture/GetApi.yaml"
+
+requestGetApiMapping :: GetApiMapping -> TestTree
+requestGetApiMapping =
+  req
+    "GetApiMapping"
+    "fixture/GetApiMapping.yaml"
+
+requestGetApiMappings :: GetApiMappings -> TestTree
+requestGetApiMappings =
+  req
+    "GetApiMappings"
+    "fixture/GetApiMappings.yaml"
+
+requestGetApis :: GetApis -> TestTree
+requestGetApis =
+  req
+    "GetApis"
+    "fixture/GetApis.yaml"
+
+requestGetAuthorizer :: GetAuthorizer -> TestTree
+requestGetAuthorizer =
+  req
+    "GetAuthorizer"
+    "fixture/GetAuthorizer.yaml"
+
+requestGetAuthorizers :: GetAuthorizers -> TestTree
+requestGetAuthorizers =
+  req
+    "GetAuthorizers"
+    "fixture/GetAuthorizers.yaml"
+
+requestGetDeployment :: GetDeployment -> TestTree
+requestGetDeployment =
+  req
+    "GetDeployment"
+    "fixture/GetDeployment.yaml"
+
+requestGetDeployments :: GetDeployments -> TestTree
+requestGetDeployments =
+  req
+    "GetDeployments"
+    "fixture/GetDeployments.yaml"
+
+requestGetDomainName :: GetDomainName -> TestTree
+requestGetDomainName =
+  req
+    "GetDomainName"
+    "fixture/GetDomainName.yaml"
+
+requestGetDomainNames :: GetDomainNames -> TestTree
+requestGetDomainNames =
+  req
+    "GetDomainNames"
+    "fixture/GetDomainNames.yaml"
+
+requestGetIntegration :: GetIntegration -> TestTree
+requestGetIntegration =
+  req
+    "GetIntegration"
+    "fixture/GetIntegration.yaml"
+
+requestGetIntegrationResponse :: GetIntegrationResponse -> TestTree
+requestGetIntegrationResponse =
+  req
+    "GetIntegrationResponse"
+    "fixture/GetIntegrationResponse.yaml"
+
+requestGetIntegrationResponses :: GetIntegrationResponses -> TestTree
+requestGetIntegrationResponses =
+  req
+    "GetIntegrationResponses"
+    "fixture/GetIntegrationResponses.yaml"
+
+requestGetIntegrations :: GetIntegrations -> TestTree
+requestGetIntegrations =
+  req
+    "GetIntegrations"
+    "fixture/GetIntegrations.yaml"
+
+requestGetModel :: GetModel -> TestTree
+requestGetModel =
+  req
+    "GetModel"
+    "fixture/GetModel.yaml"
+
+requestGetModelTemplate :: GetModelTemplate -> TestTree
+requestGetModelTemplate =
+  req
+    "GetModelTemplate"
+    "fixture/GetModelTemplate.yaml"
+
+requestGetModels :: GetModels -> TestTree
+requestGetModels =
+  req
+    "GetModels"
+    "fixture/GetModels.yaml"
+
+requestGetRoute :: GetRoute -> TestTree
+requestGetRoute =
+  req
+    "GetRoute"
+    "fixture/GetRoute.yaml"
+
+requestGetRouteResponse :: GetRouteResponse -> TestTree
+requestGetRouteResponse =
+  req
+    "GetRouteResponse"
+    "fixture/GetRouteResponse.yaml"
+
+requestGetRouteResponses :: GetRouteResponses -> TestTree
+requestGetRouteResponses =
+  req
+    "GetRouteResponses"
+    "fixture/GetRouteResponses.yaml"
+
+requestGetRoutes :: GetRoutes -> TestTree
+requestGetRoutes =
+  req
+    "GetRoutes"
+    "fixture/GetRoutes.yaml"
+
+requestGetStage :: GetStage -> TestTree
+requestGetStage =
+  req
+    "GetStage"
+    "fixture/GetStage.yaml"
+
+requestGetStages :: GetStages -> TestTree
+requestGetStages =
+  req
+    "GetStages"
+    "fixture/GetStages.yaml"
+
+requestGetTags :: GetTags -> TestTree
+requestGetTags =
+  req
+    "GetTags"
+    "fixture/GetTags.yaml"
+
+requestGetVpcLink :: GetVpcLink -> TestTree
+requestGetVpcLink =
+  req
+    "GetVpcLink"
+    "fixture/GetVpcLink.yaml"
+
+requestGetVpcLinks :: GetVpcLinks -> TestTree
+requestGetVpcLinks =
+  req
+    "GetVpcLinks"
+    "fixture/GetVpcLinks.yaml"
+
+requestImportApi :: ImportApi -> TestTree
+requestImportApi =
+  req
+    "ImportApi"
+    "fixture/ImportApi.yaml"
+
+requestReimportApi :: ReimportApi -> TestTree
+requestReimportApi =
+  req
+    "ReimportApi"
+    "fixture/ReimportApi.yaml"
+
+requestResetAuthorizersCache :: ResetAuthorizersCache -> TestTree
+requestResetAuthorizersCache =
+  req
+    "ResetAuthorizersCache"
+    "fixture/ResetAuthorizersCache.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApi :: UpdateApi -> TestTree
+requestUpdateApi =
+  req
+    "UpdateApi"
+    "fixture/UpdateApi.yaml"
+
+requestUpdateApiMapping :: UpdateApiMapping -> TestTree
+requestUpdateApiMapping =
+  req
+    "UpdateApiMapping"
+    "fixture/UpdateApiMapping.yaml"
+
+requestUpdateAuthorizer :: UpdateAuthorizer -> TestTree
+requestUpdateAuthorizer =
+  req
+    "UpdateAuthorizer"
+    "fixture/UpdateAuthorizer.yaml"
+
+requestUpdateDeployment :: UpdateDeployment -> TestTree
+requestUpdateDeployment =
+  req
+    "UpdateDeployment"
+    "fixture/UpdateDeployment.yaml"
+
+requestUpdateDomainName :: UpdateDomainName -> TestTree
+requestUpdateDomainName =
+  req
+    "UpdateDomainName"
+    "fixture/UpdateDomainName.yaml"
+
+requestUpdateIntegration :: UpdateIntegration -> TestTree
+requestUpdateIntegration =
+  req
+    "UpdateIntegration"
+    "fixture/UpdateIntegration.yaml"
+
+requestUpdateIntegrationResponse :: UpdateIntegrationResponse -> TestTree
+requestUpdateIntegrationResponse =
+  req
+    "UpdateIntegrationResponse"
+    "fixture/UpdateIntegrationResponse.yaml"
+
+requestUpdateModel :: UpdateModel -> TestTree
+requestUpdateModel =
+  req
+    "UpdateModel"
+    "fixture/UpdateModel.yaml"
+
+requestUpdateRoute :: UpdateRoute -> TestTree
+requestUpdateRoute =
+  req
+    "UpdateRoute"
+    "fixture/UpdateRoute.yaml"
+
+requestUpdateRouteResponse :: UpdateRouteResponse -> TestTree
+requestUpdateRouteResponse =
+  req
+    "UpdateRouteResponse"
+    "fixture/UpdateRouteResponse.yaml"
+
+requestUpdateStage :: UpdateStage -> TestTree
+requestUpdateStage =
+  req
+    "UpdateStage"
+    "fixture/UpdateStage.yaml"
+
+requestUpdateVpcLink :: UpdateVpcLink -> TestTree
+requestUpdateVpcLink =
+  req
+    "UpdateVpcLink"
+    "fixture/UpdateVpcLink.yaml"
+
+-- Responses
+
+responseCreateApi :: CreateApiResponse -> TestTree
+responseCreateApi =
+  res
+    "CreateApiResponse"
+    "fixture/CreateApiResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApi)
+
+responseCreateApiMapping :: CreateApiMappingResponse -> TestTree
+responseCreateApiMapping =
+  res
+    "CreateApiMappingResponse"
+    "fixture/CreateApiMappingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApiMapping)
+
+responseCreateAuthorizer :: CreateAuthorizerResponse -> TestTree
+responseCreateAuthorizer =
+  res
+    "CreateAuthorizerResponse"
+    "fixture/CreateAuthorizerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAuthorizer)
+
+responseCreateDeployment :: CreateDeploymentResponse -> TestTree
+responseCreateDeployment =
+  res
+    "CreateDeploymentResponse"
+    "fixture/CreateDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDeployment)
+
+responseCreateDomainName :: CreateDomainNameResponse -> TestTree
+responseCreateDomainName =
+  res
+    "CreateDomainNameResponse"
+    "fixture/CreateDomainNameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDomainName)
+
+responseCreateIntegration :: CreateIntegrationResponse' -> TestTree
+responseCreateIntegration =
+  res
+    "CreateIntegrationResponse"
+    "fixture/CreateIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIntegration)
+
+responseCreateIntegrationResponse :: CreateIntegrationResponseResponse -> TestTree
+responseCreateIntegrationResponse =
+  res
+    "CreateIntegrationResponseResponse"
+    "fixture/CreateIntegrationResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIntegrationResponse)
+
+responseCreateModel :: CreateModelResponse -> TestTree
+responseCreateModel =
+  res
+    "CreateModelResponse"
+    "fixture/CreateModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateModel)
+
+responseCreateRoute :: CreateRouteResponse' -> TestTree
+responseCreateRoute =
+  res
+    "CreateRouteResponse"
+    "fixture/CreateRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRoute)
+
+responseCreateRouteResponse :: CreateRouteResponseResponse -> TestTree
+responseCreateRouteResponse =
+  res
+    "CreateRouteResponseResponse"
+    "fixture/CreateRouteResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRouteResponse)
+
+responseCreateStage :: CreateStageResponse -> TestTree
+responseCreateStage =
+  res
+    "CreateStageResponse"
+    "fixture/CreateStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStage)
+
+responseCreateVpcLink :: CreateVpcLinkResponse -> TestTree
+responseCreateVpcLink =
+  res
+    "CreateVpcLinkResponse"
+    "fixture/CreateVpcLinkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcLink)
+
+responseDeleteAccessLogSettings :: DeleteAccessLogSettingsResponse -> TestTree
+responseDeleteAccessLogSettings =
+  res
+    "DeleteAccessLogSettingsResponse"
+    "fixture/DeleteAccessLogSettingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAccessLogSettings)
+
+responseDeleteApi :: DeleteApiResponse -> TestTree
+responseDeleteApi =
+  res
+    "DeleteApiResponse"
+    "fixture/DeleteApiResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApi)
+
+responseDeleteApiMapping :: DeleteApiMappingResponse -> TestTree
+responseDeleteApiMapping =
+  res
+    "DeleteApiMappingResponse"
+    "fixture/DeleteApiMappingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApiMapping)
+
+responseDeleteAuthorizer :: DeleteAuthorizerResponse -> TestTree
+responseDeleteAuthorizer =
+  res
+    "DeleteAuthorizerResponse"
+    "fixture/DeleteAuthorizerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAuthorizer)
+
+responseDeleteCorsConfiguration :: DeleteCorsConfigurationResponse -> TestTree
+responseDeleteCorsConfiguration =
+  res
+    "DeleteCorsConfigurationResponse"
+    "fixture/DeleteCorsConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCorsConfiguration)
+
+responseDeleteDeployment :: DeleteDeploymentResponse -> TestTree
+responseDeleteDeployment =
+  res
+    "DeleteDeploymentResponse"
+    "fixture/DeleteDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDeployment)
+
+responseDeleteDomainName :: DeleteDomainNameResponse -> TestTree
+responseDeleteDomainName =
+  res
+    "DeleteDomainNameResponse"
+    "fixture/DeleteDomainNameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDomainName)
+
+responseDeleteIntegration :: DeleteIntegrationResponse' -> TestTree
+responseDeleteIntegration =
+  res
+    "DeleteIntegrationResponse"
+    "fixture/DeleteIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIntegration)
+
+responseDeleteIntegrationResponse :: DeleteIntegrationResponseResponse -> TestTree
+responseDeleteIntegrationResponse =
+  res
+    "DeleteIntegrationResponseResponse"
+    "fixture/DeleteIntegrationResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIntegrationResponse)
+
+responseDeleteModel :: DeleteModelResponse -> TestTree
+responseDeleteModel =
+  res
+    "DeleteModelResponse"
+    "fixture/DeleteModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteModel)
+
+responseDeleteRoute :: DeleteRouteResponse' -> TestTree
+responseDeleteRoute =
+  res
+    "DeleteRouteResponse"
+    "fixture/DeleteRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRoute)
+
+responseDeleteRouteRequestParameter :: DeleteRouteRequestParameterResponse -> TestTree
+responseDeleteRouteRequestParameter =
+  res
+    "DeleteRouteRequestParameterResponse"
+    "fixture/DeleteRouteRequestParameterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRouteRequestParameter)
+
+responseDeleteRouteResponse :: DeleteRouteResponseResponse -> TestTree
+responseDeleteRouteResponse =
+  res
+    "DeleteRouteResponseResponse"
+    "fixture/DeleteRouteResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRouteResponse)
+
+responseDeleteRouteSettings :: DeleteRouteSettingsResponse -> TestTree
+responseDeleteRouteSettings =
+  res
+    "DeleteRouteSettingsResponse"
+    "fixture/DeleteRouteSettingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRouteSettings)
+
+responseDeleteStage :: DeleteStageResponse -> TestTree
+responseDeleteStage =
+  res
+    "DeleteStageResponse"
+    "fixture/DeleteStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStage)
+
+responseDeleteVpcLink :: DeleteVpcLinkResponse -> TestTree
+responseDeleteVpcLink =
+  res
+    "DeleteVpcLinkResponse"
+    "fixture/DeleteVpcLinkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcLink)
+
+responseExportApi :: ExportApiResponse -> TestTree
+responseExportApi =
+  res
+    "ExportApiResponse"
+    "fixture/ExportApiResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportApi)
+
+responseGetApi :: GetApiResponse -> TestTree
+responseGetApi =
+  res
+    "GetApiResponse"
+    "fixture/GetApiResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApi)
+
+responseGetApiMapping :: GetApiMappingResponse -> TestTree
+responseGetApiMapping =
+  res
+    "GetApiMappingResponse"
+    "fixture/GetApiMappingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApiMapping)
+
+responseGetApiMappings :: GetApiMappingsResponse -> TestTree
+responseGetApiMappings =
+  res
+    "GetApiMappingsResponse"
+    "fixture/GetApiMappingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApiMappings)
+
+responseGetApis :: GetApisResponse -> TestTree
+responseGetApis =
+  res
+    "GetApisResponse"
+    "fixture/GetApisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApis)
+
+responseGetAuthorizer :: GetAuthorizerResponse -> TestTree
+responseGetAuthorizer =
+  res
+    "GetAuthorizerResponse"
+    "fixture/GetAuthorizerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAuthorizer)
+
+responseGetAuthorizers :: GetAuthorizersResponse -> TestTree
+responseGetAuthorizers =
+  res
+    "GetAuthorizersResponse"
+    "fixture/GetAuthorizersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAuthorizers)
+
+responseGetDeployment :: GetDeploymentResponse -> TestTree
+responseGetDeployment =
+  res
+    "GetDeploymentResponse"
+    "fixture/GetDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeployment)
+
+responseGetDeployments :: GetDeploymentsResponse -> TestTree
+responseGetDeployments =
+  res
+    "GetDeploymentsResponse"
+    "fixture/GetDeploymentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeployments)
+
+responseGetDomainName :: GetDomainNameResponse -> TestTree
+responseGetDomainName =
+  res
+    "GetDomainNameResponse"
+    "fixture/GetDomainNameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomainName)
+
+responseGetDomainNames :: GetDomainNamesResponse -> TestTree
+responseGetDomainNames =
+  res
+    "GetDomainNamesResponse"
+    "fixture/GetDomainNamesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomainNames)
+
+responseGetIntegration :: GetIntegrationResponse' -> TestTree
+responseGetIntegration =
+  res
+    "GetIntegrationResponse"
+    "fixture/GetIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIntegration)
+
+responseGetIntegrationResponse :: GetIntegrationResponseResponse -> TestTree
+responseGetIntegrationResponse =
+  res
+    "GetIntegrationResponseResponse"
+    "fixture/GetIntegrationResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIntegrationResponse)
+
+responseGetIntegrationResponses :: GetIntegrationResponsesResponse -> TestTree
+responseGetIntegrationResponses =
+  res
+    "GetIntegrationResponsesResponse"
+    "fixture/GetIntegrationResponsesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIntegrationResponses)
+
+responseGetIntegrations :: GetIntegrationsResponse -> TestTree
+responseGetIntegrations =
+  res
+    "GetIntegrationsResponse"
+    "fixture/GetIntegrationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIntegrations)
+
+responseGetModel :: GetModelResponse -> TestTree
+responseGetModel =
+  res
+    "GetModelResponse"
+    "fixture/GetModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetModel)
+
+responseGetModelTemplate :: GetModelTemplateResponse -> TestTree
+responseGetModelTemplate =
+  res
+    "GetModelTemplateResponse"
+    "fixture/GetModelTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetModelTemplate)
+
+responseGetModels :: GetModelsResponse -> TestTree
+responseGetModels =
+  res
+    "GetModelsResponse"
+    "fixture/GetModelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetModels)
+
+responseGetRoute :: GetRouteResponse' -> TestTree
+responseGetRoute =
+  res
+    "GetRouteResponse"
+    "fixture/GetRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRoute)
+
+responseGetRouteResponse :: GetRouteResponseResponse -> TestTree
+responseGetRouteResponse =
+  res
+    "GetRouteResponseResponse"
+    "fixture/GetRouteResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRouteResponse)
+
+responseGetRouteResponses :: GetRouteResponsesResponse -> TestTree
+responseGetRouteResponses =
+  res
+    "GetRouteResponsesResponse"
+    "fixture/GetRouteResponsesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRouteResponses)
+
+responseGetRoutes :: GetRoutesResponse -> TestTree
+responseGetRoutes =
+  res
+    "GetRoutesResponse"
+    "fixture/GetRoutesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRoutes)
+
+responseGetStage :: GetStageResponse -> TestTree
+responseGetStage =
+  res
+    "GetStageResponse"
+    "fixture/GetStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStage)
+
+responseGetStages :: GetStagesResponse -> TestTree
+responseGetStages =
+  res
+    "GetStagesResponse"
+    "fixture/GetStagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStages)
+
+responseGetTags :: GetTagsResponse -> TestTree
+responseGetTags =
+  res
+    "GetTagsResponse"
+    "fixture/GetTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTags)
+
+responseGetVpcLink :: GetVpcLinkResponse -> TestTree
+responseGetVpcLink =
+  res
+    "GetVpcLinkResponse"
+    "fixture/GetVpcLinkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVpcLink)
+
+responseGetVpcLinks :: GetVpcLinksResponse -> TestTree
+responseGetVpcLinks =
+  res
+    "GetVpcLinksResponse"
+    "fixture/GetVpcLinksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVpcLinks)
+
+responseImportApi :: ImportApiResponse -> TestTree
+responseImportApi =
+  res
+    "ImportApiResponse"
+    "fixture/ImportApiResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportApi)
+
+responseReimportApi :: ReimportApiResponse -> TestTree
+responseReimportApi =
+  res
+    "ReimportApiResponse"
+    "fixture/ReimportApiResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReimportApi)
+
+responseResetAuthorizersCache :: ResetAuthorizersCacheResponse -> TestTree
+responseResetAuthorizersCache =
+  res
+    "ResetAuthorizersCacheResponse"
+    "fixture/ResetAuthorizersCacheResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetAuthorizersCache)
+
+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)
+
+responseUpdateApi :: UpdateApiResponse -> TestTree
+responseUpdateApi =
+  res
+    "UpdateApiResponse"
+    "fixture/UpdateApiResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApi)
+
+responseUpdateApiMapping :: UpdateApiMappingResponse -> TestTree
+responseUpdateApiMapping =
+  res
+    "UpdateApiMappingResponse"
+    "fixture/UpdateApiMappingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApiMapping)
+
+responseUpdateAuthorizer :: UpdateAuthorizerResponse -> TestTree
+responseUpdateAuthorizer =
+  res
+    "UpdateAuthorizerResponse"
+    "fixture/UpdateAuthorizerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAuthorizer)
+
+responseUpdateDeployment :: UpdateDeploymentResponse -> TestTree
+responseUpdateDeployment =
+  res
+    "UpdateDeploymentResponse"
+    "fixture/UpdateDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDeployment)
+
+responseUpdateDomainName :: UpdateDomainNameResponse -> TestTree
+responseUpdateDomainName =
+  res
+    "UpdateDomainNameResponse"
+    "fixture/UpdateDomainNameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDomainName)
+
+responseUpdateIntegration :: UpdateIntegrationResponse' -> TestTree
+responseUpdateIntegration =
+  res
+    "UpdateIntegrationResponse"
+    "fixture/UpdateIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateIntegration)
+
+responseUpdateIntegrationResponse :: UpdateIntegrationResponseResponse -> TestTree
+responseUpdateIntegrationResponse =
+  res
+    "UpdateIntegrationResponseResponse"
+    "fixture/UpdateIntegrationResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateIntegrationResponse)
+
+responseUpdateModel :: UpdateModelResponse -> TestTree
+responseUpdateModel =
+  res
+    "UpdateModelResponse"
+    "fixture/UpdateModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateModel)
+
+responseUpdateRoute :: UpdateRouteResponse' -> TestTree
+responseUpdateRoute =
+  res
+    "UpdateRouteResponse"
+    "fixture/UpdateRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRoute)
+
+responseUpdateRouteResponse :: UpdateRouteResponseResponse -> TestTree
+responseUpdateRouteResponse =
+  res
+    "UpdateRouteResponseResponse"
+    "fixture/UpdateRouteResponseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRouteResponse)
+
+responseUpdateStage :: UpdateStageResponse -> TestTree
+responseUpdateStage =
+  res
+    "UpdateStageResponse"
+    "fixture/UpdateStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateStage)
+
+responseUpdateVpcLink :: UpdateVpcLinkResponse -> TestTree
+responseUpdateVpcLink =
+  res
+    "UpdateVpcLinkResponse"
+    "fixture/UpdateVpcLinkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateVpcLink)
