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 GameSparks SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-08-17@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-gamesparks)
+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.GamesParks](http://hackage.haskell.org/package/amazonka-gamesparks/docs/Amazonka-GamesParks.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-gamesparks` 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-gamesparks.cabal b/amazonka-gamesparks.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-gamesparks.cabal
@@ -0,0 +1,142 @@
+cabal-version:      2.2
+name:               amazonka-gamesparks
+version:            2.0
+synopsis:           Amazon GameSparks 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 @2021-08-17@ 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.GamesParks.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.GamesParks" 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-gamesparks
+
+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.GamesParks
+    Amazonka.GamesParks.CreateGame
+    Amazonka.GamesParks.CreateSnapshot
+    Amazonka.GamesParks.CreateStage
+    Amazonka.GamesParks.DeleteGame
+    Amazonka.GamesParks.DeleteStage
+    Amazonka.GamesParks.DisconnectPlayer
+    Amazonka.GamesParks.ExportSnapshot
+    Amazonka.GamesParks.GetExtension
+    Amazonka.GamesParks.GetExtensionVersion
+    Amazonka.GamesParks.GetGame
+    Amazonka.GamesParks.GetGameConfiguration
+    Amazonka.GamesParks.GetGeneratedCodeJob
+    Amazonka.GamesParks.GetPlayerConnectionStatus
+    Amazonka.GamesParks.GetSnapshot
+    Amazonka.GamesParks.GetStage
+    Amazonka.GamesParks.GetStageDeployment
+    Amazonka.GamesParks.ImportGameConfiguration
+    Amazonka.GamesParks.Lens
+    Amazonka.GamesParks.ListExtensions
+    Amazonka.GamesParks.ListExtensionVersions
+    Amazonka.GamesParks.ListGames
+    Amazonka.GamesParks.ListGeneratedCodeJobs
+    Amazonka.GamesParks.ListSnapshots
+    Amazonka.GamesParks.ListStageDeployments
+    Amazonka.GamesParks.ListStages
+    Amazonka.GamesParks.ListTagsForResource
+    Amazonka.GamesParks.StartGeneratedCodeJob
+    Amazonka.GamesParks.StartStageDeployment
+    Amazonka.GamesParks.TagResource
+    Amazonka.GamesParks.Types
+    Amazonka.GamesParks.Types.Connection
+    Amazonka.GamesParks.Types.DeploymentAction
+    Amazonka.GamesParks.Types.DeploymentResult
+    Amazonka.GamesParks.Types.DeploymentState
+    Amazonka.GamesParks.Types.Document
+    Amazonka.GamesParks.Types.ExtensionDetails
+    Amazonka.GamesParks.Types.ExtensionVersionDetails
+    Amazonka.GamesParks.Types.GameConfigurationDetails
+    Amazonka.GamesParks.Types.GameDetails
+    Amazonka.GamesParks.Types.GameState
+    Amazonka.GamesParks.Types.GameSummary
+    Amazonka.GamesParks.Types.GeneratedCodeJobDetails
+    Amazonka.GamesParks.Types.GeneratedCodeJobState
+    Amazonka.GamesParks.Types.Generator
+    Amazonka.GamesParks.Types.ImportGameConfigurationSource
+    Amazonka.GamesParks.Types.Operation
+    Amazonka.GamesParks.Types.ResultCode
+    Amazonka.GamesParks.Types.Section
+    Amazonka.GamesParks.Types.SectionModification
+    Amazonka.GamesParks.Types.SnapshotDetails
+    Amazonka.GamesParks.Types.SnapshotSummary
+    Amazonka.GamesParks.Types.StageDeploymentDetails
+    Amazonka.GamesParks.Types.StageDeploymentSummary
+    Amazonka.GamesParks.Types.StageDetails
+    Amazonka.GamesParks.Types.StageState
+    Amazonka.GamesParks.Types.StageSummary
+    Amazonka.GamesParks.UntagResource
+    Amazonka.GamesParks.UpdateGame
+    Amazonka.GamesParks.UpdateGameConfiguration
+    Amazonka.GamesParks.UpdateSnapshot
+    Amazonka.GamesParks.UpdateStage
+    Amazonka.GamesParks.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-gamesparks-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.GamesParks
+    Test.Amazonka.GamesParks.Internal
+    Test.Amazonka.Gen.GamesParks
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-gamesparks
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateGame.yaml b/fixture/CreateGame.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGame.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/CreateGameResponse.proto b/fixture/CreateGameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGameResponse.proto
diff --git a/fixture/CreateSnapshot.yaml b/fixture/CreateSnapshot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSnapshot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/CreateSnapshotResponse.proto b/fixture/CreateSnapshotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSnapshotResponse.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/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/DeleteGame.yaml b/fixture/DeleteGame.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGame.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/DeleteGameResponse.proto b/fixture/DeleteGameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGameResponse.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/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/DisconnectPlayer.yaml b/fixture/DisconnectPlayer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectPlayer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/DisconnectPlayerResponse.proto b/fixture/DisconnectPlayerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisconnectPlayerResponse.proto
diff --git a/fixture/ExportSnapshot.yaml b/fixture/ExportSnapshot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportSnapshot.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ExportSnapshotResponse.proto b/fixture/ExportSnapshotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportSnapshotResponse.proto
diff --git a/fixture/GetExtension.yaml b/fixture/GetExtension.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtension.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetExtensionResponse.proto b/fixture/GetExtensionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtensionResponse.proto
diff --git a/fixture/GetExtensionVersion.yaml b/fixture/GetExtensionVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtensionVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetExtensionVersionResponse.proto b/fixture/GetExtensionVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetExtensionVersionResponse.proto
diff --git a/fixture/GetGame.yaml b/fixture/GetGame.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGame.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetGameConfiguration.yaml b/fixture/GetGameConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGameConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetGameConfigurationResponse.proto b/fixture/GetGameConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGameConfigurationResponse.proto
diff --git a/fixture/GetGameResponse.proto b/fixture/GetGameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGameResponse.proto
diff --git a/fixture/GetGeneratedCodeJob.yaml b/fixture/GetGeneratedCodeJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGeneratedCodeJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetGeneratedCodeJobResponse.proto b/fixture/GetGeneratedCodeJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGeneratedCodeJobResponse.proto
diff --git a/fixture/GetPlayerConnectionStatus.yaml b/fixture/GetPlayerConnectionStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlayerConnectionStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetPlayerConnectionStatusResponse.proto b/fixture/GetPlayerConnectionStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlayerConnectionStatusResponse.proto
diff --git a/fixture/GetSnapshot.yaml b/fixture/GetSnapshot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSnapshot.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetSnapshotResponse.proto b/fixture/GetSnapshotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSnapshotResponse.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/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetStageDeployment.yaml b/fixture/GetStageDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetStageDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/GetStageDeploymentResponse.proto b/fixture/GetStageDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStageDeploymentResponse.proto
diff --git a/fixture/GetStageResponse.proto b/fixture/GetStageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetStageResponse.proto
diff --git a/fixture/ImportGameConfiguration.yaml b/fixture/ImportGameConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportGameConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ImportGameConfigurationResponse.proto b/fixture/ImportGameConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportGameConfigurationResponse.proto
diff --git a/fixture/ListExtensionVersions.yaml b/fixture/ListExtensionVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensionVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ListExtensionVersionsResponse.proto b/fixture/ListExtensionVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensionVersionsResponse.proto
diff --git a/fixture/ListExtensions.yaml b/fixture/ListExtensions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ListExtensionsResponse.proto b/fixture/ListExtensionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExtensionsResponse.proto
diff --git a/fixture/ListGames.yaml b/fixture/ListGames.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGames.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ListGamesResponse.proto b/fixture/ListGamesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGamesResponse.proto
diff --git a/fixture/ListGeneratedCodeJobs.yaml b/fixture/ListGeneratedCodeJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGeneratedCodeJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ListGeneratedCodeJobsResponse.proto b/fixture/ListGeneratedCodeJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGeneratedCodeJobsResponse.proto
diff --git a/fixture/ListSnapshots.yaml b/fixture/ListSnapshots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSnapshots.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ListSnapshotsResponse.proto b/fixture/ListSnapshotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSnapshotsResponse.proto
diff --git a/fixture/ListStageDeployments.yaml b/fixture/ListStageDeployments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStageDeployments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ListStageDeploymentsResponse.proto b/fixture/ListStageDeploymentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStageDeploymentsResponse.proto
diff --git a/fixture/ListStages.yaml b/fixture/ListStages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListStages.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/ListStagesResponse.proto b/fixture/ListStagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListStagesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/StartGeneratedCodeJob.yaml b/fixture/StartGeneratedCodeJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartGeneratedCodeJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/StartGeneratedCodeJobResponse.proto b/fixture/StartGeneratedCodeJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartGeneratedCodeJobResponse.proto
diff --git a/fixture/StartStageDeployment.yaml b/fixture/StartStageDeployment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartStageDeployment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/StartStageDeploymentResponse.proto b/fixture/StartStageDeploymentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartStageDeploymentResponse.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/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/UpdateGame.yaml b/fixture/UpdateGame.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGame.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/UpdateGameConfiguration.yaml b/fixture/UpdateGameConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGameConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/UpdateGameConfigurationResponse.proto b/fixture/UpdateGameConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGameConfigurationResponse.proto
diff --git a/fixture/UpdateGameResponse.proto b/fixture/UpdateGameResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGameResponse.proto
diff --git a/fixture/UpdateSnapshot.yaml b/fixture/UpdateSnapshot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSnapshot.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/UpdateSnapshotResponse.proto b/fixture/UpdateSnapshotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSnapshotResponse.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/gamesparks/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  gamesparks.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/gen/Amazonka/GamesParks.hs b/gen/Amazonka/GamesParks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks.hs
@@ -0,0 +1,408 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.GamesParks
+-- 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 @2021-08-17@ of the AWS service descriptions, licensed under Apache 2.0.
+module Amazonka.GamesParks
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateGame
+    CreateGame (CreateGame'),
+    newCreateGame,
+    CreateGameResponse (CreateGameResponse'),
+    newCreateGameResponse,
+
+    -- ** CreateSnapshot
+    CreateSnapshot (CreateSnapshot'),
+    newCreateSnapshot,
+    CreateSnapshotResponse (CreateSnapshotResponse'),
+    newCreateSnapshotResponse,
+
+    -- ** CreateStage
+    CreateStage (CreateStage'),
+    newCreateStage,
+    CreateStageResponse (CreateStageResponse'),
+    newCreateStageResponse,
+
+    -- ** DeleteGame
+    DeleteGame (DeleteGame'),
+    newDeleteGame,
+    DeleteGameResponse (DeleteGameResponse'),
+    newDeleteGameResponse,
+
+    -- ** DeleteStage
+    DeleteStage (DeleteStage'),
+    newDeleteStage,
+    DeleteStageResponse (DeleteStageResponse'),
+    newDeleteStageResponse,
+
+    -- ** DisconnectPlayer
+    DisconnectPlayer (DisconnectPlayer'),
+    newDisconnectPlayer,
+    DisconnectPlayerResponse (DisconnectPlayerResponse'),
+    newDisconnectPlayerResponse,
+
+    -- ** ExportSnapshot
+    ExportSnapshot (ExportSnapshot'),
+    newExportSnapshot,
+    ExportSnapshotResponse (ExportSnapshotResponse'),
+    newExportSnapshotResponse,
+
+    -- ** GetExtension
+    GetExtension (GetExtension'),
+    newGetExtension,
+    GetExtensionResponse (GetExtensionResponse'),
+    newGetExtensionResponse,
+
+    -- ** GetExtensionVersion
+    GetExtensionVersion (GetExtensionVersion'),
+    newGetExtensionVersion,
+    GetExtensionVersionResponse (GetExtensionVersionResponse'),
+    newGetExtensionVersionResponse,
+
+    -- ** GetGame
+    GetGame (GetGame'),
+    newGetGame,
+    GetGameResponse (GetGameResponse'),
+    newGetGameResponse,
+
+    -- ** GetGameConfiguration
+    GetGameConfiguration (GetGameConfiguration'),
+    newGetGameConfiguration,
+    GetGameConfigurationResponse (GetGameConfigurationResponse'),
+    newGetGameConfigurationResponse,
+
+    -- ** GetGeneratedCodeJob
+    GetGeneratedCodeJob (GetGeneratedCodeJob'),
+    newGetGeneratedCodeJob,
+    GetGeneratedCodeJobResponse (GetGeneratedCodeJobResponse'),
+    newGetGeneratedCodeJobResponse,
+
+    -- ** GetPlayerConnectionStatus
+    GetPlayerConnectionStatus (GetPlayerConnectionStatus'),
+    newGetPlayerConnectionStatus,
+    GetPlayerConnectionStatusResponse (GetPlayerConnectionStatusResponse'),
+    newGetPlayerConnectionStatusResponse,
+
+    -- ** GetSnapshot
+    GetSnapshot (GetSnapshot'),
+    newGetSnapshot,
+    GetSnapshotResponse (GetSnapshotResponse'),
+    newGetSnapshotResponse,
+
+    -- ** GetStage
+    GetStage (GetStage'),
+    newGetStage,
+    GetStageResponse (GetStageResponse'),
+    newGetStageResponse,
+
+    -- ** GetStageDeployment
+    GetStageDeployment (GetStageDeployment'),
+    newGetStageDeployment,
+    GetStageDeploymentResponse (GetStageDeploymentResponse'),
+    newGetStageDeploymentResponse,
+
+    -- ** ImportGameConfiguration
+    ImportGameConfiguration (ImportGameConfiguration'),
+    newImportGameConfiguration,
+    ImportGameConfigurationResponse (ImportGameConfigurationResponse'),
+    newImportGameConfigurationResponse,
+
+    -- ** ListExtensionVersions (Paginated)
+    ListExtensionVersions (ListExtensionVersions'),
+    newListExtensionVersions,
+    ListExtensionVersionsResponse (ListExtensionVersionsResponse'),
+    newListExtensionVersionsResponse,
+
+    -- ** ListExtensions (Paginated)
+    ListExtensions (ListExtensions'),
+    newListExtensions,
+    ListExtensionsResponse (ListExtensionsResponse'),
+    newListExtensionsResponse,
+
+    -- ** ListGames (Paginated)
+    ListGames (ListGames'),
+    newListGames,
+    ListGamesResponse (ListGamesResponse'),
+    newListGamesResponse,
+
+    -- ** ListGeneratedCodeJobs (Paginated)
+    ListGeneratedCodeJobs (ListGeneratedCodeJobs'),
+    newListGeneratedCodeJobs,
+    ListGeneratedCodeJobsResponse (ListGeneratedCodeJobsResponse'),
+    newListGeneratedCodeJobsResponse,
+
+    -- ** ListSnapshots (Paginated)
+    ListSnapshots (ListSnapshots'),
+    newListSnapshots,
+    ListSnapshotsResponse (ListSnapshotsResponse'),
+    newListSnapshotsResponse,
+
+    -- ** ListStageDeployments (Paginated)
+    ListStageDeployments (ListStageDeployments'),
+    newListStageDeployments,
+    ListStageDeploymentsResponse (ListStageDeploymentsResponse'),
+    newListStageDeploymentsResponse,
+
+    -- ** ListStages (Paginated)
+    ListStages (ListStages'),
+    newListStages,
+    ListStagesResponse (ListStagesResponse'),
+    newListStagesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** StartGeneratedCodeJob
+    StartGeneratedCodeJob (StartGeneratedCodeJob'),
+    newStartGeneratedCodeJob,
+    StartGeneratedCodeJobResponse (StartGeneratedCodeJobResponse'),
+    newStartGeneratedCodeJobResponse,
+
+    -- ** StartStageDeployment
+    StartStageDeployment (StartStageDeployment'),
+    newStartStageDeployment,
+    StartStageDeploymentResponse (StartStageDeploymentResponse'),
+    newStartStageDeploymentResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateGame
+    UpdateGame (UpdateGame'),
+    newUpdateGame,
+    UpdateGameResponse (UpdateGameResponse'),
+    newUpdateGameResponse,
+
+    -- ** UpdateGameConfiguration
+    UpdateGameConfiguration (UpdateGameConfiguration'),
+    newUpdateGameConfiguration,
+    UpdateGameConfigurationResponse (UpdateGameConfigurationResponse'),
+    newUpdateGameConfigurationResponse,
+
+    -- ** UpdateSnapshot
+    UpdateSnapshot (UpdateSnapshot'),
+    newUpdateSnapshot,
+    UpdateSnapshotResponse (UpdateSnapshotResponse'),
+    newUpdateSnapshotResponse,
+
+    -- ** UpdateStage
+    UpdateStage (UpdateStage'),
+    newUpdateStage,
+    UpdateStageResponse (UpdateStageResponse'),
+    newUpdateStageResponse,
+
+    -- * Types
+
+    -- ** DeploymentAction
+    DeploymentAction (..),
+
+    -- ** DeploymentState
+    DeploymentState (..),
+
+    -- ** GameState
+    GameState (..),
+
+    -- ** GeneratedCodeJobState
+    GeneratedCodeJobState (..),
+
+    -- ** Operation
+    Operation (..),
+
+    -- ** ResultCode
+    ResultCode (..),
+
+    -- ** StageState
+    StageState (..),
+
+    -- ** Connection
+    Connection (Connection'),
+    newConnection,
+
+    -- ** DeploymentResult
+    DeploymentResult (DeploymentResult'),
+    newDeploymentResult,
+
+    -- ** Document
+    Document (Document'),
+    newDocument,
+
+    -- ** ExtensionDetails
+    ExtensionDetails (ExtensionDetails'),
+    newExtensionDetails,
+
+    -- ** ExtensionVersionDetails
+    ExtensionVersionDetails (ExtensionVersionDetails'),
+    newExtensionVersionDetails,
+
+    -- ** GameConfigurationDetails
+    GameConfigurationDetails (GameConfigurationDetails'),
+    newGameConfigurationDetails,
+
+    -- ** GameDetails
+    GameDetails (GameDetails'),
+    newGameDetails,
+
+    -- ** GameSummary
+    GameSummary (GameSummary'),
+    newGameSummary,
+
+    -- ** GeneratedCodeJobDetails
+    GeneratedCodeJobDetails (GeneratedCodeJobDetails'),
+    newGeneratedCodeJobDetails,
+
+    -- ** Generator
+    Generator (Generator'),
+    newGenerator,
+
+    -- ** ImportGameConfigurationSource
+    ImportGameConfigurationSource (ImportGameConfigurationSource'),
+    newImportGameConfigurationSource,
+
+    -- ** Section
+    Section (Section'),
+    newSection,
+
+    -- ** SectionModification
+    SectionModification (SectionModification'),
+    newSectionModification,
+
+    -- ** SnapshotDetails
+    SnapshotDetails (SnapshotDetails'),
+    newSnapshotDetails,
+
+    -- ** SnapshotSummary
+    SnapshotSummary (SnapshotSummary'),
+    newSnapshotSummary,
+
+    -- ** StageDeploymentDetails
+    StageDeploymentDetails (StageDeploymentDetails'),
+    newStageDeploymentDetails,
+
+    -- ** StageDeploymentSummary
+    StageDeploymentSummary (StageDeploymentSummary'),
+    newStageDeploymentSummary,
+
+    -- ** StageDetails
+    StageDetails (StageDetails'),
+    newStageDetails,
+
+    -- ** StageSummary
+    StageSummary (StageSummary'),
+    newStageSummary,
+  )
+where
+
+import Amazonka.GamesParks.CreateGame
+import Amazonka.GamesParks.CreateSnapshot
+import Amazonka.GamesParks.CreateStage
+import Amazonka.GamesParks.DeleteGame
+import Amazonka.GamesParks.DeleteStage
+import Amazonka.GamesParks.DisconnectPlayer
+import Amazonka.GamesParks.ExportSnapshot
+import Amazonka.GamesParks.GetExtension
+import Amazonka.GamesParks.GetExtensionVersion
+import Amazonka.GamesParks.GetGame
+import Amazonka.GamesParks.GetGameConfiguration
+import Amazonka.GamesParks.GetGeneratedCodeJob
+import Amazonka.GamesParks.GetPlayerConnectionStatus
+import Amazonka.GamesParks.GetSnapshot
+import Amazonka.GamesParks.GetStage
+import Amazonka.GamesParks.GetStageDeployment
+import Amazonka.GamesParks.ImportGameConfiguration
+import Amazonka.GamesParks.Lens
+import Amazonka.GamesParks.ListExtensionVersions
+import Amazonka.GamesParks.ListExtensions
+import Amazonka.GamesParks.ListGames
+import Amazonka.GamesParks.ListGeneratedCodeJobs
+import Amazonka.GamesParks.ListSnapshots
+import Amazonka.GamesParks.ListStageDeployments
+import Amazonka.GamesParks.ListStages
+import Amazonka.GamesParks.ListTagsForResource
+import Amazonka.GamesParks.StartGeneratedCodeJob
+import Amazonka.GamesParks.StartStageDeployment
+import Amazonka.GamesParks.TagResource
+import Amazonka.GamesParks.Types
+import Amazonka.GamesParks.UntagResource
+import Amazonka.GamesParks.UpdateGame
+import Amazonka.GamesParks.UpdateGameConfiguration
+import Amazonka.GamesParks.UpdateSnapshot
+import Amazonka.GamesParks.UpdateStage
+import Amazonka.GamesParks.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 'GamesParks'.
+
+-- $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/GamesParks/CreateGame.hs b/gen/Amazonka/GamesParks/CreateGame.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/CreateGame.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.GamesParks.CreateGame
+-- 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 game with an empty configuration. After creating your
+-- game, you can update the configuration using @UpdateGameConfiguration@
+-- or @ImportGameConfiguration@.
+module Amazonka.GamesParks.CreateGame
+  ( -- * Creating a Request
+    CreateGame (..),
+    newCreateGame,
+
+    -- * Request Lenses
+    createGame_clientToken,
+    createGame_description,
+    createGame_tags,
+    createGame_gameName,
+
+    -- * Destructuring the Response
+    CreateGameResponse (..),
+    newCreateGameResponse,
+
+    -- * Response Lenses
+    createGameResponse_game,
+    createGameResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateGame' smart constructor.
+data CreateGame = CreateGame'
+  { -- | A client-defined token. With an active client token in the request, this
+    -- action is idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the game.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The list of tags to apply to the game.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the game.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateGame' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createGame_clientToken' - A client-defined token. With an active client token in the request, this
+-- action is idempotent.
+--
+-- 'description', 'createGame_description' - The description of the game.
+--
+-- 'tags', 'createGame_tags' - The list of tags to apply to the game.
+--
+-- 'gameName', 'createGame_gameName' - The name of the game.
+newCreateGame ::
+  -- | 'gameName'
+  Prelude.Text ->
+  CreateGame
+newCreateGame pGameName_ =
+  CreateGame'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      gameName = pGameName_
+    }
+
+-- | A client-defined token. With an active client token in the request, this
+-- action is idempotent.
+createGame_clientToken :: Lens.Lens' CreateGame (Prelude.Maybe Prelude.Text)
+createGame_clientToken = Lens.lens (\CreateGame' {clientToken} -> clientToken) (\s@CreateGame' {} a -> s {clientToken = a} :: CreateGame)
+
+-- | The description of the game.
+createGame_description :: Lens.Lens' CreateGame (Prelude.Maybe Prelude.Text)
+createGame_description = Lens.lens (\CreateGame' {description} -> description) (\s@CreateGame' {} a -> s {description = a} :: CreateGame)
+
+-- | The list of tags to apply to the game.
+createGame_tags :: Lens.Lens' CreateGame (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createGame_tags = Lens.lens (\CreateGame' {tags} -> tags) (\s@CreateGame' {} a -> s {tags = a} :: CreateGame) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the game.
+createGame_gameName :: Lens.Lens' CreateGame Prelude.Text
+createGame_gameName = Lens.lens (\CreateGame' {gameName} -> gameName) (\s@CreateGame' {} a -> s {gameName = a} :: CreateGame)
+
+instance Core.AWSRequest CreateGame where
+  type AWSResponse CreateGame = CreateGameResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateGameResponse'
+            Prelude.<$> (x Data..?> "Game")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateGame where
+  hashWithSalt _salt CreateGame' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData CreateGame where
+  rnf CreateGame' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf gameName
+
+instance Data.ToHeaders CreateGame where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateGame where
+  toJSON CreateGame' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("GameName" Data..= gameName)
+          ]
+      )
+
+instance Data.ToPath CreateGame where
+  toPath = Prelude.const "/game"
+
+instance Data.ToQuery CreateGame where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateGameResponse' smart constructor.
+data CreateGameResponse = CreateGameResponse'
+  { -- | Details about the game that was created.
+    game :: Prelude.Maybe GameDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateGameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'game', 'createGameResponse_game' - Details about the game that was created.
+--
+-- 'httpStatus', 'createGameResponse_httpStatus' - The response's http status code.
+newCreateGameResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateGameResponse
+newCreateGameResponse pHttpStatus_ =
+  CreateGameResponse'
+    { game = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the game that was created.
+createGameResponse_game :: Lens.Lens' CreateGameResponse (Prelude.Maybe GameDetails)
+createGameResponse_game = Lens.lens (\CreateGameResponse' {game} -> game) (\s@CreateGameResponse' {} a -> s {game = a} :: CreateGameResponse)
+
+-- | The response's http status code.
+createGameResponse_httpStatus :: Lens.Lens' CreateGameResponse Prelude.Int
+createGameResponse_httpStatus = Lens.lens (\CreateGameResponse' {httpStatus} -> httpStatus) (\s@CreateGameResponse' {} a -> s {httpStatus = a} :: CreateGameResponse)
+
+instance Prelude.NFData CreateGameResponse where
+  rnf CreateGameResponse' {..} =
+    Prelude.rnf game
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/CreateSnapshot.hs b/gen/Amazonka/GamesParks/CreateSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/CreateSnapshot.hs
@@ -0,0 +1,181 @@
+{-# 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.GamesParks.CreateSnapshot
+-- 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 snapshot of the game configuration.
+module Amazonka.GamesParks.CreateSnapshot
+  ( -- * Creating a Request
+    CreateSnapshot (..),
+    newCreateSnapshot,
+
+    -- * Request Lenses
+    createSnapshot_description,
+    createSnapshot_gameName,
+
+    -- * Destructuring the Response
+    CreateSnapshotResponse (..),
+    newCreateSnapshotResponse,
+
+    -- * Response Lenses
+    createSnapshotResponse_snapshot,
+    createSnapshotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSnapshot' smart constructor.
+data CreateSnapshot = CreateSnapshot'
+  { -- | The description of the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createSnapshot_description' - The description of the snapshot.
+--
+-- 'gameName', 'createSnapshot_gameName' - The name of the game.
+newCreateSnapshot ::
+  -- | 'gameName'
+  Prelude.Text ->
+  CreateSnapshot
+newCreateSnapshot pGameName_ =
+  CreateSnapshot'
+    { description = Prelude.Nothing,
+      gameName = pGameName_
+    }
+
+-- | The description of the snapshot.
+createSnapshot_description :: Lens.Lens' CreateSnapshot (Prelude.Maybe Prelude.Text)
+createSnapshot_description = Lens.lens (\CreateSnapshot' {description} -> description) (\s@CreateSnapshot' {} a -> s {description = a} :: CreateSnapshot)
+
+-- | The name of the game.
+createSnapshot_gameName :: Lens.Lens' CreateSnapshot Prelude.Text
+createSnapshot_gameName = Lens.lens (\CreateSnapshot' {gameName} -> gameName) (\s@CreateSnapshot' {} a -> s {gameName = a} :: CreateSnapshot)
+
+instance Core.AWSRequest CreateSnapshot where
+  type
+    AWSResponse CreateSnapshot =
+      CreateSnapshotResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSnapshotResponse'
+            Prelude.<$> (x Data..?> "Snapshot")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSnapshot where
+  hashWithSalt _salt CreateSnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData CreateSnapshot where
+  rnf CreateSnapshot' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gameName
+
+instance Data.ToHeaders CreateSnapshot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSnapshot where
+  toJSON CreateSnapshot' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Description" Data..=) Prelude.<$> description]
+      )
+
+instance Data.ToPath CreateSnapshot where
+  toPath CreateSnapshot' {..} =
+    Prelude.mconcat
+      ["/game/", Data.toBS gameName, "/snapshot"]
+
+instance Data.ToQuery CreateSnapshot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSnapshotResponse' smart constructor.
+data CreateSnapshotResponse = CreateSnapshotResponse'
+  { -- | Properties that provide details of the created snapshot.
+    snapshot :: Prelude.Maybe SnapshotDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSnapshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snapshot', 'createSnapshotResponse_snapshot' - Properties that provide details of the created snapshot.
+--
+-- 'httpStatus', 'createSnapshotResponse_httpStatus' - The response's http status code.
+newCreateSnapshotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSnapshotResponse
+newCreateSnapshotResponse pHttpStatus_ =
+  CreateSnapshotResponse'
+    { snapshot = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that provide details of the created snapshot.
+createSnapshotResponse_snapshot :: Lens.Lens' CreateSnapshotResponse (Prelude.Maybe SnapshotDetails)
+createSnapshotResponse_snapshot = Lens.lens (\CreateSnapshotResponse' {snapshot} -> snapshot) (\s@CreateSnapshotResponse' {} a -> s {snapshot = a} :: CreateSnapshotResponse)
+
+-- | The response's http status code.
+createSnapshotResponse_httpStatus :: Lens.Lens' CreateSnapshotResponse Prelude.Int
+createSnapshotResponse_httpStatus = Lens.lens (\CreateSnapshotResponse' {httpStatus} -> httpStatus) (\s@CreateSnapshotResponse' {} a -> s {httpStatus = a} :: CreateSnapshotResponse)
+
+instance Prelude.NFData CreateSnapshotResponse where
+  rnf CreateSnapshotResponse' {..} =
+    Prelude.rnf snapshot
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/CreateStage.hs b/gen/Amazonka/GamesParks/CreateStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/CreateStage.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.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 new stage for stage-by-stage game development and deployment.
+module Amazonka.GamesParks.CreateStage
+  ( -- * Creating a Request
+    CreateStage (..),
+    newCreateStage,
+
+    -- * Request Lenses
+    createStage_clientToken,
+    createStage_description,
+    createStage_tags,
+    createStage_gameName,
+    createStage_role,
+    createStage_stageName,
+
+    -- * Destructuring the Response
+    CreateStageResponse (..),
+    newCreateStageResponse,
+
+    -- * Response Lenses
+    createStageResponse_stage,
+    createStageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStage' smart constructor.
+data CreateStage = CreateStage'
+  { -- | A client-defined token. With an active client token in the request, this
+    -- action is idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The list of tags to apply to the stage.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role to run the game with. This
+    -- role can be a game-defined role or the default role that GameSparks
+    -- created.
+    role' :: 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:
+--
+-- 'clientToken', 'createStage_clientToken' - A client-defined token. With an active client token in the request, this
+-- action is idempotent.
+--
+-- 'description', 'createStage_description' - The description of the stage.
+--
+-- 'tags', 'createStage_tags' - The list of tags to apply to the stage.
+--
+-- 'gameName', 'createStage_gameName' - The name of the game.
+--
+-- 'role'', 'createStage_role' - The Amazon Resource Name (ARN) of the role to run the game with. This
+-- role can be a game-defined role or the default role that GameSparks
+-- created.
+--
+-- 'stageName', 'createStage_stageName' - The name of the stage.
+newCreateStage ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'role''
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  CreateStage
+newCreateStage pGameName_ pRole_ pStageName_ =
+  CreateStage'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      gameName = pGameName_,
+      role' = pRole_,
+      stageName = pStageName_
+    }
+
+-- | A client-defined token. With an active client token in the request, this
+-- action is idempotent.
+createStage_clientToken :: Lens.Lens' CreateStage (Prelude.Maybe Prelude.Text)
+createStage_clientToken = Lens.lens (\CreateStage' {clientToken} -> clientToken) (\s@CreateStage' {} a -> s {clientToken = a} :: CreateStage)
+
+-- | The description of the stage.
+createStage_description :: Lens.Lens' CreateStage (Prelude.Maybe Prelude.Text)
+createStage_description = Lens.lens (\CreateStage' {description} -> description) (\s@CreateStage' {} a -> s {description = a} :: CreateStage)
+
+-- | The list of tags to apply to the stage.
+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 name of the game.
+createStage_gameName :: Lens.Lens' CreateStage Prelude.Text
+createStage_gameName = Lens.lens (\CreateStage' {gameName} -> gameName) (\s@CreateStage' {} a -> s {gameName = a} :: CreateStage)
+
+-- | The Amazon Resource Name (ARN) of the role to run the game with. This
+-- role can be a game-defined role or the default role that GameSparks
+-- created.
+createStage_role :: Lens.Lens' CreateStage Prelude.Text
+createStage_role = Lens.lens (\CreateStage' {role'} -> role') (\s@CreateStage' {} a -> s {role' = 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..?> "Stage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStage where
+  hashWithSalt _salt CreateStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` role'
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData CreateStage where
+  rnf CreateStage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf role'
+      `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
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Role" Data..= role'),
+            Prelude.Just ("StageName" Data..= stageName)
+          ]
+      )
+
+instance Data.ToPath CreateStage where
+  toPath CreateStage' {..} =
+    Prelude.mconcat
+      ["/game/", Data.toBS gameName, "/stage"]
+
+instance Data.ToQuery CreateStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStageResponse' smart constructor.
+data CreateStageResponse = CreateStageResponse'
+  { -- | Properties that describe the stage.
+    stage :: Prelude.Maybe StageDetails,
+    -- | 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:
+--
+-- 'stage', 'createStageResponse_stage' - Properties that describe the stage.
+--
+-- 'httpStatus', 'createStageResponse_httpStatus' - The response's http status code.
+newCreateStageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStageResponse
+newCreateStageResponse pHttpStatus_ =
+  CreateStageResponse'
+    { stage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that describe the stage.
+createStageResponse_stage :: Lens.Lens' CreateStageResponse (Prelude.Maybe StageDetails)
+createStageResponse_stage = Lens.lens (\CreateStageResponse' {stage} -> stage) (\s@CreateStageResponse' {} a -> s {stage = a} :: CreateStageResponse)
+
+-- | 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 stage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/DeleteGame.hs b/gen/Amazonka/GamesParks/DeleteGame.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/DeleteGame.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.DeleteGame
+-- 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 game.
+module Amazonka.GamesParks.DeleteGame
+  ( -- * Creating a Request
+    DeleteGame (..),
+    newDeleteGame,
+
+    -- * Request Lenses
+    deleteGame_gameName,
+
+    -- * Destructuring the Response
+    DeleteGameResponse (..),
+    newDeleteGameResponse,
+
+    -- * Response Lenses
+    deleteGameResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteGame' smart constructor.
+data DeleteGame = DeleteGame'
+  { -- | The name of the game to delete.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteGame' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'deleteGame_gameName' - The name of the game to delete.
+newDeleteGame ::
+  -- | 'gameName'
+  Prelude.Text ->
+  DeleteGame
+newDeleteGame pGameName_ =
+  DeleteGame' {gameName = pGameName_}
+
+-- | The name of the game to delete.
+deleteGame_gameName :: Lens.Lens' DeleteGame Prelude.Text
+deleteGame_gameName = Lens.lens (\DeleteGame' {gameName} -> gameName) (\s@DeleteGame' {} a -> s {gameName = a} :: DeleteGame)
+
+instance Core.AWSRequest DeleteGame where
+  type AWSResponse DeleteGame = DeleteGameResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteGameResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteGame where
+  hashWithSalt _salt DeleteGame' {..} =
+    _salt `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData DeleteGame where
+  rnf DeleteGame' {..} = Prelude.rnf gameName
+
+instance Data.ToHeaders DeleteGame where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteGame where
+  toPath DeleteGame' {..} =
+    Prelude.mconcat ["/game/", Data.toBS gameName]
+
+instance Data.ToQuery DeleteGame where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteGameResponse' smart constructor.
+data DeleteGameResponse = DeleteGameResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteGameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteGameResponse_httpStatus' - The response's http status code.
+newDeleteGameResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteGameResponse
+newDeleteGameResponse pHttpStatus_ =
+  DeleteGameResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteGameResponse_httpStatus :: Lens.Lens' DeleteGameResponse Prelude.Int
+deleteGameResponse_httpStatus = Lens.lens (\DeleteGameResponse' {httpStatus} -> httpStatus) (\s@DeleteGameResponse' {} a -> s {httpStatus = a} :: DeleteGameResponse)
+
+instance Prelude.NFData DeleteGameResponse where
+  rnf DeleteGameResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/DeleteStage.hs b/gen/Amazonka/GamesParks/DeleteStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/DeleteStage.hs
@@ -0,0 +1,163 @@
+{-# 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.GamesParks.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 from a game, along with the associated game runtime.
+module Amazonka.GamesParks.DeleteStage
+  ( -- * Creating a Request
+    DeleteStage (..),
+    newDeleteStage,
+
+    -- * Request Lenses
+    deleteStage_gameName,
+    deleteStage_stageName,
+
+    -- * Destructuring the Response
+    DeleteStageResponse (..),
+    newDeleteStageResponse,
+
+    -- * Response Lenses
+    deleteStageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+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 name of the game.
+    gameName :: Prelude.Text,
+    -- | The name of the stage to delete.
+    stageName :: 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:
+--
+-- 'gameName', 'deleteStage_gameName' - The name of the game.
+--
+-- 'stageName', 'deleteStage_stageName' - The name of the stage to delete.
+newDeleteStage ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  DeleteStage
+newDeleteStage pGameName_ pStageName_ =
+  DeleteStage'
+    { gameName = pGameName_,
+      stageName = pStageName_
+    }
+
+-- | The name of the game.
+deleteStage_gameName :: Lens.Lens' DeleteStage Prelude.Text
+deleteStage_gameName = Lens.lens (\DeleteStage' {gameName} -> gameName) (\s@DeleteStage' {} a -> s {gameName = a} :: DeleteStage)
+
+-- | The name of the stage to delete.
+deleteStage_stageName :: Lens.Lens' DeleteStage Prelude.Text
+deleteStage_stageName = Lens.lens (\DeleteStage' {stageName} -> stageName) (\s@DeleteStage' {} a -> s {stageName = a} :: DeleteStage)
+
+instance Core.AWSRequest DeleteStage where
+  type AWSResponse DeleteStage = DeleteStageResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteStageResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteStage where
+  hashWithSalt _salt DeleteStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData DeleteStage where
+  rnf DeleteStage' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf stageName
+
+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
+      [ "/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName
+      ]
+
+instance Data.ToQuery DeleteStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStageResponse' smart constructor.
+data DeleteStageResponse = DeleteStageResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  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.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteStageResponse_httpStatus' - The response's http status code.
+newDeleteStageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteStageResponse
+newDeleteStageResponse pHttpStatus_ =
+  DeleteStageResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteStageResponse_httpStatus :: Lens.Lens' DeleteStageResponse Prelude.Int
+deleteStageResponse_httpStatus = Lens.lens (\DeleteStageResponse' {httpStatus} -> httpStatus) (\s@DeleteStageResponse' {} a -> s {httpStatus = a} :: DeleteStageResponse)
+
+instance Prelude.NFData DeleteStageResponse where
+  rnf DeleteStageResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/DisconnectPlayer.hs b/gen/Amazonka/GamesParks/DisconnectPlayer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/DisconnectPlayer.hs
@@ -0,0 +1,222 @@
+{-# 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.GamesParks.DisconnectPlayer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disconnects a player from the game runtime.
+--
+-- If a player has multiple connections, this operation attempts to close
+-- all of them.
+module Amazonka.GamesParks.DisconnectPlayer
+  ( -- * Creating a Request
+    DisconnectPlayer (..),
+    newDisconnectPlayer,
+
+    -- * Request Lenses
+    disconnectPlayer_gameName,
+    disconnectPlayer_playerId,
+    disconnectPlayer_stageName,
+
+    -- * Destructuring the Response
+    DisconnectPlayerResponse (..),
+    newDisconnectPlayerResponse,
+
+    -- * Response Lenses
+    disconnectPlayerResponse_disconnectFailures,
+    disconnectPlayerResponse_disconnectSuccesses,
+    disconnectPlayerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisconnectPlayer' smart constructor.
+data DisconnectPlayer = DisconnectPlayer'
+  { -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The unique identifier representing a player.
+    playerId :: Prelude.Text,
+    -- | The name of the stage.
+    stageName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisconnectPlayer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'disconnectPlayer_gameName' - The name of the game.
+--
+-- 'playerId', 'disconnectPlayer_playerId' - The unique identifier representing a player.
+--
+-- 'stageName', 'disconnectPlayer_stageName' - The name of the stage.
+newDisconnectPlayer ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'playerId'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  DisconnectPlayer
+newDisconnectPlayer pGameName_ pPlayerId_ pStageName_ =
+  DisconnectPlayer'
+    { gameName = pGameName_,
+      playerId = pPlayerId_,
+      stageName = pStageName_
+    }
+
+-- | The name of the game.
+disconnectPlayer_gameName :: Lens.Lens' DisconnectPlayer Prelude.Text
+disconnectPlayer_gameName = Lens.lens (\DisconnectPlayer' {gameName} -> gameName) (\s@DisconnectPlayer' {} a -> s {gameName = a} :: DisconnectPlayer)
+
+-- | The unique identifier representing a player.
+disconnectPlayer_playerId :: Lens.Lens' DisconnectPlayer Prelude.Text
+disconnectPlayer_playerId = Lens.lens (\DisconnectPlayer' {playerId} -> playerId) (\s@DisconnectPlayer' {} a -> s {playerId = a} :: DisconnectPlayer)
+
+-- | The name of the stage.
+disconnectPlayer_stageName :: Lens.Lens' DisconnectPlayer Prelude.Text
+disconnectPlayer_stageName = Lens.lens (\DisconnectPlayer' {stageName} -> stageName) (\s@DisconnectPlayer' {} a -> s {stageName = a} :: DisconnectPlayer)
+
+instance Core.AWSRequest DisconnectPlayer where
+  type
+    AWSResponse DisconnectPlayer =
+      DisconnectPlayerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisconnectPlayerResponse'
+            Prelude.<$> ( x
+                            Data..?> "DisconnectFailures"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "DisconnectSuccesses"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisconnectPlayer where
+  hashWithSalt _salt DisconnectPlayer' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` playerId
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData DisconnectPlayer where
+  rnf DisconnectPlayer' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf playerId
+      `Prelude.seq` Prelude.rnf stageName
+
+instance Data.ToHeaders DisconnectPlayer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisconnectPlayer where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DisconnectPlayer where
+  toPath DisconnectPlayer' {..} =
+    Prelude.mconcat
+      [ "/runtime/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName,
+        "/player/",
+        Data.toBS playerId,
+        "/disconnect"
+      ]
+
+instance Data.ToQuery DisconnectPlayer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisconnectPlayerResponse' smart constructor.
+data DisconnectPlayerResponse = DisconnectPlayerResponse'
+  { -- | The list of the connection ids that could not be disconnected.
+    disconnectFailures :: Prelude.Maybe [Prelude.Text],
+    -- | The list of the connection ids that were disconnected.
+    disconnectSuccesses :: 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 'DisconnectPlayerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'disconnectFailures', 'disconnectPlayerResponse_disconnectFailures' - The list of the connection ids that could not be disconnected.
+--
+-- 'disconnectSuccesses', 'disconnectPlayerResponse_disconnectSuccesses' - The list of the connection ids that were disconnected.
+--
+-- 'httpStatus', 'disconnectPlayerResponse_httpStatus' - The response's http status code.
+newDisconnectPlayerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisconnectPlayerResponse
+newDisconnectPlayerResponse pHttpStatus_ =
+  DisconnectPlayerResponse'
+    { disconnectFailures =
+        Prelude.Nothing,
+      disconnectSuccesses = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of the connection ids that could not be disconnected.
+disconnectPlayerResponse_disconnectFailures :: Lens.Lens' DisconnectPlayerResponse (Prelude.Maybe [Prelude.Text])
+disconnectPlayerResponse_disconnectFailures = Lens.lens (\DisconnectPlayerResponse' {disconnectFailures} -> disconnectFailures) (\s@DisconnectPlayerResponse' {} a -> s {disconnectFailures = a} :: DisconnectPlayerResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of the connection ids that were disconnected.
+disconnectPlayerResponse_disconnectSuccesses :: Lens.Lens' DisconnectPlayerResponse (Prelude.Maybe [Prelude.Text])
+disconnectPlayerResponse_disconnectSuccesses = Lens.lens (\DisconnectPlayerResponse' {disconnectSuccesses} -> disconnectSuccesses) (\s@DisconnectPlayerResponse' {} a -> s {disconnectSuccesses = a} :: DisconnectPlayerResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+disconnectPlayerResponse_httpStatus :: Lens.Lens' DisconnectPlayerResponse Prelude.Int
+disconnectPlayerResponse_httpStatus = Lens.lens (\DisconnectPlayerResponse' {httpStatus} -> httpStatus) (\s@DisconnectPlayerResponse' {} a -> s {httpStatus = a} :: DisconnectPlayerResponse)
+
+instance Prelude.NFData DisconnectPlayerResponse where
+  rnf DisconnectPlayerResponse' {..} =
+    Prelude.rnf disconnectFailures
+      `Prelude.seq` Prelude.rnf disconnectSuccesses
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ExportSnapshot.hs b/gen/Amazonka/GamesParks/ExportSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ExportSnapshot.hs
@@ -0,0 +1,193 @@
+{-# 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.GamesParks.ExportSnapshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports a game configuration snapshot.
+module Amazonka.GamesParks.ExportSnapshot
+  ( -- * Creating a Request
+    ExportSnapshot (..),
+    newExportSnapshot,
+
+    -- * Request Lenses
+    exportSnapshot_gameName,
+    exportSnapshot_snapshotId,
+
+    -- * Destructuring the Response
+    ExportSnapshotResponse (..),
+    newExportSnapshotResponse,
+
+    -- * Response Lenses
+    exportSnapshotResponse_s3Url,
+    exportSnapshotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportSnapshot' smart constructor.
+data ExportSnapshot = ExportSnapshot'
+  { -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The identifier of the snapshot to export.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportSnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'exportSnapshot_gameName' - The name of the game.
+--
+-- 'snapshotId', 'exportSnapshot_snapshotId' - The identifier of the snapshot to export.
+newExportSnapshot ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  ExportSnapshot
+newExportSnapshot pGameName_ pSnapshotId_ =
+  ExportSnapshot'
+    { gameName = pGameName_,
+      snapshotId = pSnapshotId_
+    }
+
+-- | The name of the game.
+exportSnapshot_gameName :: Lens.Lens' ExportSnapshot Prelude.Text
+exportSnapshot_gameName = Lens.lens (\ExportSnapshot' {gameName} -> gameName) (\s@ExportSnapshot' {} a -> s {gameName = a} :: ExportSnapshot)
+
+-- | The identifier of the snapshot to export.
+exportSnapshot_snapshotId :: Lens.Lens' ExportSnapshot Prelude.Text
+exportSnapshot_snapshotId = Lens.lens (\ExportSnapshot' {snapshotId} -> snapshotId) (\s@ExportSnapshot' {} a -> s {snapshotId = a} :: ExportSnapshot)
+
+instance Core.AWSRequest ExportSnapshot where
+  type
+    AWSResponse ExportSnapshot =
+      ExportSnapshotResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ExportSnapshotResponse'
+            Prelude.<$> (x Data..?> "S3Url")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ExportSnapshot where
+  hashWithSalt _salt ExportSnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData ExportSnapshot where
+  rnf ExportSnapshot' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders ExportSnapshot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ExportSnapshot where
+  toPath ExportSnapshot' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/snapshot/",
+        Data.toBS snapshotId,
+        "/export"
+      ]
+
+instance Data.ToQuery ExportSnapshot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newExportSnapshotResponse' smart constructor.
+data ExportSnapshotResponse = ExportSnapshotResponse'
+  { -- | The presigned URL for the snapshot data.
+    --
+    -- This URL will be available for 10 minutes, and can be used to download
+    -- the snapshot content. If the URL expires, a new one can be requested
+    -- using the same operation.
+    s3Url :: 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 'ExportSnapshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Url', 'exportSnapshotResponse_s3Url' - The presigned URL for the snapshot data.
+--
+-- This URL will be available for 10 minutes, and can be used to download
+-- the snapshot content. If the URL expires, a new one can be requested
+-- using the same operation.
+--
+-- 'httpStatus', 'exportSnapshotResponse_httpStatus' - The response's http status code.
+newExportSnapshotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportSnapshotResponse
+newExportSnapshotResponse pHttpStatus_ =
+  ExportSnapshotResponse'
+    { s3Url = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The presigned URL for the snapshot data.
+--
+-- This URL will be available for 10 minutes, and can be used to download
+-- the snapshot content. If the URL expires, a new one can be requested
+-- using the same operation.
+exportSnapshotResponse_s3Url :: Lens.Lens' ExportSnapshotResponse (Prelude.Maybe Prelude.Text)
+exportSnapshotResponse_s3Url = Lens.lens (\ExportSnapshotResponse' {s3Url} -> s3Url) (\s@ExportSnapshotResponse' {} a -> s {s3Url = a} :: ExportSnapshotResponse)
+
+-- | The response's http status code.
+exportSnapshotResponse_httpStatus :: Lens.Lens' ExportSnapshotResponse Prelude.Int
+exportSnapshotResponse_httpStatus = Lens.lens (\ExportSnapshotResponse' {httpStatus} -> httpStatus) (\s@ExportSnapshotResponse' {} a -> s {httpStatus = a} :: ExportSnapshotResponse)
+
+instance Prelude.NFData ExportSnapshotResponse where
+  rnf ExportSnapshotResponse' {..} =
+    Prelude.rnf s3Url
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetExtension.hs b/gen/Amazonka/GamesParks/GetExtension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetExtension.hs
@@ -0,0 +1,178 @@
+{-# 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.GamesParks.GetExtension
+-- 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 details about a specified extension.
+module Amazonka.GamesParks.GetExtension
+  ( -- * Creating a Request
+    GetExtension (..),
+    newGetExtension,
+
+    -- * Request Lenses
+    getExtension_name,
+    getExtension_namespace,
+
+    -- * Destructuring the Response
+    GetExtensionResponse (..),
+    newGetExtensionResponse,
+
+    -- * Response Lenses
+    getExtensionResponse_extension,
+    getExtensionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetExtension' smart constructor.
+data GetExtension = GetExtension'
+  { -- | The name of the extension.
+    name :: Prelude.Text,
+    -- | The namespace (qualifier) of the extension.
+    namespace :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetExtension' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getExtension_name' - The name of the extension.
+--
+-- 'namespace', 'getExtension_namespace' - The namespace (qualifier) of the extension.
+newGetExtension ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'namespace'
+  Prelude.Text ->
+  GetExtension
+newGetExtension pName_ pNamespace_ =
+  GetExtension'
+    { name = pName_,
+      namespace = pNamespace_
+    }
+
+-- | The name of the extension.
+getExtension_name :: Lens.Lens' GetExtension Prelude.Text
+getExtension_name = Lens.lens (\GetExtension' {name} -> name) (\s@GetExtension' {} a -> s {name = a} :: GetExtension)
+
+-- | The namespace (qualifier) of the extension.
+getExtension_namespace :: Lens.Lens' GetExtension Prelude.Text
+getExtension_namespace = Lens.lens (\GetExtension' {namespace} -> namespace) (\s@GetExtension' {} a -> s {namespace = a} :: GetExtension)
+
+instance Core.AWSRequest GetExtension where
+  type AWSResponse GetExtension = GetExtensionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetExtensionResponse'
+            Prelude.<$> (x Data..?> "Extension")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetExtension where
+  hashWithSalt _salt GetExtension' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+
+instance Prelude.NFData GetExtension where
+  rnf GetExtension' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
+
+instance Data.ToHeaders GetExtension where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetExtension where
+  toPath GetExtension' {..} =
+    Prelude.mconcat
+      [ "/extension/",
+        Data.toBS namespace,
+        "/",
+        Data.toBS name
+      ]
+
+instance Data.ToQuery GetExtension where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetExtensionResponse' smart constructor.
+data GetExtensionResponse = GetExtensionResponse'
+  { -- | Details about the extension.
+    extension :: Prelude.Maybe ExtensionDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetExtensionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extension', 'getExtensionResponse_extension' - Details about the extension.
+--
+-- 'httpStatus', 'getExtensionResponse_httpStatus' - The response's http status code.
+newGetExtensionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetExtensionResponse
+newGetExtensionResponse pHttpStatus_ =
+  GetExtensionResponse'
+    { extension = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the extension.
+getExtensionResponse_extension :: Lens.Lens' GetExtensionResponse (Prelude.Maybe ExtensionDetails)
+getExtensionResponse_extension = Lens.lens (\GetExtensionResponse' {extension} -> extension) (\s@GetExtensionResponse' {} a -> s {extension = a} :: GetExtensionResponse)
+
+-- | The response's http status code.
+getExtensionResponse_httpStatus :: Lens.Lens' GetExtensionResponse Prelude.Int
+getExtensionResponse_httpStatus = Lens.lens (\GetExtensionResponse' {httpStatus} -> httpStatus) (\s@GetExtensionResponse' {} a -> s {httpStatus = a} :: GetExtensionResponse)
+
+instance Prelude.NFData GetExtensionResponse where
+  rnf GetExtensionResponse' {..} =
+    Prelude.rnf extension
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetExtensionVersion.hs b/gen/Amazonka/GamesParks/GetExtensionVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetExtensionVersion.hs
@@ -0,0 +1,201 @@
+{-# 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.GamesParks.GetExtensionVersion
+-- 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 details about a specified extension version.
+module Amazonka.GamesParks.GetExtensionVersion
+  ( -- * Creating a Request
+    GetExtensionVersion (..),
+    newGetExtensionVersion,
+
+    -- * Request Lenses
+    getExtensionVersion_extensionVersion,
+    getExtensionVersion_name,
+    getExtensionVersion_namespace,
+
+    -- * Destructuring the Response
+    GetExtensionVersionResponse (..),
+    newGetExtensionVersionResponse,
+
+    -- * Response Lenses
+    getExtensionVersionResponse_extensionVersion,
+    getExtensionVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetExtensionVersion' smart constructor.
+data GetExtensionVersion = GetExtensionVersion'
+  { -- | The version of the extension.
+    extensionVersion :: Prelude.Text,
+    -- | The name of the extension.
+    name :: Prelude.Text,
+    -- | The namespace (qualifier) of the extension.
+    namespace :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetExtensionVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionVersion', 'getExtensionVersion_extensionVersion' - The version of the extension.
+--
+-- 'name', 'getExtensionVersion_name' - The name of the extension.
+--
+-- 'namespace', 'getExtensionVersion_namespace' - The namespace (qualifier) of the extension.
+newGetExtensionVersion ::
+  -- | 'extensionVersion'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'namespace'
+  Prelude.Text ->
+  GetExtensionVersion
+newGetExtensionVersion
+  pExtensionVersion_
+  pName_
+  pNamespace_ =
+    GetExtensionVersion'
+      { extensionVersion =
+          pExtensionVersion_,
+        name = pName_,
+        namespace = pNamespace_
+      }
+
+-- | The version of the extension.
+getExtensionVersion_extensionVersion :: Lens.Lens' GetExtensionVersion Prelude.Text
+getExtensionVersion_extensionVersion = Lens.lens (\GetExtensionVersion' {extensionVersion} -> extensionVersion) (\s@GetExtensionVersion' {} a -> s {extensionVersion = a} :: GetExtensionVersion)
+
+-- | The name of the extension.
+getExtensionVersion_name :: Lens.Lens' GetExtensionVersion Prelude.Text
+getExtensionVersion_name = Lens.lens (\GetExtensionVersion' {name} -> name) (\s@GetExtensionVersion' {} a -> s {name = a} :: GetExtensionVersion)
+
+-- | The namespace (qualifier) of the extension.
+getExtensionVersion_namespace :: Lens.Lens' GetExtensionVersion Prelude.Text
+getExtensionVersion_namespace = Lens.lens (\GetExtensionVersion' {namespace} -> namespace) (\s@GetExtensionVersion' {} a -> s {namespace = a} :: GetExtensionVersion)
+
+instance Core.AWSRequest GetExtensionVersion where
+  type
+    AWSResponse GetExtensionVersion =
+      GetExtensionVersionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetExtensionVersionResponse'
+            Prelude.<$> (x Data..?> "ExtensionVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetExtensionVersion where
+  hashWithSalt _salt GetExtensionVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` extensionVersion
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+
+instance Prelude.NFData GetExtensionVersion where
+  rnf GetExtensionVersion' {..} =
+    Prelude.rnf extensionVersion
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
+
+instance Data.ToHeaders GetExtensionVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetExtensionVersion where
+  toPath GetExtensionVersion' {..} =
+    Prelude.mconcat
+      [ "/extension/",
+        Data.toBS namespace,
+        "/",
+        Data.toBS name,
+        "/version/",
+        Data.toBS extensionVersion
+      ]
+
+instance Data.ToQuery GetExtensionVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetExtensionVersionResponse' smart constructor.
+data GetExtensionVersionResponse = GetExtensionVersionResponse'
+  { -- | The version of the extension.
+    extensionVersion :: Prelude.Maybe ExtensionVersionDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetExtensionVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionVersion', 'getExtensionVersionResponse_extensionVersion' - The version of the extension.
+--
+-- 'httpStatus', 'getExtensionVersionResponse_httpStatus' - The response's http status code.
+newGetExtensionVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetExtensionVersionResponse
+newGetExtensionVersionResponse pHttpStatus_ =
+  GetExtensionVersionResponse'
+    { extensionVersion =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The version of the extension.
+getExtensionVersionResponse_extensionVersion :: Lens.Lens' GetExtensionVersionResponse (Prelude.Maybe ExtensionVersionDetails)
+getExtensionVersionResponse_extensionVersion = Lens.lens (\GetExtensionVersionResponse' {extensionVersion} -> extensionVersion) (\s@GetExtensionVersionResponse' {} a -> s {extensionVersion = a} :: GetExtensionVersionResponse)
+
+-- | The response's http status code.
+getExtensionVersionResponse_httpStatus :: Lens.Lens' GetExtensionVersionResponse Prelude.Int
+getExtensionVersionResponse_httpStatus = Lens.lens (\GetExtensionVersionResponse' {httpStatus} -> httpStatus) (\s@GetExtensionVersionResponse' {} a -> s {httpStatus = a} :: GetExtensionVersionResponse)
+
+instance Prelude.NFData GetExtensionVersionResponse where
+  rnf GetExtensionVersionResponse' {..} =
+    Prelude.rnf extensionVersion
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetGame.hs b/gen/Amazonka/GamesParks/GetGame.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetGame.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.GamesParks.GetGame
+-- 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 details about a game.
+module Amazonka.GamesParks.GetGame
+  ( -- * Creating a Request
+    GetGame (..),
+    newGetGame,
+
+    -- * Request Lenses
+    getGame_gameName,
+
+    -- * Destructuring the Response
+    GetGameResponse (..),
+    newGetGameResponse,
+
+    -- * Response Lenses
+    getGameResponse_game,
+    getGameResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetGame' smart constructor.
+data GetGame = GetGame'
+  { -- | The name of the game.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGame' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'getGame_gameName' - The name of the game.
+newGetGame ::
+  -- | 'gameName'
+  Prelude.Text ->
+  GetGame
+newGetGame pGameName_ =
+  GetGame' {gameName = pGameName_}
+
+-- | The name of the game.
+getGame_gameName :: Lens.Lens' GetGame Prelude.Text
+getGame_gameName = Lens.lens (\GetGame' {gameName} -> gameName) (\s@GetGame' {} a -> s {gameName = a} :: GetGame)
+
+instance Core.AWSRequest GetGame where
+  type AWSResponse GetGame = GetGameResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetGameResponse'
+            Prelude.<$> (x Data..?> "Game")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetGame where
+  hashWithSalt _salt GetGame' {..} =
+    _salt `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData GetGame where
+  rnf GetGame' {..} = Prelude.rnf gameName
+
+instance Data.ToHeaders GetGame where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetGame where
+  toPath GetGame' {..} =
+    Prelude.mconcat ["/game/", Data.toBS gameName]
+
+instance Data.ToQuery GetGame where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetGameResponse' smart constructor.
+data GetGameResponse = GetGameResponse'
+  { -- | The details of the game.
+    game :: Prelude.Maybe GameDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'game', 'getGameResponse_game' - The details of the game.
+--
+-- 'httpStatus', 'getGameResponse_httpStatus' - The response's http status code.
+newGetGameResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetGameResponse
+newGetGameResponse pHttpStatus_ =
+  GetGameResponse'
+    { game = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the game.
+getGameResponse_game :: Lens.Lens' GetGameResponse (Prelude.Maybe GameDetails)
+getGameResponse_game = Lens.lens (\GetGameResponse' {game} -> game) (\s@GetGameResponse' {} a -> s {game = a} :: GetGameResponse)
+
+-- | The response's http status code.
+getGameResponse_httpStatus :: Lens.Lens' GetGameResponse Prelude.Int
+getGameResponse_httpStatus = Lens.lens (\GetGameResponse' {httpStatus} -> httpStatus) (\s@GetGameResponse' {} a -> s {httpStatus = a} :: GetGameResponse)
+
+instance Prelude.NFData GetGameResponse where
+  rnf GetGameResponse' {..} =
+    Prelude.rnf game
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetGameConfiguration.hs b/gen/Amazonka/GamesParks/GetGameConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetGameConfiguration.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.GamesParks.GetGameConfiguration
+-- 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 configuration of the game.
+module Amazonka.GamesParks.GetGameConfiguration
+  ( -- * Creating a Request
+    GetGameConfiguration (..),
+    newGetGameConfiguration,
+
+    -- * Request Lenses
+    getGameConfiguration_sections,
+    getGameConfiguration_gameName,
+
+    -- * Destructuring the Response
+    GetGameConfigurationResponse (..),
+    newGetGameConfigurationResponse,
+
+    -- * Response Lenses
+    getGameConfigurationResponse_gameConfiguration,
+    getGameConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetGameConfiguration' smart constructor.
+data GetGameConfiguration = GetGameConfiguration'
+  { -- | The list of sections to return.
+    sections :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of the game.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGameConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sections', 'getGameConfiguration_sections' - The list of sections to return.
+--
+-- 'gameName', 'getGameConfiguration_gameName' - The name of the game.
+newGetGameConfiguration ::
+  -- | 'gameName'
+  Prelude.Text ->
+  GetGameConfiguration
+newGetGameConfiguration pGameName_ =
+  GetGameConfiguration'
+    { sections = Prelude.Nothing,
+      gameName = pGameName_
+    }
+
+-- | The list of sections to return.
+getGameConfiguration_sections :: Lens.Lens' GetGameConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getGameConfiguration_sections = Lens.lens (\GetGameConfiguration' {sections} -> sections) (\s@GetGameConfiguration' {} a -> s {sections = a} :: GetGameConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the game.
+getGameConfiguration_gameName :: Lens.Lens' GetGameConfiguration Prelude.Text
+getGameConfiguration_gameName = Lens.lens (\GetGameConfiguration' {gameName} -> gameName) (\s@GetGameConfiguration' {} a -> s {gameName = a} :: GetGameConfiguration)
+
+instance Core.AWSRequest GetGameConfiguration where
+  type
+    AWSResponse GetGameConfiguration =
+      GetGameConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetGameConfigurationResponse'
+            Prelude.<$> (x Data..?> "GameConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetGameConfiguration where
+  hashWithSalt _salt GetGameConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` sections
+      `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData GetGameConfiguration where
+  rnf GetGameConfiguration' {..} =
+    Prelude.rnf sections
+      `Prelude.seq` Prelude.rnf gameName
+
+instance Data.ToHeaders GetGameConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetGameConfiguration where
+  toPath GetGameConfiguration' {..} =
+    Prelude.mconcat
+      ["/game/", Data.toBS gameName, "/configuration"]
+
+instance Data.ToQuery GetGameConfiguration where
+  toQuery GetGameConfiguration' {..} =
+    Prelude.mconcat
+      [ "Sections"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> sections)
+      ]
+
+-- | /See:/ 'newGetGameConfigurationResponse' smart constructor.
+data GetGameConfigurationResponse = GetGameConfigurationResponse'
+  { -- | Details about the game configuration.
+    gameConfiguration :: Prelude.Maybe GameConfigurationDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGameConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameConfiguration', 'getGameConfigurationResponse_gameConfiguration' - Details about the game configuration.
+--
+-- 'httpStatus', 'getGameConfigurationResponse_httpStatus' - The response's http status code.
+newGetGameConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetGameConfigurationResponse
+newGetGameConfigurationResponse pHttpStatus_ =
+  GetGameConfigurationResponse'
+    { gameConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the game configuration.
+getGameConfigurationResponse_gameConfiguration :: Lens.Lens' GetGameConfigurationResponse (Prelude.Maybe GameConfigurationDetails)
+getGameConfigurationResponse_gameConfiguration = Lens.lens (\GetGameConfigurationResponse' {gameConfiguration} -> gameConfiguration) (\s@GetGameConfigurationResponse' {} a -> s {gameConfiguration = a} :: GetGameConfigurationResponse)
+
+-- | The response's http status code.
+getGameConfigurationResponse_httpStatus :: Lens.Lens' GetGameConfigurationResponse Prelude.Int
+getGameConfigurationResponse_httpStatus = Lens.lens (\GetGameConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetGameConfigurationResponse' {} a -> s {httpStatus = a} :: GetGameConfigurationResponse)
+
+instance Prelude.NFData GetGameConfigurationResponse where
+  rnf GetGameConfigurationResponse' {..} =
+    Prelude.rnf gameConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetGeneratedCodeJob.hs b/gen/Amazonka/GamesParks/GetGeneratedCodeJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetGeneratedCodeJob.hs
@@ -0,0 +1,200 @@
+{-# 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.GamesParks.GetGeneratedCodeJob
+-- 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 details about a job that is generating code for a snapshot.
+module Amazonka.GamesParks.GetGeneratedCodeJob
+  ( -- * Creating a Request
+    GetGeneratedCodeJob (..),
+    newGetGeneratedCodeJob,
+
+    -- * Request Lenses
+    getGeneratedCodeJob_gameName,
+    getGeneratedCodeJob_jobId,
+    getGeneratedCodeJob_snapshotId,
+
+    -- * Destructuring the Response
+    GetGeneratedCodeJobResponse (..),
+    newGetGeneratedCodeJobResponse,
+
+    -- * Response Lenses
+    getGeneratedCodeJobResponse_generatedCodeJob,
+    getGeneratedCodeJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetGeneratedCodeJob' smart constructor.
+data GetGeneratedCodeJob = GetGeneratedCodeJob'
+  { -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The identifier of the code generation job.
+    jobId :: Prelude.Text,
+    -- | The identifier of the snapshot for the code generation job.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGeneratedCodeJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'getGeneratedCodeJob_gameName' - The name of the game.
+--
+-- 'jobId', 'getGeneratedCodeJob_jobId' - The identifier of the code generation job.
+--
+-- 'snapshotId', 'getGeneratedCodeJob_snapshotId' - The identifier of the snapshot for the code generation job.
+newGetGeneratedCodeJob ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  GetGeneratedCodeJob
+newGetGeneratedCodeJob
+  pGameName_
+  pJobId_
+  pSnapshotId_ =
+    GetGeneratedCodeJob'
+      { gameName = pGameName_,
+        jobId = pJobId_,
+        snapshotId = pSnapshotId_
+      }
+
+-- | The name of the game.
+getGeneratedCodeJob_gameName :: Lens.Lens' GetGeneratedCodeJob Prelude.Text
+getGeneratedCodeJob_gameName = Lens.lens (\GetGeneratedCodeJob' {gameName} -> gameName) (\s@GetGeneratedCodeJob' {} a -> s {gameName = a} :: GetGeneratedCodeJob)
+
+-- | The identifier of the code generation job.
+getGeneratedCodeJob_jobId :: Lens.Lens' GetGeneratedCodeJob Prelude.Text
+getGeneratedCodeJob_jobId = Lens.lens (\GetGeneratedCodeJob' {jobId} -> jobId) (\s@GetGeneratedCodeJob' {} a -> s {jobId = a} :: GetGeneratedCodeJob)
+
+-- | The identifier of the snapshot for the code generation job.
+getGeneratedCodeJob_snapshotId :: Lens.Lens' GetGeneratedCodeJob Prelude.Text
+getGeneratedCodeJob_snapshotId = Lens.lens (\GetGeneratedCodeJob' {snapshotId} -> snapshotId) (\s@GetGeneratedCodeJob' {} a -> s {snapshotId = a} :: GetGeneratedCodeJob)
+
+instance Core.AWSRequest GetGeneratedCodeJob where
+  type
+    AWSResponse GetGeneratedCodeJob =
+      GetGeneratedCodeJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetGeneratedCodeJobResponse'
+            Prelude.<$> (x Data..?> "GeneratedCodeJob")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetGeneratedCodeJob where
+  hashWithSalt _salt GetGeneratedCodeJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData GetGeneratedCodeJob where
+  rnf GetGeneratedCodeJob' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders GetGeneratedCodeJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetGeneratedCodeJob where
+  toPath GetGeneratedCodeJob' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/snapshot/",
+        Data.toBS snapshotId,
+        "/generated-sdk-code-job/",
+        Data.toBS jobId
+      ]
+
+instance Data.ToQuery GetGeneratedCodeJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetGeneratedCodeJobResponse' smart constructor.
+data GetGeneratedCodeJobResponse = GetGeneratedCodeJobResponse'
+  { -- | Details about the generated code job.
+    generatedCodeJob :: Prelude.Maybe GeneratedCodeJobDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGeneratedCodeJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'generatedCodeJob', 'getGeneratedCodeJobResponse_generatedCodeJob' - Details about the generated code job.
+--
+-- 'httpStatus', 'getGeneratedCodeJobResponse_httpStatus' - The response's http status code.
+newGetGeneratedCodeJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetGeneratedCodeJobResponse
+newGetGeneratedCodeJobResponse pHttpStatus_ =
+  GetGeneratedCodeJobResponse'
+    { generatedCodeJob =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the generated code job.
+getGeneratedCodeJobResponse_generatedCodeJob :: Lens.Lens' GetGeneratedCodeJobResponse (Prelude.Maybe GeneratedCodeJobDetails)
+getGeneratedCodeJobResponse_generatedCodeJob = Lens.lens (\GetGeneratedCodeJobResponse' {generatedCodeJob} -> generatedCodeJob) (\s@GetGeneratedCodeJobResponse' {} a -> s {generatedCodeJob = a} :: GetGeneratedCodeJobResponse)
+
+-- | The response's http status code.
+getGeneratedCodeJobResponse_httpStatus :: Lens.Lens' GetGeneratedCodeJobResponse Prelude.Int
+getGeneratedCodeJobResponse_httpStatus = Lens.lens (\GetGeneratedCodeJobResponse' {httpStatus} -> httpStatus) (\s@GetGeneratedCodeJobResponse' {} a -> s {httpStatus = a} :: GetGeneratedCodeJobResponse)
+
+instance Prelude.NFData GetGeneratedCodeJobResponse where
+  rnf GetGeneratedCodeJobResponse' {..} =
+    Prelude.rnf generatedCodeJob
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetPlayerConnectionStatus.hs b/gen/Amazonka/GamesParks/GetPlayerConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetPlayerConnectionStatus.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.GamesParks.GetPlayerConnectionStatus
+-- 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 status of a player\'s connection to the game runtime.
+--
+-- It\'s possible for a single player to have multiple connections to the
+-- game runtime. If a player is not connected, this operation returns an
+-- empty list.
+module Amazonka.GamesParks.GetPlayerConnectionStatus
+  ( -- * Creating a Request
+    GetPlayerConnectionStatus (..),
+    newGetPlayerConnectionStatus,
+
+    -- * Request Lenses
+    getPlayerConnectionStatus_gameName,
+    getPlayerConnectionStatus_playerId,
+    getPlayerConnectionStatus_stageName,
+
+    -- * Destructuring the Response
+    GetPlayerConnectionStatusResponse (..),
+    newGetPlayerConnectionStatusResponse,
+
+    -- * Response Lenses
+    getPlayerConnectionStatusResponse_connections,
+    getPlayerConnectionStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPlayerConnectionStatus' smart constructor.
+data GetPlayerConnectionStatus = GetPlayerConnectionStatus'
+  { -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The unique identifier representing a player.
+    playerId :: Prelude.Text,
+    -- | The name of the stage.
+    stageName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPlayerConnectionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'getPlayerConnectionStatus_gameName' - The name of the game.
+--
+-- 'playerId', 'getPlayerConnectionStatus_playerId' - The unique identifier representing a player.
+--
+-- 'stageName', 'getPlayerConnectionStatus_stageName' - The name of the stage.
+newGetPlayerConnectionStatus ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'playerId'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  GetPlayerConnectionStatus
+newGetPlayerConnectionStatus
+  pGameName_
+  pPlayerId_
+  pStageName_ =
+    GetPlayerConnectionStatus'
+      { gameName = pGameName_,
+        playerId = pPlayerId_,
+        stageName = pStageName_
+      }
+
+-- | The name of the game.
+getPlayerConnectionStatus_gameName :: Lens.Lens' GetPlayerConnectionStatus Prelude.Text
+getPlayerConnectionStatus_gameName = Lens.lens (\GetPlayerConnectionStatus' {gameName} -> gameName) (\s@GetPlayerConnectionStatus' {} a -> s {gameName = a} :: GetPlayerConnectionStatus)
+
+-- | The unique identifier representing a player.
+getPlayerConnectionStatus_playerId :: Lens.Lens' GetPlayerConnectionStatus Prelude.Text
+getPlayerConnectionStatus_playerId = Lens.lens (\GetPlayerConnectionStatus' {playerId} -> playerId) (\s@GetPlayerConnectionStatus' {} a -> s {playerId = a} :: GetPlayerConnectionStatus)
+
+-- | The name of the stage.
+getPlayerConnectionStatus_stageName :: Lens.Lens' GetPlayerConnectionStatus Prelude.Text
+getPlayerConnectionStatus_stageName = Lens.lens (\GetPlayerConnectionStatus' {stageName} -> stageName) (\s@GetPlayerConnectionStatus' {} a -> s {stageName = a} :: GetPlayerConnectionStatus)
+
+instance Core.AWSRequest GetPlayerConnectionStatus where
+  type
+    AWSResponse GetPlayerConnectionStatus =
+      GetPlayerConnectionStatusResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPlayerConnectionStatusResponse'
+            Prelude.<$> (x Data..?> "Connections" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPlayerConnectionStatus where
+  hashWithSalt _salt GetPlayerConnectionStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` playerId
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData GetPlayerConnectionStatus where
+  rnf GetPlayerConnectionStatus' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf playerId
+      `Prelude.seq` Prelude.rnf stageName
+
+instance Data.ToHeaders GetPlayerConnectionStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetPlayerConnectionStatus where
+  toPath GetPlayerConnectionStatus' {..} =
+    Prelude.mconcat
+      [ "/runtime/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName,
+        "/player/",
+        Data.toBS playerId,
+        "/connection"
+      ]
+
+instance Data.ToQuery GetPlayerConnectionStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetPlayerConnectionStatusResponse' smart constructor.
+data GetPlayerConnectionStatusResponse = GetPlayerConnectionStatusResponse'
+  { -- | The list of connection ids, one for each connection in use by the
+    -- player.
+    connections :: Prelude.Maybe [Connection],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPlayerConnectionStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connections', 'getPlayerConnectionStatusResponse_connections' - The list of connection ids, one for each connection in use by the
+-- player.
+--
+-- 'httpStatus', 'getPlayerConnectionStatusResponse_httpStatus' - The response's http status code.
+newGetPlayerConnectionStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPlayerConnectionStatusResponse
+newGetPlayerConnectionStatusResponse pHttpStatus_ =
+  GetPlayerConnectionStatusResponse'
+    { connections =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of connection ids, one for each connection in use by the
+-- player.
+getPlayerConnectionStatusResponse_connections :: Lens.Lens' GetPlayerConnectionStatusResponse (Prelude.Maybe [Connection])
+getPlayerConnectionStatusResponse_connections = Lens.lens (\GetPlayerConnectionStatusResponse' {connections} -> connections) (\s@GetPlayerConnectionStatusResponse' {} a -> s {connections = a} :: GetPlayerConnectionStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getPlayerConnectionStatusResponse_httpStatus :: Lens.Lens' GetPlayerConnectionStatusResponse Prelude.Int
+getPlayerConnectionStatusResponse_httpStatus = Lens.lens (\GetPlayerConnectionStatusResponse' {httpStatus} -> httpStatus) (\s@GetPlayerConnectionStatusResponse' {} a -> s {httpStatus = a} :: GetPlayerConnectionStatusResponse)
+
+instance
+  Prelude.NFData
+    GetPlayerConnectionStatusResponse
+  where
+  rnf GetPlayerConnectionStatusResponse' {..} =
+    Prelude.rnf connections
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetSnapshot.hs b/gen/Amazonka/GamesParks/GetSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetSnapshot.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.GetSnapshot
+-- 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 copy of the game configuration in a snapshot.
+module Amazonka.GamesParks.GetSnapshot
+  ( -- * Creating a Request
+    GetSnapshot (..),
+    newGetSnapshot,
+
+    -- * Request Lenses
+    getSnapshot_sections,
+    getSnapshot_gameName,
+    getSnapshot_snapshotId,
+
+    -- * Destructuring the Response
+    GetSnapshotResponse (..),
+    newGetSnapshotResponse,
+
+    -- * Response Lenses
+    getSnapshotResponse_snapshot,
+    getSnapshotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSnapshot' smart constructor.
+data GetSnapshot = GetSnapshot'
+  { -- | The list of game configuration sections to be described.
+    sections :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The identifier of the snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sections', 'getSnapshot_sections' - The list of game configuration sections to be described.
+--
+-- 'gameName', 'getSnapshot_gameName' - The name of the game.
+--
+-- 'snapshotId', 'getSnapshot_snapshotId' - The identifier of the snapshot.
+newGetSnapshot ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  GetSnapshot
+newGetSnapshot pGameName_ pSnapshotId_ =
+  GetSnapshot'
+    { sections = Prelude.Nothing,
+      gameName = pGameName_,
+      snapshotId = pSnapshotId_
+    }
+
+-- | The list of game configuration sections to be described.
+getSnapshot_sections :: Lens.Lens' GetSnapshot (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getSnapshot_sections = Lens.lens (\GetSnapshot' {sections} -> sections) (\s@GetSnapshot' {} a -> s {sections = a} :: GetSnapshot) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the game.
+getSnapshot_gameName :: Lens.Lens' GetSnapshot Prelude.Text
+getSnapshot_gameName = Lens.lens (\GetSnapshot' {gameName} -> gameName) (\s@GetSnapshot' {} a -> s {gameName = a} :: GetSnapshot)
+
+-- | The identifier of the snapshot.
+getSnapshot_snapshotId :: Lens.Lens' GetSnapshot Prelude.Text
+getSnapshot_snapshotId = Lens.lens (\GetSnapshot' {snapshotId} -> snapshotId) (\s@GetSnapshot' {} a -> s {snapshotId = a} :: GetSnapshot)
+
+instance Core.AWSRequest GetSnapshot where
+  type AWSResponse GetSnapshot = GetSnapshotResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSnapshotResponse'
+            Prelude.<$> (x Data..?> "Snapshot")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSnapshot where
+  hashWithSalt _salt GetSnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` sections
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData GetSnapshot where
+  rnf GetSnapshot' {..} =
+    Prelude.rnf sections
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders GetSnapshot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSnapshot where
+  toPath GetSnapshot' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/snapshot/",
+        Data.toBS snapshotId
+      ]
+
+instance Data.ToQuery GetSnapshot where
+  toQuery GetSnapshot' {..} =
+    Prelude.mconcat
+      [ "Sections"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> sections)
+      ]
+
+-- | /See:/ 'newGetSnapshotResponse' smart constructor.
+data GetSnapshotResponse = GetSnapshotResponse'
+  { -- | Properties that provide details of the snapshot.
+    snapshot :: Prelude.Maybe SnapshotDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSnapshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snapshot', 'getSnapshotResponse_snapshot' - Properties that provide details of the snapshot.
+--
+-- 'httpStatus', 'getSnapshotResponse_httpStatus' - The response's http status code.
+newGetSnapshotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSnapshotResponse
+newGetSnapshotResponse pHttpStatus_ =
+  GetSnapshotResponse'
+    { snapshot = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that provide details of the snapshot.
+getSnapshotResponse_snapshot :: Lens.Lens' GetSnapshotResponse (Prelude.Maybe SnapshotDetails)
+getSnapshotResponse_snapshot = Lens.lens (\GetSnapshotResponse' {snapshot} -> snapshot) (\s@GetSnapshotResponse' {} a -> s {snapshot = a} :: GetSnapshotResponse)
+
+-- | The response's http status code.
+getSnapshotResponse_httpStatus :: Lens.Lens' GetSnapshotResponse Prelude.Int
+getSnapshotResponse_httpStatus = Lens.lens (\GetSnapshotResponse' {httpStatus} -> httpStatus) (\s@GetSnapshotResponse' {} a -> s {httpStatus = a} :: GetSnapshotResponse)
+
+instance Prelude.NFData GetSnapshotResponse where
+  rnf GetSnapshotResponse' {..} =
+    Prelude.rnf snapshot
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetStage.hs b/gen/Amazonka/GamesParks/GetStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetStage.hs
@@ -0,0 +1,178 @@
+{-# 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.GamesParks.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 information about a stage.
+module Amazonka.GamesParks.GetStage
+  ( -- * Creating a Request
+    GetStage (..),
+    newGetStage,
+
+    -- * Request Lenses
+    getStage_gameName,
+    getStage_stageName,
+
+    -- * Destructuring the Response
+    GetStageResponse (..),
+    newGetStageResponse,
+
+    -- * Response Lenses
+    getStageResponse_stage,
+    getStageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+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 name of the game.
+    gameName :: Prelude.Text,
+    -- | The name of the stage.
+    stageName :: 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:
+--
+-- 'gameName', 'getStage_gameName' - The name of the game.
+--
+-- 'stageName', 'getStage_stageName' - The name of the stage.
+newGetStage ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  GetStage
+newGetStage pGameName_ pStageName_ =
+  GetStage'
+    { gameName = pGameName_,
+      stageName = pStageName_
+    }
+
+-- | The name of the game.
+getStage_gameName :: Lens.Lens' GetStage Prelude.Text
+getStage_gameName = Lens.lens (\GetStage' {gameName} -> gameName) (\s@GetStage' {} a -> s {gameName = a} :: GetStage)
+
+-- | The name of the stage.
+getStage_stageName :: Lens.Lens' GetStage Prelude.Text
+getStage_stageName = Lens.lens (\GetStage' {stageName} -> stageName) (\s@GetStage' {} a -> s {stageName = 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..?> "Stage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStage where
+  hashWithSalt _salt GetStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData GetStage where
+  rnf GetStage' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf stageName
+
+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
+      [ "/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName
+      ]
+
+instance Data.ToQuery GetStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetStageResponse' smart constructor.
+data GetStageResponse = GetStageResponse'
+  { -- | Properties that provide details of the stage.
+    stage :: Prelude.Maybe StageDetails,
+    -- | 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:
+--
+-- 'stage', 'getStageResponse_stage' - Properties that provide details of the stage.
+--
+-- 'httpStatus', 'getStageResponse_httpStatus' - The response's http status code.
+newGetStageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStageResponse
+newGetStageResponse pHttpStatus_ =
+  GetStageResponse'
+    { stage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that provide details of the stage.
+getStageResponse_stage :: Lens.Lens' GetStageResponse (Prelude.Maybe StageDetails)
+getStageResponse_stage = Lens.lens (\GetStageResponse' {stage} -> stage) (\s@GetStageResponse' {} a -> s {stage = a} :: GetStageResponse)
+
+-- | 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 stage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/GetStageDeployment.hs b/gen/Amazonka/GamesParks/GetStageDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/GetStageDeployment.hs
@@ -0,0 +1,199 @@
+{-# 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.GamesParks.GetStageDeployment
+-- 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 information about a stage deployment.
+module Amazonka.GamesParks.GetStageDeployment
+  ( -- * Creating a Request
+    GetStageDeployment (..),
+    newGetStageDeployment,
+
+    -- * Request Lenses
+    getStageDeployment_deploymentId,
+    getStageDeployment_gameName,
+    getStageDeployment_stageName,
+
+    -- * Destructuring the Response
+    GetStageDeploymentResponse (..),
+    newGetStageDeploymentResponse,
+
+    -- * Response Lenses
+    getStageDeploymentResponse_stageDeployment,
+    getStageDeploymentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetStageDeployment' smart constructor.
+data GetStageDeployment = GetStageDeployment'
+  { -- | The identifier of the stage deployment. @StartStageDeployment@ returns
+    -- the identifier that you use here.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The name of the stage.
+    stageName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStageDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentId', 'getStageDeployment_deploymentId' - The identifier of the stage deployment. @StartStageDeployment@ returns
+-- the identifier that you use here.
+--
+-- 'gameName', 'getStageDeployment_gameName' - The name of the game.
+--
+-- 'stageName', 'getStageDeployment_stageName' - The name of the stage.
+newGetStageDeployment ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  GetStageDeployment
+newGetStageDeployment pGameName_ pStageName_ =
+  GetStageDeployment'
+    { deploymentId = Prelude.Nothing,
+      gameName = pGameName_,
+      stageName = pStageName_
+    }
+
+-- | The identifier of the stage deployment. @StartStageDeployment@ returns
+-- the identifier that you use here.
+getStageDeployment_deploymentId :: Lens.Lens' GetStageDeployment (Prelude.Maybe Prelude.Text)
+getStageDeployment_deploymentId = Lens.lens (\GetStageDeployment' {deploymentId} -> deploymentId) (\s@GetStageDeployment' {} a -> s {deploymentId = a} :: GetStageDeployment)
+
+-- | The name of the game.
+getStageDeployment_gameName :: Lens.Lens' GetStageDeployment Prelude.Text
+getStageDeployment_gameName = Lens.lens (\GetStageDeployment' {gameName} -> gameName) (\s@GetStageDeployment' {} a -> s {gameName = a} :: GetStageDeployment)
+
+-- | The name of the stage.
+getStageDeployment_stageName :: Lens.Lens' GetStageDeployment Prelude.Text
+getStageDeployment_stageName = Lens.lens (\GetStageDeployment' {stageName} -> stageName) (\s@GetStageDeployment' {} a -> s {stageName = a} :: GetStageDeployment)
+
+instance Core.AWSRequest GetStageDeployment where
+  type
+    AWSResponse GetStageDeployment =
+      GetStageDeploymentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetStageDeploymentResponse'
+            Prelude.<$> (x Data..?> "StageDeployment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetStageDeployment where
+  hashWithSalt _salt GetStageDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData GetStageDeployment where
+  rnf GetStageDeployment' {..} =
+    Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf stageName
+
+instance Data.ToHeaders GetStageDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetStageDeployment where
+  toPath GetStageDeployment' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName,
+        "/deployment"
+      ]
+
+instance Data.ToQuery GetStageDeployment where
+  toQuery GetStageDeployment' {..} =
+    Prelude.mconcat
+      ["DeploymentId" Data.=: deploymentId]
+
+-- | /See:/ 'newGetStageDeploymentResponse' smart constructor.
+data GetStageDeploymentResponse = GetStageDeploymentResponse'
+  { -- | Properties that provide details of the stage deployment.
+    stageDeployment :: Prelude.Maybe StageDeploymentDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetStageDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stageDeployment', 'getStageDeploymentResponse_stageDeployment' - Properties that provide details of the stage deployment.
+--
+-- 'httpStatus', 'getStageDeploymentResponse_httpStatus' - The response's http status code.
+newGetStageDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetStageDeploymentResponse
+newGetStageDeploymentResponse pHttpStatus_ =
+  GetStageDeploymentResponse'
+    { stageDeployment =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that provide details of the stage deployment.
+getStageDeploymentResponse_stageDeployment :: Lens.Lens' GetStageDeploymentResponse (Prelude.Maybe StageDeploymentDetails)
+getStageDeploymentResponse_stageDeployment = Lens.lens (\GetStageDeploymentResponse' {stageDeployment} -> stageDeployment) (\s@GetStageDeploymentResponse' {} a -> s {stageDeployment = a} :: GetStageDeploymentResponse)
+
+-- | The response's http status code.
+getStageDeploymentResponse_httpStatus :: Lens.Lens' GetStageDeploymentResponse Prelude.Int
+getStageDeploymentResponse_httpStatus = Lens.lens (\GetStageDeploymentResponse' {httpStatus} -> httpStatus) (\s@GetStageDeploymentResponse' {} a -> s {httpStatus = a} :: GetStageDeploymentResponse)
+
+instance Prelude.NFData GetStageDeploymentResponse where
+  rnf GetStageDeploymentResponse' {..} =
+    Prelude.rnf stageDeployment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ImportGameConfiguration.hs b/gen/Amazonka/GamesParks/ImportGameConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ImportGameConfiguration.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.ImportGameConfiguration
+-- 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 a game configuration.
+--
+-- This operation replaces the current configuration of the game with the
+-- provided input. This is not a reversible operation. If you want to
+-- preserve the previous configuration, use @CreateSnapshot@ to make a new
+-- snapshot before importing.
+module Amazonka.GamesParks.ImportGameConfiguration
+  ( -- * Creating a Request
+    ImportGameConfiguration (..),
+    newImportGameConfiguration,
+
+    -- * Request Lenses
+    importGameConfiguration_gameName,
+    importGameConfiguration_importSource,
+
+    -- * Destructuring the Response
+    ImportGameConfigurationResponse (..),
+    newImportGameConfigurationResponse,
+
+    -- * Response Lenses
+    importGameConfigurationResponse_gameConfiguration,
+    importGameConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportGameConfiguration' smart constructor.
+data ImportGameConfiguration = ImportGameConfiguration'
+  { -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The source used to import configuration sections.
+    importSource :: ImportGameConfigurationSource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportGameConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'importGameConfiguration_gameName' - The name of the game.
+--
+-- 'importSource', 'importGameConfiguration_importSource' - The source used to import configuration sections.
+newImportGameConfiguration ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'importSource'
+  ImportGameConfigurationSource ->
+  ImportGameConfiguration
+newImportGameConfiguration pGameName_ pImportSource_ =
+  ImportGameConfiguration'
+    { gameName = pGameName_,
+      importSource = pImportSource_
+    }
+
+-- | The name of the game.
+importGameConfiguration_gameName :: Lens.Lens' ImportGameConfiguration Prelude.Text
+importGameConfiguration_gameName = Lens.lens (\ImportGameConfiguration' {gameName} -> gameName) (\s@ImportGameConfiguration' {} a -> s {gameName = a} :: ImportGameConfiguration)
+
+-- | The source used to import configuration sections.
+importGameConfiguration_importSource :: Lens.Lens' ImportGameConfiguration ImportGameConfigurationSource
+importGameConfiguration_importSource = Lens.lens (\ImportGameConfiguration' {importSource} -> importSource) (\s@ImportGameConfiguration' {} a -> s {importSource = a} :: ImportGameConfiguration)
+
+instance Core.AWSRequest ImportGameConfiguration where
+  type
+    AWSResponse ImportGameConfiguration =
+      ImportGameConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportGameConfigurationResponse'
+            Prelude.<$> (x Data..?> "GameConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportGameConfiguration where
+  hashWithSalt _salt ImportGameConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` importSource
+
+instance Prelude.NFData ImportGameConfiguration where
+  rnf ImportGameConfiguration' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf importSource
+
+instance Data.ToHeaders ImportGameConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportGameConfiguration where
+  toJSON ImportGameConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ImportSource" Data..= importSource)]
+      )
+
+instance Data.ToPath ImportGameConfiguration where
+  toPath ImportGameConfiguration' {..} =
+    Prelude.mconcat
+      ["/game/", Data.toBS gameName, "/configuration"]
+
+instance Data.ToQuery ImportGameConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportGameConfigurationResponse' smart constructor.
+data ImportGameConfigurationResponse = ImportGameConfigurationResponse'
+  { -- | Details about the game configuration.
+    gameConfiguration :: Prelude.Maybe GameConfigurationDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportGameConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameConfiguration', 'importGameConfigurationResponse_gameConfiguration' - Details about the game configuration.
+--
+-- 'httpStatus', 'importGameConfigurationResponse_httpStatus' - The response's http status code.
+newImportGameConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportGameConfigurationResponse
+newImportGameConfigurationResponse pHttpStatus_ =
+  ImportGameConfigurationResponse'
+    { gameConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the game configuration.
+importGameConfigurationResponse_gameConfiguration :: Lens.Lens' ImportGameConfigurationResponse (Prelude.Maybe GameConfigurationDetails)
+importGameConfigurationResponse_gameConfiguration = Lens.lens (\ImportGameConfigurationResponse' {gameConfiguration} -> gameConfiguration) (\s@ImportGameConfigurationResponse' {} a -> s {gameConfiguration = a} :: ImportGameConfigurationResponse)
+
+-- | The response's http status code.
+importGameConfigurationResponse_httpStatus :: Lens.Lens' ImportGameConfigurationResponse Prelude.Int
+importGameConfigurationResponse_httpStatus = Lens.lens (\ImportGameConfigurationResponse' {httpStatus} -> httpStatus) (\s@ImportGameConfigurationResponse' {} a -> s {httpStatus = a} :: ImportGameConfigurationResponse)
+
+instance
+  Prelude.NFData
+    ImportGameConfigurationResponse
+  where
+  rnf ImportGameConfigurationResponse' {..} =
+    Prelude.rnf gameConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/Lens.hs b/gen/Amazonka/GamesParks/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Lens.hs
@@ -0,0 +1,414 @@
+{-# 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.GamesParks.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.GamesParks.Lens
+  ( -- * Operations
+
+    -- ** CreateGame
+    createGame_clientToken,
+    createGame_description,
+    createGame_tags,
+    createGame_gameName,
+    createGameResponse_game,
+    createGameResponse_httpStatus,
+
+    -- ** CreateSnapshot
+    createSnapshot_description,
+    createSnapshot_gameName,
+    createSnapshotResponse_snapshot,
+    createSnapshotResponse_httpStatus,
+
+    -- ** CreateStage
+    createStage_clientToken,
+    createStage_description,
+    createStage_tags,
+    createStage_gameName,
+    createStage_role,
+    createStage_stageName,
+    createStageResponse_stage,
+    createStageResponse_httpStatus,
+
+    -- ** DeleteGame
+    deleteGame_gameName,
+    deleteGameResponse_httpStatus,
+
+    -- ** DeleteStage
+    deleteStage_gameName,
+    deleteStage_stageName,
+    deleteStageResponse_httpStatus,
+
+    -- ** DisconnectPlayer
+    disconnectPlayer_gameName,
+    disconnectPlayer_playerId,
+    disconnectPlayer_stageName,
+    disconnectPlayerResponse_disconnectFailures,
+    disconnectPlayerResponse_disconnectSuccesses,
+    disconnectPlayerResponse_httpStatus,
+
+    -- ** ExportSnapshot
+    exportSnapshot_gameName,
+    exportSnapshot_snapshotId,
+    exportSnapshotResponse_s3Url,
+    exportSnapshotResponse_httpStatus,
+
+    -- ** GetExtension
+    getExtension_name,
+    getExtension_namespace,
+    getExtensionResponse_extension,
+    getExtensionResponse_httpStatus,
+
+    -- ** GetExtensionVersion
+    getExtensionVersion_extensionVersion,
+    getExtensionVersion_name,
+    getExtensionVersion_namespace,
+    getExtensionVersionResponse_extensionVersion,
+    getExtensionVersionResponse_httpStatus,
+
+    -- ** GetGame
+    getGame_gameName,
+    getGameResponse_game,
+    getGameResponse_httpStatus,
+
+    -- ** GetGameConfiguration
+    getGameConfiguration_sections,
+    getGameConfiguration_gameName,
+    getGameConfigurationResponse_gameConfiguration,
+    getGameConfigurationResponse_httpStatus,
+
+    -- ** GetGeneratedCodeJob
+    getGeneratedCodeJob_gameName,
+    getGeneratedCodeJob_jobId,
+    getGeneratedCodeJob_snapshotId,
+    getGeneratedCodeJobResponse_generatedCodeJob,
+    getGeneratedCodeJobResponse_httpStatus,
+
+    -- ** GetPlayerConnectionStatus
+    getPlayerConnectionStatus_gameName,
+    getPlayerConnectionStatus_playerId,
+    getPlayerConnectionStatus_stageName,
+    getPlayerConnectionStatusResponse_connections,
+    getPlayerConnectionStatusResponse_httpStatus,
+
+    -- ** GetSnapshot
+    getSnapshot_sections,
+    getSnapshot_gameName,
+    getSnapshot_snapshotId,
+    getSnapshotResponse_snapshot,
+    getSnapshotResponse_httpStatus,
+
+    -- ** GetStage
+    getStage_gameName,
+    getStage_stageName,
+    getStageResponse_stage,
+    getStageResponse_httpStatus,
+
+    -- ** GetStageDeployment
+    getStageDeployment_deploymentId,
+    getStageDeployment_gameName,
+    getStageDeployment_stageName,
+    getStageDeploymentResponse_stageDeployment,
+    getStageDeploymentResponse_httpStatus,
+
+    -- ** ImportGameConfiguration
+    importGameConfiguration_gameName,
+    importGameConfiguration_importSource,
+    importGameConfigurationResponse_gameConfiguration,
+    importGameConfigurationResponse_httpStatus,
+
+    -- ** ListExtensionVersions
+    listExtensionVersions_maxResults,
+    listExtensionVersions_nextToken,
+    listExtensionVersions_name,
+    listExtensionVersions_namespace,
+    listExtensionVersionsResponse_extensionVersions,
+    listExtensionVersionsResponse_nextToken,
+    listExtensionVersionsResponse_httpStatus,
+
+    -- ** ListExtensions
+    listExtensions_maxResults,
+    listExtensions_nextToken,
+    listExtensionsResponse_extensions,
+    listExtensionsResponse_nextToken,
+    listExtensionsResponse_httpStatus,
+
+    -- ** ListGames
+    listGames_maxResults,
+    listGames_nextToken,
+    listGamesResponse_games,
+    listGamesResponse_nextToken,
+    listGamesResponse_httpStatus,
+
+    -- ** ListGeneratedCodeJobs
+    listGeneratedCodeJobs_maxResults,
+    listGeneratedCodeJobs_nextToken,
+    listGeneratedCodeJobs_gameName,
+    listGeneratedCodeJobs_snapshotId,
+    listGeneratedCodeJobsResponse_generatedCodeJobs,
+    listGeneratedCodeJobsResponse_nextToken,
+    listGeneratedCodeJobsResponse_httpStatus,
+
+    -- ** ListSnapshots
+    listSnapshots_maxResults,
+    listSnapshots_nextToken,
+    listSnapshots_gameName,
+    listSnapshotsResponse_nextToken,
+    listSnapshotsResponse_snapshots,
+    listSnapshotsResponse_httpStatus,
+
+    -- ** ListStageDeployments
+    listStageDeployments_maxResults,
+    listStageDeployments_nextToken,
+    listStageDeployments_gameName,
+    listStageDeployments_stageName,
+    listStageDeploymentsResponse_nextToken,
+    listStageDeploymentsResponse_stageDeployments,
+    listStageDeploymentsResponse_httpStatus,
+
+    -- ** ListStages
+    listStages_maxResults,
+    listStages_nextToken,
+    listStages_gameName,
+    listStagesResponse_nextToken,
+    listStagesResponse_stages,
+    listStagesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** StartGeneratedCodeJob
+    startGeneratedCodeJob_gameName,
+    startGeneratedCodeJob_generator,
+    startGeneratedCodeJob_snapshotId,
+    startGeneratedCodeJobResponse_generatedCodeJobId,
+    startGeneratedCodeJobResponse_httpStatus,
+
+    -- ** StartStageDeployment
+    startStageDeployment_clientToken,
+    startStageDeployment_gameName,
+    startStageDeployment_snapshotId,
+    startStageDeployment_stageName,
+    startStageDeploymentResponse_stageDeployment,
+    startStageDeploymentResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateGame
+    updateGame_description,
+    updateGame_gameName,
+    updateGameResponse_game,
+    updateGameResponse_httpStatus,
+
+    -- ** UpdateGameConfiguration
+    updateGameConfiguration_gameName,
+    updateGameConfiguration_modifications,
+    updateGameConfigurationResponse_gameConfiguration,
+    updateGameConfigurationResponse_httpStatus,
+
+    -- ** UpdateSnapshot
+    updateSnapshot_description,
+    updateSnapshot_gameName,
+    updateSnapshot_snapshotId,
+    updateSnapshotResponse_snapshot,
+    updateSnapshotResponse_httpStatus,
+
+    -- ** UpdateStage
+    updateStage_description,
+    updateStage_role,
+    updateStage_gameName,
+    updateStage_stageName,
+    updateStageResponse_stage,
+    updateStageResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Connection
+    connection_created,
+    connection_id,
+
+    -- ** DeploymentResult
+    deploymentResult_message,
+    deploymentResult_resultCode,
+
+    -- ** Document
+
+    -- ** ExtensionDetails
+    extensionDetails_description,
+    extensionDetails_name,
+    extensionDetails_namespace,
+
+    -- ** ExtensionVersionDetails
+    extensionVersionDetails_name,
+    extensionVersionDetails_namespace,
+    extensionVersionDetails_schema,
+    extensionVersionDetails_version,
+
+    -- ** GameConfigurationDetails
+    gameConfigurationDetails_created,
+    gameConfigurationDetails_lastUpdated,
+    gameConfigurationDetails_sections,
+
+    -- ** GameDetails
+    gameDetails_arn,
+    gameDetails_created,
+    gameDetails_description,
+    gameDetails_enableTerminationProtection,
+    gameDetails_lastUpdated,
+    gameDetails_name,
+    gameDetails_state,
+    gameDetails_tags,
+
+    -- ** GameSummary
+    gameSummary_description,
+    gameSummary_name,
+    gameSummary_state,
+    gameSummary_tags,
+
+    -- ** GeneratedCodeJobDetails
+    generatedCodeJobDetails_description,
+    generatedCodeJobDetails_expirationTime,
+    generatedCodeJobDetails_generatedCodeJobId,
+    generatedCodeJobDetails_s3Url,
+    generatedCodeJobDetails_status,
+
+    -- ** Generator
+    generator_gameSdkVersion,
+    generator_language,
+    generator_targetPlatform,
+
+    -- ** ImportGameConfigurationSource
+    importGameConfigurationSource_file,
+
+    -- ** Section
+    section_attributes,
+    section_name,
+    section_size,
+
+    -- ** SectionModification
+    sectionModification_value,
+    sectionModification_operation,
+    sectionModification_path,
+    sectionModification_section,
+
+    -- ** SnapshotDetails
+    snapshotDetails_created,
+    snapshotDetails_description,
+    snapshotDetails_id,
+    snapshotDetails_lastUpdated,
+    snapshotDetails_sections,
+
+    -- ** SnapshotSummary
+    snapshotSummary_created,
+    snapshotSummary_description,
+    snapshotSummary_id,
+    snapshotSummary_lastUpdated,
+
+    -- ** StageDeploymentDetails
+    stageDeploymentDetails_created,
+    stageDeploymentDetails_deploymentAction,
+    stageDeploymentDetails_deploymentId,
+    stageDeploymentDetails_deploymentResult,
+    stageDeploymentDetails_deploymentState,
+    stageDeploymentDetails_lastUpdated,
+    stageDeploymentDetails_snapshotId,
+
+    -- ** StageDeploymentSummary
+    stageDeploymentSummary_deploymentAction,
+    stageDeploymentSummary_deploymentId,
+    stageDeploymentSummary_deploymentResult,
+    stageDeploymentSummary_deploymentState,
+    stageDeploymentSummary_lastUpdated,
+    stageDeploymentSummary_snapshotId,
+
+    -- ** StageDetails
+    stageDetails_arn,
+    stageDetails_created,
+    stageDetails_description,
+    stageDetails_gameKey,
+    stageDetails_lastUpdated,
+    stageDetails_logGroup,
+    stageDetails_name,
+    stageDetails_role,
+    stageDetails_state,
+    stageDetails_tags,
+
+    -- ** StageSummary
+    stageSummary_description,
+    stageSummary_gameKey,
+    stageSummary_name,
+    stageSummary_state,
+    stageSummary_tags,
+  )
+where
+
+import Amazonka.GamesParks.CreateGame
+import Amazonka.GamesParks.CreateSnapshot
+import Amazonka.GamesParks.CreateStage
+import Amazonka.GamesParks.DeleteGame
+import Amazonka.GamesParks.DeleteStage
+import Amazonka.GamesParks.DisconnectPlayer
+import Amazonka.GamesParks.ExportSnapshot
+import Amazonka.GamesParks.GetExtension
+import Amazonka.GamesParks.GetExtensionVersion
+import Amazonka.GamesParks.GetGame
+import Amazonka.GamesParks.GetGameConfiguration
+import Amazonka.GamesParks.GetGeneratedCodeJob
+import Amazonka.GamesParks.GetPlayerConnectionStatus
+import Amazonka.GamesParks.GetSnapshot
+import Amazonka.GamesParks.GetStage
+import Amazonka.GamesParks.GetStageDeployment
+import Amazonka.GamesParks.ImportGameConfiguration
+import Amazonka.GamesParks.ListExtensionVersions
+import Amazonka.GamesParks.ListExtensions
+import Amazonka.GamesParks.ListGames
+import Amazonka.GamesParks.ListGeneratedCodeJobs
+import Amazonka.GamesParks.ListSnapshots
+import Amazonka.GamesParks.ListStageDeployments
+import Amazonka.GamesParks.ListStages
+import Amazonka.GamesParks.ListTagsForResource
+import Amazonka.GamesParks.StartGeneratedCodeJob
+import Amazonka.GamesParks.StartStageDeployment
+import Amazonka.GamesParks.TagResource
+import Amazonka.GamesParks.Types.Connection
+import Amazonka.GamesParks.Types.DeploymentResult
+import Amazonka.GamesParks.Types.Document
+import Amazonka.GamesParks.Types.ExtensionDetails
+import Amazonka.GamesParks.Types.ExtensionVersionDetails
+import Amazonka.GamesParks.Types.GameConfigurationDetails
+import Amazonka.GamesParks.Types.GameDetails
+import Amazonka.GamesParks.Types.GameSummary
+import Amazonka.GamesParks.Types.GeneratedCodeJobDetails
+import Amazonka.GamesParks.Types.Generator
+import Amazonka.GamesParks.Types.ImportGameConfigurationSource
+import Amazonka.GamesParks.Types.Section
+import Amazonka.GamesParks.Types.SectionModification
+import Amazonka.GamesParks.Types.SnapshotDetails
+import Amazonka.GamesParks.Types.SnapshotSummary
+import Amazonka.GamesParks.Types.StageDeploymentDetails
+import Amazonka.GamesParks.Types.StageDeploymentSummary
+import Amazonka.GamesParks.Types.StageDetails
+import Amazonka.GamesParks.Types.StageSummary
+import Amazonka.GamesParks.UntagResource
+import Amazonka.GamesParks.UpdateGame
+import Amazonka.GamesParks.UpdateGameConfiguration
+import Amazonka.GamesParks.UpdateSnapshot
+import Amazonka.GamesParks.UpdateStage
diff --git a/gen/Amazonka/GamesParks/ListExtensionVersions.hs b/gen/Amazonka/GamesParks/ListExtensionVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListExtensionVersions.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.ListExtensionVersions
+-- 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 paginated list of available versions for the extension.
+--
+-- Each time an API change is made to an extension, the version is
+-- incremented. The list retrieved by this operation shows the versions
+-- that are currently available.
+--
+-- This operation returns paginated results.
+module Amazonka.GamesParks.ListExtensionVersions
+  ( -- * Creating a Request
+    ListExtensionVersions (..),
+    newListExtensionVersions,
+
+    -- * Request Lenses
+    listExtensionVersions_maxResults,
+    listExtensionVersions_nextToken,
+    listExtensionVersions_name,
+    listExtensionVersions_namespace,
+
+    -- * Destructuring the Response
+    ListExtensionVersionsResponse (..),
+    newListExtensionVersionsResponse,
+
+    -- * Response Lenses
+    listExtensionVersionsResponse_extensionVersions,
+    listExtensionVersionsResponse_nextToken,
+    listExtensionVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExtensionVersions' smart constructor.
+data ListExtensionVersions = ListExtensionVersions'
+  { -- | The maximum number of results to return.
+    --
+    -- Use this parameter with NextToken to get results as a set of sequential
+    -- pages.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use the token that is returned with a previous call to this operation.
+    -- To start at the beginning of the result set, do not specify a value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the extension.
+    name :: Prelude.Text,
+    -- | The namespace (qualifier) of the extension.
+    namespace :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensionVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listExtensionVersions_maxResults' - The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+--
+-- 'nextToken', 'listExtensionVersions_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+--
+-- 'name', 'listExtensionVersions_name' - The name of the extension.
+--
+-- 'namespace', 'listExtensionVersions_namespace' - The namespace (qualifier) of the extension.
+newListExtensionVersions ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'namespace'
+  Prelude.Text ->
+  ListExtensionVersions
+newListExtensionVersions pName_ pNamespace_ =
+  ListExtensionVersions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      name = pName_,
+      namespace = pNamespace_
+    }
+
+-- | The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+listExtensionVersions_maxResults :: Lens.Lens' ListExtensionVersions (Prelude.Maybe Prelude.Natural)
+listExtensionVersions_maxResults = Lens.lens (\ListExtensionVersions' {maxResults} -> maxResults) (\s@ListExtensionVersions' {} a -> s {maxResults = a} :: ListExtensionVersions)
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+listExtensionVersions_nextToken :: Lens.Lens' ListExtensionVersions (Prelude.Maybe Prelude.Text)
+listExtensionVersions_nextToken = Lens.lens (\ListExtensionVersions' {nextToken} -> nextToken) (\s@ListExtensionVersions' {} a -> s {nextToken = a} :: ListExtensionVersions)
+
+-- | The name of the extension.
+listExtensionVersions_name :: Lens.Lens' ListExtensionVersions Prelude.Text
+listExtensionVersions_name = Lens.lens (\ListExtensionVersions' {name} -> name) (\s@ListExtensionVersions' {} a -> s {name = a} :: ListExtensionVersions)
+
+-- | The namespace (qualifier) of the extension.
+listExtensionVersions_namespace :: Lens.Lens' ListExtensionVersions Prelude.Text
+listExtensionVersions_namespace = Lens.lens (\ListExtensionVersions' {namespace} -> namespace) (\s@ListExtensionVersions' {} a -> s {namespace = a} :: ListExtensionVersions)
+
+instance Core.AWSPager ListExtensionVersions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listExtensionVersionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listExtensionVersionsResponse_extensionVersions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listExtensionVersions_nextToken
+          Lens..~ rs
+          Lens.^? listExtensionVersionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListExtensionVersions where
+  type
+    AWSResponse ListExtensionVersions =
+      ListExtensionVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExtensionVersionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ExtensionVersions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExtensionVersions where
+  hashWithSalt _salt ListExtensionVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+
+instance Prelude.NFData ListExtensionVersions where
+  rnf ListExtensionVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
+
+instance Data.ToHeaders ListExtensionVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListExtensionVersions where
+  toPath ListExtensionVersions' {..} =
+    Prelude.mconcat
+      [ "/extension/",
+        Data.toBS namespace,
+        "/",
+        Data.toBS name,
+        "/version"
+      ]
+
+instance Data.ToQuery ListExtensionVersions where
+  toQuery ListExtensionVersions' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListExtensionVersionsResponse' smart constructor.
+data ListExtensionVersionsResponse = ListExtensionVersionsResponse'
+  { -- | The list of extension versions.
+    extensionVersions :: Prelude.Maybe [ExtensionVersionDetails],
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use this value when making the next call to this operation to continue
+    -- where the last one finished.
+    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 'ListExtensionVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensionVersions', 'listExtensionVersionsResponse_extensionVersions' - The list of extension versions.
+--
+-- 'nextToken', 'listExtensionVersionsResponse_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+--
+-- 'httpStatus', 'listExtensionVersionsResponse_httpStatus' - The response's http status code.
+newListExtensionVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExtensionVersionsResponse
+newListExtensionVersionsResponse pHttpStatus_ =
+  ListExtensionVersionsResponse'
+    { extensionVersions =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of extension versions.
+listExtensionVersionsResponse_extensionVersions :: Lens.Lens' ListExtensionVersionsResponse (Prelude.Maybe [ExtensionVersionDetails])
+listExtensionVersionsResponse_extensionVersions = Lens.lens (\ListExtensionVersionsResponse' {extensionVersions} -> extensionVersions) (\s@ListExtensionVersionsResponse' {} a -> s {extensionVersions = a} :: ListExtensionVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+listExtensionVersionsResponse_nextToken :: Lens.Lens' ListExtensionVersionsResponse (Prelude.Maybe Prelude.Text)
+listExtensionVersionsResponse_nextToken = Lens.lens (\ListExtensionVersionsResponse' {nextToken} -> nextToken) (\s@ListExtensionVersionsResponse' {} a -> s {nextToken = a} :: ListExtensionVersionsResponse)
+
+-- | The response's http status code.
+listExtensionVersionsResponse_httpStatus :: Lens.Lens' ListExtensionVersionsResponse Prelude.Int
+listExtensionVersionsResponse_httpStatus = Lens.lens (\ListExtensionVersionsResponse' {httpStatus} -> httpStatus) (\s@ListExtensionVersionsResponse' {} a -> s {httpStatus = a} :: ListExtensionVersionsResponse)
+
+instance Prelude.NFData ListExtensionVersionsResponse where
+  rnf ListExtensionVersionsResponse' {..} =
+    Prelude.rnf extensionVersions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ListExtensions.hs b/gen/Amazonka/GamesParks/ListExtensions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListExtensions.hs
@@ -0,0 +1,246 @@
+{-# 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.GamesParks.ListExtensions
+-- 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 paginated list of available extensions.
+--
+-- Extensions provide features that games can use from scripts.
+--
+-- This operation returns paginated results.
+module Amazonka.GamesParks.ListExtensions
+  ( -- * Creating a Request
+    ListExtensions (..),
+    newListExtensions,
+
+    -- * Request Lenses
+    listExtensions_maxResults,
+    listExtensions_nextToken,
+
+    -- * Destructuring the Response
+    ListExtensionsResponse (..),
+    newListExtensionsResponse,
+
+    -- * Response Lenses
+    listExtensionsResponse_extensions,
+    listExtensionsResponse_nextToken,
+    listExtensionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExtensions' smart constructor.
+data ListExtensions = ListExtensions'
+  { -- | The maximum number of results to return.
+    --
+    -- Use this parameter with NextToken to get results as a set of sequential
+    -- pages.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use the token that is returned with a previous call to this operation.
+    -- To start at the beginning of the result set, do not specify a value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExtensions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listExtensions_maxResults' - The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+--
+-- 'nextToken', 'listExtensions_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+newListExtensions ::
+  ListExtensions
+newListExtensions =
+  ListExtensions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+listExtensions_maxResults :: Lens.Lens' ListExtensions (Prelude.Maybe Prelude.Natural)
+listExtensions_maxResults = Lens.lens (\ListExtensions' {maxResults} -> maxResults) (\s@ListExtensions' {} a -> s {maxResults = a} :: ListExtensions)
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+listExtensions_nextToken :: Lens.Lens' ListExtensions (Prelude.Maybe Prelude.Text)
+listExtensions_nextToken = Lens.lens (\ListExtensions' {nextToken} -> nextToken) (\s@ListExtensions' {} a -> s {nextToken = a} :: ListExtensions)
+
+instance Core.AWSPager ListExtensions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listExtensionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listExtensionsResponse_extensions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listExtensions_nextToken
+          Lens..~ rs
+          Lens.^? listExtensionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListExtensions where
+  type
+    AWSResponse ListExtensions =
+      ListExtensionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExtensionsResponse'
+            Prelude.<$> (x Data..?> "Extensions" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExtensions where
+  hashWithSalt _salt ListExtensions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListExtensions where
+  rnf ListExtensions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListExtensions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListExtensions where
+  toPath = Prelude.const "/extension"
+
+instance Data.ToQuery ListExtensions where
+  toQuery ListExtensions' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListExtensionsResponse' smart constructor.
+data ListExtensionsResponse = ListExtensionsResponse'
+  { -- | The list of extensions.
+    extensions :: Prelude.Maybe [ExtensionDetails],
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use this value when making the next call to this operation to continue
+    -- where the last one finished.
+    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 'ListExtensionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'extensions', 'listExtensionsResponse_extensions' - The list of extensions.
+--
+-- 'nextToken', 'listExtensionsResponse_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+--
+-- 'httpStatus', 'listExtensionsResponse_httpStatus' - The response's http status code.
+newListExtensionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExtensionsResponse
+newListExtensionsResponse pHttpStatus_ =
+  ListExtensionsResponse'
+    { extensions =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of extensions.
+listExtensionsResponse_extensions :: Lens.Lens' ListExtensionsResponse (Prelude.Maybe [ExtensionDetails])
+listExtensionsResponse_extensions = Lens.lens (\ListExtensionsResponse' {extensions} -> extensions) (\s@ListExtensionsResponse' {} a -> s {extensions = a} :: ListExtensionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+listExtensionsResponse_nextToken :: Lens.Lens' ListExtensionsResponse (Prelude.Maybe Prelude.Text)
+listExtensionsResponse_nextToken = Lens.lens (\ListExtensionsResponse' {nextToken} -> nextToken) (\s@ListExtensionsResponse' {} a -> s {nextToken = a} :: ListExtensionsResponse)
+
+-- | The response's http status code.
+listExtensionsResponse_httpStatus :: Lens.Lens' ListExtensionsResponse Prelude.Int
+listExtensionsResponse_httpStatus = Lens.lens (\ListExtensionsResponse' {httpStatus} -> httpStatus) (\s@ListExtensionsResponse' {} a -> s {httpStatus = a} :: ListExtensionsResponse)
+
+instance Prelude.NFData ListExtensionsResponse where
+  rnf ListExtensionsResponse' {..} =
+    Prelude.rnf extensions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ListGames.hs b/gen/Amazonka/GamesParks/ListGames.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListGames.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.GamesParks.ListGames
+-- 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 paginated list of games.
+--
+-- This operation returns paginated results.
+module Amazonka.GamesParks.ListGames
+  ( -- * Creating a Request
+    ListGames (..),
+    newListGames,
+
+    -- * Request Lenses
+    listGames_maxResults,
+    listGames_nextToken,
+
+    -- * Destructuring the Response
+    ListGamesResponse (..),
+    newListGamesResponse,
+
+    -- * Response Lenses
+    listGamesResponse_games,
+    listGamesResponse_nextToken,
+    listGamesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListGames' smart constructor.
+data ListGames = ListGames'
+  { -- | The maximum number of results to return.
+    --
+    -- Use this parameter with NextToken to get results as a set of sequential
+    -- pages.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use the token that is returned with a previous call to this operation.
+    -- To start at the beginning of the result set, do not specify a value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGames' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listGames_maxResults' - The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+--
+-- 'nextToken', 'listGames_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+newListGames ::
+  ListGames
+newListGames =
+  ListGames'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+listGames_maxResults :: Lens.Lens' ListGames (Prelude.Maybe Prelude.Natural)
+listGames_maxResults = Lens.lens (\ListGames' {maxResults} -> maxResults) (\s@ListGames' {} a -> s {maxResults = a} :: ListGames)
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+listGames_nextToken :: Lens.Lens' ListGames (Prelude.Maybe Prelude.Text)
+listGames_nextToken = Lens.lens (\ListGames' {nextToken} -> nextToken) (\s@ListGames' {} a -> s {nextToken = a} :: ListGames)
+
+instance Core.AWSPager ListGames where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listGamesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listGamesResponse_games
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listGames_nextToken
+          Lens..~ rs
+          Lens.^? listGamesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListGames where
+  type AWSResponse ListGames = ListGamesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListGamesResponse'
+            Prelude.<$> (x Data..?> "Games" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListGames where
+  hashWithSalt _salt ListGames' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListGames where
+  rnf ListGames' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListGames where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListGames where
+  toPath = Prelude.const "/game"
+
+instance Data.ToQuery ListGames where
+  toQuery ListGames' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListGamesResponse' smart constructor.
+data ListGamesResponse = ListGamesResponse'
+  { -- | The list of games.
+    games :: Prelude.Maybe [GameSummary],
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use this value when making the next call to this operation to continue
+    -- where the last one finished.
+    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 'ListGamesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'games', 'listGamesResponse_games' - The list of games.
+--
+-- 'nextToken', 'listGamesResponse_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+--
+-- 'httpStatus', 'listGamesResponse_httpStatus' - The response's http status code.
+newListGamesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListGamesResponse
+newListGamesResponse pHttpStatus_ =
+  ListGamesResponse'
+    { games = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of games.
+listGamesResponse_games :: Lens.Lens' ListGamesResponse (Prelude.Maybe [GameSummary])
+listGamesResponse_games = Lens.lens (\ListGamesResponse' {games} -> games) (\s@ListGamesResponse' {} a -> s {games = a} :: ListGamesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+listGamesResponse_nextToken :: Lens.Lens' ListGamesResponse (Prelude.Maybe Prelude.Text)
+listGamesResponse_nextToken = Lens.lens (\ListGamesResponse' {nextToken} -> nextToken) (\s@ListGamesResponse' {} a -> s {nextToken = a} :: ListGamesResponse)
+
+-- | The response's http status code.
+listGamesResponse_httpStatus :: Lens.Lens' ListGamesResponse Prelude.Int
+listGamesResponse_httpStatus = Lens.lens (\ListGamesResponse' {httpStatus} -> httpStatus) (\s@ListGamesResponse' {} a -> s {httpStatus = a} :: ListGamesResponse)
+
+instance Prelude.NFData ListGamesResponse where
+  rnf ListGamesResponse' {..} =
+    Prelude.rnf games
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ListGeneratedCodeJobs.hs b/gen/Amazonka/GamesParks/ListGeneratedCodeJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListGeneratedCodeJobs.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.GamesParks.ListGeneratedCodeJobs
+-- 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 paginated list of code generation jobs for a snapshot.
+--
+-- This operation returns paginated results.
+module Amazonka.GamesParks.ListGeneratedCodeJobs
+  ( -- * Creating a Request
+    ListGeneratedCodeJobs (..),
+    newListGeneratedCodeJobs,
+
+    -- * Request Lenses
+    listGeneratedCodeJobs_maxResults,
+    listGeneratedCodeJobs_nextToken,
+    listGeneratedCodeJobs_gameName,
+    listGeneratedCodeJobs_snapshotId,
+
+    -- * Destructuring the Response
+    ListGeneratedCodeJobsResponse (..),
+    newListGeneratedCodeJobsResponse,
+
+    -- * Response Lenses
+    listGeneratedCodeJobsResponse_generatedCodeJobs,
+    listGeneratedCodeJobsResponse_nextToken,
+    listGeneratedCodeJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListGeneratedCodeJobs' smart constructor.
+data ListGeneratedCodeJobs = ListGeneratedCodeJobs'
+  { -- | The maximum number of results to return.
+    --
+    -- Use this parameter with NextToken to get results as a set of sequential
+    -- pages.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use the token that is returned with a previous call to this operation.
+    -- To start at the beginning of the result set, do not specify a value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The identifier of the snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGeneratedCodeJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listGeneratedCodeJobs_maxResults' - The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+--
+-- 'nextToken', 'listGeneratedCodeJobs_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+--
+-- 'gameName', 'listGeneratedCodeJobs_gameName' - The name of the game.
+--
+-- 'snapshotId', 'listGeneratedCodeJobs_snapshotId' - The identifier of the snapshot.
+newListGeneratedCodeJobs ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  ListGeneratedCodeJobs
+newListGeneratedCodeJobs pGameName_ pSnapshotId_ =
+  ListGeneratedCodeJobs'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      gameName = pGameName_,
+      snapshotId = pSnapshotId_
+    }
+
+-- | The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+listGeneratedCodeJobs_maxResults :: Lens.Lens' ListGeneratedCodeJobs (Prelude.Maybe Prelude.Natural)
+listGeneratedCodeJobs_maxResults = Lens.lens (\ListGeneratedCodeJobs' {maxResults} -> maxResults) (\s@ListGeneratedCodeJobs' {} a -> s {maxResults = a} :: ListGeneratedCodeJobs)
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+listGeneratedCodeJobs_nextToken :: Lens.Lens' ListGeneratedCodeJobs (Prelude.Maybe Prelude.Text)
+listGeneratedCodeJobs_nextToken = Lens.lens (\ListGeneratedCodeJobs' {nextToken} -> nextToken) (\s@ListGeneratedCodeJobs' {} a -> s {nextToken = a} :: ListGeneratedCodeJobs)
+
+-- | The name of the game.
+listGeneratedCodeJobs_gameName :: Lens.Lens' ListGeneratedCodeJobs Prelude.Text
+listGeneratedCodeJobs_gameName = Lens.lens (\ListGeneratedCodeJobs' {gameName} -> gameName) (\s@ListGeneratedCodeJobs' {} a -> s {gameName = a} :: ListGeneratedCodeJobs)
+
+-- | The identifier of the snapshot.
+listGeneratedCodeJobs_snapshotId :: Lens.Lens' ListGeneratedCodeJobs Prelude.Text
+listGeneratedCodeJobs_snapshotId = Lens.lens (\ListGeneratedCodeJobs' {snapshotId} -> snapshotId) (\s@ListGeneratedCodeJobs' {} a -> s {snapshotId = a} :: ListGeneratedCodeJobs)
+
+instance Core.AWSPager ListGeneratedCodeJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listGeneratedCodeJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listGeneratedCodeJobsResponse_generatedCodeJobs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listGeneratedCodeJobs_nextToken
+          Lens..~ rs
+          Lens.^? listGeneratedCodeJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListGeneratedCodeJobs where
+  type
+    AWSResponse ListGeneratedCodeJobs =
+      ListGeneratedCodeJobsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListGeneratedCodeJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "GeneratedCodeJobs"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListGeneratedCodeJobs where
+  hashWithSalt _salt ListGeneratedCodeJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData ListGeneratedCodeJobs where
+  rnf ListGeneratedCodeJobs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders ListGeneratedCodeJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListGeneratedCodeJobs where
+  toPath ListGeneratedCodeJobs' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/snapshot/",
+        Data.toBS snapshotId,
+        "/generated-sdk-code-jobs"
+      ]
+
+instance Data.ToQuery ListGeneratedCodeJobs where
+  toQuery ListGeneratedCodeJobs' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListGeneratedCodeJobsResponse' smart constructor.
+data ListGeneratedCodeJobsResponse = ListGeneratedCodeJobsResponse'
+  { -- | The list of generated code jobs.
+    generatedCodeJobs :: Prelude.Maybe [GeneratedCodeJobDetails],
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use this value when making the next call to this operation to continue
+    -- where the last one finished.
+    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 'ListGeneratedCodeJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'generatedCodeJobs', 'listGeneratedCodeJobsResponse_generatedCodeJobs' - The list of generated code jobs.
+--
+-- 'nextToken', 'listGeneratedCodeJobsResponse_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+--
+-- 'httpStatus', 'listGeneratedCodeJobsResponse_httpStatus' - The response's http status code.
+newListGeneratedCodeJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListGeneratedCodeJobsResponse
+newListGeneratedCodeJobsResponse pHttpStatus_ =
+  ListGeneratedCodeJobsResponse'
+    { generatedCodeJobs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of generated code jobs.
+listGeneratedCodeJobsResponse_generatedCodeJobs :: Lens.Lens' ListGeneratedCodeJobsResponse (Prelude.Maybe [GeneratedCodeJobDetails])
+listGeneratedCodeJobsResponse_generatedCodeJobs = Lens.lens (\ListGeneratedCodeJobsResponse' {generatedCodeJobs} -> generatedCodeJobs) (\s@ListGeneratedCodeJobsResponse' {} a -> s {generatedCodeJobs = a} :: ListGeneratedCodeJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+listGeneratedCodeJobsResponse_nextToken :: Lens.Lens' ListGeneratedCodeJobsResponse (Prelude.Maybe Prelude.Text)
+listGeneratedCodeJobsResponse_nextToken = Lens.lens (\ListGeneratedCodeJobsResponse' {nextToken} -> nextToken) (\s@ListGeneratedCodeJobsResponse' {} a -> s {nextToken = a} :: ListGeneratedCodeJobsResponse)
+
+-- | The response's http status code.
+listGeneratedCodeJobsResponse_httpStatus :: Lens.Lens' ListGeneratedCodeJobsResponse Prelude.Int
+listGeneratedCodeJobsResponse_httpStatus = Lens.lens (\ListGeneratedCodeJobsResponse' {httpStatus} -> httpStatus) (\s@ListGeneratedCodeJobsResponse' {} a -> s {httpStatus = a} :: ListGeneratedCodeJobsResponse)
+
+instance Prelude.NFData ListGeneratedCodeJobsResponse where
+  rnf ListGeneratedCodeJobsResponse' {..} =
+    Prelude.rnf generatedCodeJobs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ListSnapshots.hs b/gen/Amazonka/GamesParks/ListSnapshots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListSnapshots.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.GamesParks.ListSnapshots
+-- 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 paginated list of snapshot summaries from the game.
+--
+-- This operation returns paginated results.
+module Amazonka.GamesParks.ListSnapshots
+  ( -- * Creating a Request
+    ListSnapshots (..),
+    newListSnapshots,
+
+    -- * Request Lenses
+    listSnapshots_maxResults,
+    listSnapshots_nextToken,
+    listSnapshots_gameName,
+
+    -- * Destructuring the Response
+    ListSnapshotsResponse (..),
+    newListSnapshotsResponse,
+
+    -- * Response Lenses
+    listSnapshotsResponse_nextToken,
+    listSnapshotsResponse_snapshots,
+    listSnapshotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSnapshots' smart constructor.
+data ListSnapshots = ListSnapshots'
+  { -- | The maximum number of results to return.
+    --
+    -- Use this parameter with NextToken to get results as a set of sequential
+    -- pages.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use the token that is returned with a previous call to this operation.
+    -- To start at the beginning of the result set, do not specify a value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSnapshots' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSnapshots_maxResults' - The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+--
+-- 'nextToken', 'listSnapshots_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+--
+-- 'gameName', 'listSnapshots_gameName' - The name of the game.
+newListSnapshots ::
+  -- | 'gameName'
+  Prelude.Text ->
+  ListSnapshots
+newListSnapshots pGameName_ =
+  ListSnapshots'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      gameName = pGameName_
+    }
+
+-- | The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+listSnapshots_maxResults :: Lens.Lens' ListSnapshots (Prelude.Maybe Prelude.Natural)
+listSnapshots_maxResults = Lens.lens (\ListSnapshots' {maxResults} -> maxResults) (\s@ListSnapshots' {} a -> s {maxResults = a} :: ListSnapshots)
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+listSnapshots_nextToken :: Lens.Lens' ListSnapshots (Prelude.Maybe Prelude.Text)
+listSnapshots_nextToken = Lens.lens (\ListSnapshots' {nextToken} -> nextToken) (\s@ListSnapshots' {} a -> s {nextToken = a} :: ListSnapshots)
+
+-- | The name of the game.
+listSnapshots_gameName :: Lens.Lens' ListSnapshots Prelude.Text
+listSnapshots_gameName = Lens.lens (\ListSnapshots' {gameName} -> gameName) (\s@ListSnapshots' {} a -> s {gameName = a} :: ListSnapshots)
+
+instance Core.AWSPager ListSnapshots where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSnapshotsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSnapshotsResponse_snapshots
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSnapshots_nextToken
+          Lens..~ rs
+          Lens.^? listSnapshotsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSnapshots where
+  type
+    AWSResponse ListSnapshots =
+      ListSnapshotsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSnapshotsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Snapshots" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSnapshots where
+  hashWithSalt _salt ListSnapshots' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData ListSnapshots where
+  rnf ListSnapshots' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf gameName
+
+instance Data.ToHeaders ListSnapshots where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSnapshots where
+  toPath ListSnapshots' {..} =
+    Prelude.mconcat
+      ["/game/", Data.toBS gameName, "/snapshot"]
+
+instance Data.ToQuery ListSnapshots where
+  toQuery ListSnapshots' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListSnapshotsResponse' smart constructor.
+data ListSnapshotsResponse = ListSnapshotsResponse'
+  { -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use this value when making the next call to this operation to continue
+    -- where the last one finished.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of snapshot summaries. You can use the returned snapshot IDs in
+    -- the @UpdateSnapshot@ and @GetSnapshot@ operations.
+    snapshots :: Prelude.Maybe [SnapshotSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSnapshotsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listSnapshotsResponse_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+--
+-- 'snapshots', 'listSnapshotsResponse_snapshots' - A list of snapshot summaries. You can use the returned snapshot IDs in
+-- the @UpdateSnapshot@ and @GetSnapshot@ operations.
+--
+-- 'httpStatus', 'listSnapshotsResponse_httpStatus' - The response's http status code.
+newListSnapshotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSnapshotsResponse
+newListSnapshotsResponse pHttpStatus_ =
+  ListSnapshotsResponse'
+    { nextToken = Prelude.Nothing,
+      snapshots = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+listSnapshotsResponse_nextToken :: Lens.Lens' ListSnapshotsResponse (Prelude.Maybe Prelude.Text)
+listSnapshotsResponse_nextToken = Lens.lens (\ListSnapshotsResponse' {nextToken} -> nextToken) (\s@ListSnapshotsResponse' {} a -> s {nextToken = a} :: ListSnapshotsResponse)
+
+-- | A list of snapshot summaries. You can use the returned snapshot IDs in
+-- the @UpdateSnapshot@ and @GetSnapshot@ operations.
+listSnapshotsResponse_snapshots :: Lens.Lens' ListSnapshotsResponse (Prelude.Maybe [SnapshotSummary])
+listSnapshotsResponse_snapshots = Lens.lens (\ListSnapshotsResponse' {snapshots} -> snapshots) (\s@ListSnapshotsResponse' {} a -> s {snapshots = a} :: ListSnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSnapshotsResponse_httpStatus :: Lens.Lens' ListSnapshotsResponse Prelude.Int
+listSnapshotsResponse_httpStatus = Lens.lens (\ListSnapshotsResponse' {httpStatus} -> httpStatus) (\s@ListSnapshotsResponse' {} a -> s {httpStatus = a} :: ListSnapshotsResponse)
+
+instance Prelude.NFData ListSnapshotsResponse where
+  rnf ListSnapshotsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf snapshots
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ListStageDeployments.hs b/gen/Amazonka/GamesParks/ListStageDeployments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListStageDeployments.hs
@@ -0,0 +1,285 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.ListStageDeployments
+-- 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 paginated list of stage deployment summaries from the game.
+--
+-- This operation returns paginated results.
+module Amazonka.GamesParks.ListStageDeployments
+  ( -- * Creating a Request
+    ListStageDeployments (..),
+    newListStageDeployments,
+
+    -- * Request Lenses
+    listStageDeployments_maxResults,
+    listStageDeployments_nextToken,
+    listStageDeployments_gameName,
+    listStageDeployments_stageName,
+
+    -- * Destructuring the Response
+    ListStageDeploymentsResponse (..),
+    newListStageDeploymentsResponse,
+
+    -- * Response Lenses
+    listStageDeploymentsResponse_nextToken,
+    listStageDeploymentsResponse_stageDeployments,
+    listStageDeploymentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStageDeployments' smart constructor.
+data ListStageDeployments = ListStageDeployments'
+  { -- | The maximum number of results to return.
+    --
+    -- Use this parameter with NextToken to get results as a set of sequential
+    -- pages.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use the token that is returned with a previous call to this operation.
+    -- To start at the beginning of the result set, do not specify a value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The name of the stage.
+    stageName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStageDeployments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStageDeployments_maxResults' - The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+--
+-- 'nextToken', 'listStageDeployments_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+--
+-- 'gameName', 'listStageDeployments_gameName' - The name of the game.
+--
+-- 'stageName', 'listStageDeployments_stageName' - The name of the stage.
+newListStageDeployments ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  ListStageDeployments
+newListStageDeployments pGameName_ pStageName_ =
+  ListStageDeployments'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      gameName = pGameName_,
+      stageName = pStageName_
+    }
+
+-- | The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+listStageDeployments_maxResults :: Lens.Lens' ListStageDeployments (Prelude.Maybe Prelude.Natural)
+listStageDeployments_maxResults = Lens.lens (\ListStageDeployments' {maxResults} -> maxResults) (\s@ListStageDeployments' {} a -> s {maxResults = a} :: ListStageDeployments)
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+listStageDeployments_nextToken :: Lens.Lens' ListStageDeployments (Prelude.Maybe Prelude.Text)
+listStageDeployments_nextToken = Lens.lens (\ListStageDeployments' {nextToken} -> nextToken) (\s@ListStageDeployments' {} a -> s {nextToken = a} :: ListStageDeployments)
+
+-- | The name of the game.
+listStageDeployments_gameName :: Lens.Lens' ListStageDeployments Prelude.Text
+listStageDeployments_gameName = Lens.lens (\ListStageDeployments' {gameName} -> gameName) (\s@ListStageDeployments' {} a -> s {gameName = a} :: ListStageDeployments)
+
+-- | The name of the stage.
+listStageDeployments_stageName :: Lens.Lens' ListStageDeployments Prelude.Text
+listStageDeployments_stageName = Lens.lens (\ListStageDeployments' {stageName} -> stageName) (\s@ListStageDeployments' {} a -> s {stageName = a} :: ListStageDeployments)
+
+instance Core.AWSPager ListStageDeployments where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStageDeploymentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStageDeploymentsResponse_stageDeployments
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStageDeployments_nextToken
+          Lens..~ rs
+          Lens.^? listStageDeploymentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStageDeployments where
+  type
+    AWSResponse ListStageDeployments =
+      ListStageDeploymentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStageDeploymentsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "StageDeployments"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStageDeployments where
+  hashWithSalt _salt ListStageDeployments' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData ListStageDeployments where
+  rnf ListStageDeployments' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf stageName
+
+instance Data.ToHeaders ListStageDeployments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStageDeployments where
+  toPath ListStageDeployments' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName,
+        "/deployments"
+      ]
+
+instance Data.ToQuery ListStageDeployments where
+  toQuery ListStageDeployments' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListStageDeploymentsResponse' smart constructor.
+data ListStageDeploymentsResponse = ListStageDeploymentsResponse'
+  { -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use this value when making the next call to this operation to continue
+    -- where the last one finished.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of stage deployment summaries. You can use the deployment IDs in
+    -- the @UpdateStageDeployment@ and @GetStageDeployment@ actions.
+    stageDeployments :: Prelude.Maybe [StageDeploymentSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStageDeploymentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listStageDeploymentsResponse_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+--
+-- 'stageDeployments', 'listStageDeploymentsResponse_stageDeployments' - A list of stage deployment summaries. You can use the deployment IDs in
+-- the @UpdateStageDeployment@ and @GetStageDeployment@ actions.
+--
+-- 'httpStatus', 'listStageDeploymentsResponse_httpStatus' - The response's http status code.
+newListStageDeploymentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStageDeploymentsResponse
+newListStageDeploymentsResponse pHttpStatus_ =
+  ListStageDeploymentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      stageDeployments = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+listStageDeploymentsResponse_nextToken :: Lens.Lens' ListStageDeploymentsResponse (Prelude.Maybe Prelude.Text)
+listStageDeploymentsResponse_nextToken = Lens.lens (\ListStageDeploymentsResponse' {nextToken} -> nextToken) (\s@ListStageDeploymentsResponse' {} a -> s {nextToken = a} :: ListStageDeploymentsResponse)
+
+-- | A list of stage deployment summaries. You can use the deployment IDs in
+-- the @UpdateStageDeployment@ and @GetStageDeployment@ actions.
+listStageDeploymentsResponse_stageDeployments :: Lens.Lens' ListStageDeploymentsResponse (Prelude.Maybe [StageDeploymentSummary])
+listStageDeploymentsResponse_stageDeployments = Lens.lens (\ListStageDeploymentsResponse' {stageDeployments} -> stageDeployments) (\s@ListStageDeploymentsResponse' {} a -> s {stageDeployments = a} :: ListStageDeploymentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listStageDeploymentsResponse_httpStatus :: Lens.Lens' ListStageDeploymentsResponse Prelude.Int
+listStageDeploymentsResponse_httpStatus = Lens.lens (\ListStageDeploymentsResponse' {httpStatus} -> httpStatus) (\s@ListStageDeploymentsResponse' {} a -> s {httpStatus = a} :: ListStageDeploymentsResponse)
+
+instance Prelude.NFData ListStageDeploymentsResponse where
+  rnf ListStageDeploymentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stageDeployments
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ListStages.hs b/gen/Amazonka/GamesParks/ListStages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListStages.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.ListStages
+-- 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 paginated list of stage summaries from the game.
+--
+-- This operation returns paginated results.
+module Amazonka.GamesParks.ListStages
+  ( -- * Creating a Request
+    ListStages (..),
+    newListStages,
+
+    -- * Request Lenses
+    listStages_maxResults,
+    listStages_nextToken,
+    listStages_gameName,
+
+    -- * Destructuring the Response
+    ListStagesResponse (..),
+    newListStagesResponse,
+
+    -- * Response Lenses
+    listStagesResponse_nextToken,
+    listStagesResponse_stages,
+    listStagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListStages' smart constructor.
+data ListStages = ListStages'
+  { -- | The maximum number of results to return.
+    --
+    -- Use this parameter with NextToken to get results as a set of sequential
+    -- pages.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use the token that is returned with a previous call to this operation.
+    -- To start at the beginning of the result set, do not specify a value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listStages_maxResults' - The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+--
+-- 'nextToken', 'listStages_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+--
+-- 'gameName', 'listStages_gameName' - The name of the game.
+newListStages ::
+  -- | 'gameName'
+  Prelude.Text ->
+  ListStages
+newListStages pGameName_ =
+  ListStages'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      gameName = pGameName_
+    }
+
+-- | The maximum number of results to return.
+--
+-- Use this parameter with NextToken to get results as a set of sequential
+-- pages.
+listStages_maxResults :: Lens.Lens' ListStages (Prelude.Maybe Prelude.Natural)
+listStages_maxResults = Lens.lens (\ListStages' {maxResults} -> maxResults) (\s@ListStages' {} a -> s {maxResults = a} :: ListStages)
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use the token that is returned with a previous call to this operation.
+-- To start at the beginning of the result set, do not specify a value.
+listStages_nextToken :: Lens.Lens' ListStages (Prelude.Maybe Prelude.Text)
+listStages_nextToken = Lens.lens (\ListStages' {nextToken} -> nextToken) (\s@ListStages' {} a -> s {nextToken = a} :: ListStages)
+
+-- | The name of the game.
+listStages_gameName :: Lens.Lens' ListStages Prelude.Text
+listStages_gameName = Lens.lens (\ListStages' {gameName} -> gameName) (\s@ListStages' {} a -> s {gameName = a} :: ListStages)
+
+instance Core.AWSPager ListStages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listStagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listStagesResponse_stages
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listStages_nextToken
+          Lens..~ rs
+          Lens.^? listStagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListStages where
+  type AWSResponse ListStages = ListStagesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListStagesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Stages" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListStages where
+  hashWithSalt _salt ListStages' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData ListStages where
+  rnf ListStages' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf gameName
+
+instance Data.ToHeaders ListStages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListStages where
+  toPath ListStages' {..} =
+    Prelude.mconcat
+      ["/game/", Data.toBS gameName, "/stage"]
+
+instance Data.ToQuery ListStages where
+  toQuery ListStages' {..} =
+    Prelude.mconcat
+      [ "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListStagesResponse' smart constructor.
+data ListStagesResponse = ListStagesResponse'
+  { -- | The token that indicates the start of the next sequential page of
+    -- results.
+    --
+    -- Use this value when making the next call to this operation to continue
+    -- where the last one finished.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of stage summaries. You can use the stage names in the
+    -- @UpdateStage@ and @GetStage@ actions.
+    stages :: Prelude.Maybe [StageSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListStagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listStagesResponse_nextToken' - The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+--
+-- 'stages', 'listStagesResponse_stages' - A list of stage summaries. You can use the stage names in the
+-- @UpdateStage@ and @GetStage@ actions.
+--
+-- 'httpStatus', 'listStagesResponse_httpStatus' - The response's http status code.
+newListStagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListStagesResponse
+newListStagesResponse pHttpStatus_ =
+  ListStagesResponse'
+    { nextToken = Prelude.Nothing,
+      stages = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that indicates the start of the next sequential page of
+-- results.
+--
+-- Use this value when making the next call to this operation to continue
+-- where the last one finished.
+listStagesResponse_nextToken :: Lens.Lens' ListStagesResponse (Prelude.Maybe Prelude.Text)
+listStagesResponse_nextToken = Lens.lens (\ListStagesResponse' {nextToken} -> nextToken) (\s@ListStagesResponse' {} a -> s {nextToken = a} :: ListStagesResponse)
+
+-- | A list of stage summaries. You can use the stage names in the
+-- @UpdateStage@ and @GetStage@ actions.
+listStagesResponse_stages :: Lens.Lens' ListStagesResponse (Prelude.Maybe [StageSummary])
+listStagesResponse_stages = Lens.lens (\ListStagesResponse' {stages} -> stages) (\s@ListStagesResponse' {} a -> s {stages = a} :: ListStagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listStagesResponse_httpStatus :: Lens.Lens' ListStagesResponse Prelude.Int
+listStagesResponse_httpStatus = Lens.lens (\ListStagesResponse' {httpStatus} -> httpStatus) (\s@ListStagesResponse' {} a -> s {httpStatus = a} :: ListStagesResponse)
+
+instance Prelude.NFData ListStagesResponse where
+  rnf ListStagesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stages
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/ListTagsForResource.hs b/gen/Amazonka/GamesParks/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# 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.GamesParks.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags associated with a GameSparks resource.
+module Amazonka.GamesParks.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the GameSparks resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the GameSparks resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the GameSparks resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags associated with the resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags associated with the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags associated with the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/StartGeneratedCodeJob.hs b/gen/Amazonka/GamesParks/StartGeneratedCodeJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/StartGeneratedCodeJob.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.GamesParks.StartGeneratedCodeJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an asynchronous process that generates client code for
+-- system-defined and custom messages. The resulting code is collected as a
+-- .zip file and uploaded to a pre-signed Amazon S3 URL.
+module Amazonka.GamesParks.StartGeneratedCodeJob
+  ( -- * Creating a Request
+    StartGeneratedCodeJob (..),
+    newStartGeneratedCodeJob,
+
+    -- * Request Lenses
+    startGeneratedCodeJob_gameName,
+    startGeneratedCodeJob_generator,
+    startGeneratedCodeJob_snapshotId,
+
+    -- * Destructuring the Response
+    StartGeneratedCodeJobResponse (..),
+    newStartGeneratedCodeJobResponse,
+
+    -- * Response Lenses
+    startGeneratedCodeJobResponse_generatedCodeJobId,
+    startGeneratedCodeJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartGeneratedCodeJob' smart constructor.
+data StartGeneratedCodeJob = StartGeneratedCodeJob'
+  { -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | Properties of the generator to use for the job.
+    generator :: Generator,
+    -- | The identifier of the snapshot for which to generate code.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartGeneratedCodeJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'startGeneratedCodeJob_gameName' - The name of the game.
+--
+-- 'generator', 'startGeneratedCodeJob_generator' - Properties of the generator to use for the job.
+--
+-- 'snapshotId', 'startGeneratedCodeJob_snapshotId' - The identifier of the snapshot for which to generate code.
+newStartGeneratedCodeJob ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'generator'
+  Generator ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  StartGeneratedCodeJob
+newStartGeneratedCodeJob
+  pGameName_
+  pGenerator_
+  pSnapshotId_ =
+    StartGeneratedCodeJob'
+      { gameName = pGameName_,
+        generator = pGenerator_,
+        snapshotId = pSnapshotId_
+      }
+
+-- | The name of the game.
+startGeneratedCodeJob_gameName :: Lens.Lens' StartGeneratedCodeJob Prelude.Text
+startGeneratedCodeJob_gameName = Lens.lens (\StartGeneratedCodeJob' {gameName} -> gameName) (\s@StartGeneratedCodeJob' {} a -> s {gameName = a} :: StartGeneratedCodeJob)
+
+-- | Properties of the generator to use for the job.
+startGeneratedCodeJob_generator :: Lens.Lens' StartGeneratedCodeJob Generator
+startGeneratedCodeJob_generator = Lens.lens (\StartGeneratedCodeJob' {generator} -> generator) (\s@StartGeneratedCodeJob' {} a -> s {generator = a} :: StartGeneratedCodeJob)
+
+-- | The identifier of the snapshot for which to generate code.
+startGeneratedCodeJob_snapshotId :: Lens.Lens' StartGeneratedCodeJob Prelude.Text
+startGeneratedCodeJob_snapshotId = Lens.lens (\StartGeneratedCodeJob' {snapshotId} -> snapshotId) (\s@StartGeneratedCodeJob' {} a -> s {snapshotId = a} :: StartGeneratedCodeJob)
+
+instance Core.AWSRequest StartGeneratedCodeJob where
+  type
+    AWSResponse StartGeneratedCodeJob =
+      StartGeneratedCodeJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartGeneratedCodeJobResponse'
+            Prelude.<$> (x Data..?> "GeneratedCodeJobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartGeneratedCodeJob where
+  hashWithSalt _salt StartGeneratedCodeJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` generator
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData StartGeneratedCodeJob where
+  rnf StartGeneratedCodeJob' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf generator
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders StartGeneratedCodeJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartGeneratedCodeJob where
+  toJSON StartGeneratedCodeJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Generator" Data..= generator)]
+      )
+
+instance Data.ToPath StartGeneratedCodeJob where
+  toPath StartGeneratedCodeJob' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/snapshot/",
+        Data.toBS snapshotId,
+        "/generated-sdk-code-job"
+      ]
+
+instance Data.ToQuery StartGeneratedCodeJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartGeneratedCodeJobResponse' smart constructor.
+data StartGeneratedCodeJobResponse = StartGeneratedCodeJobResponse'
+  { -- | The identifier of the code generation job. You can use this identifier
+    -- in the @GetGeneratedCodeJob@ operation.
+    generatedCodeJobId :: 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 'StartGeneratedCodeJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'generatedCodeJobId', 'startGeneratedCodeJobResponse_generatedCodeJobId' - The identifier of the code generation job. You can use this identifier
+-- in the @GetGeneratedCodeJob@ operation.
+--
+-- 'httpStatus', 'startGeneratedCodeJobResponse_httpStatus' - The response's http status code.
+newStartGeneratedCodeJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartGeneratedCodeJobResponse
+newStartGeneratedCodeJobResponse pHttpStatus_ =
+  StartGeneratedCodeJobResponse'
+    { generatedCodeJobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the code generation job. You can use this identifier
+-- in the @GetGeneratedCodeJob@ operation.
+startGeneratedCodeJobResponse_generatedCodeJobId :: Lens.Lens' StartGeneratedCodeJobResponse (Prelude.Maybe Prelude.Text)
+startGeneratedCodeJobResponse_generatedCodeJobId = Lens.lens (\StartGeneratedCodeJobResponse' {generatedCodeJobId} -> generatedCodeJobId) (\s@StartGeneratedCodeJobResponse' {} a -> s {generatedCodeJobId = a} :: StartGeneratedCodeJobResponse)
+
+-- | The response's http status code.
+startGeneratedCodeJobResponse_httpStatus :: Lens.Lens' StartGeneratedCodeJobResponse Prelude.Int
+startGeneratedCodeJobResponse_httpStatus = Lens.lens (\StartGeneratedCodeJobResponse' {httpStatus} -> httpStatus) (\s@StartGeneratedCodeJobResponse' {} a -> s {httpStatus = a} :: StartGeneratedCodeJobResponse)
+
+instance Prelude.NFData StartGeneratedCodeJobResponse where
+  rnf StartGeneratedCodeJobResponse' {..} =
+    Prelude.rnf generatedCodeJobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/StartStageDeployment.hs b/gen/Amazonka/GamesParks/StartStageDeployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/StartStageDeployment.hs
@@ -0,0 +1,233 @@
+{-# 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.GamesParks.StartStageDeployment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deploys a snapshot to the stage and creates a new game runtime.
+--
+-- After you call this operation, you can check the deployment status by
+-- using @GetStageDeployment@.
+--
+-- If there are any players connected to the previous game runtime, then
+-- both runtimes persist. Existing connections to the previous runtime are
+-- maintained. When players disconnect and reconnect, they connect to the
+-- new runtime. After there are no connections to the previous game
+-- runtime, it is deleted.
+module Amazonka.GamesParks.StartStageDeployment
+  ( -- * Creating a Request
+    StartStageDeployment (..),
+    newStartStageDeployment,
+
+    -- * Request Lenses
+    startStageDeployment_clientToken,
+    startStageDeployment_gameName,
+    startStageDeployment_snapshotId,
+    startStageDeployment_stageName,
+
+    -- * Destructuring the Response
+    StartStageDeploymentResponse (..),
+    newStartStageDeploymentResponse,
+
+    -- * Response Lenses
+    startStageDeploymentResponse_stageDeployment,
+    startStageDeploymentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartStageDeployment' smart constructor.
+data StartStageDeployment = StartStageDeployment'
+  { -- | A client-defined token. With an active client token in the request, this
+    -- action is idempotent.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The identifier of the snapshot to deploy.
+    snapshotId :: Prelude.Text,
+    -- | The name of the stage to deploy the snapshot onto.
+    stageName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartStageDeployment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'startStageDeployment_clientToken' - A client-defined token. With an active client token in the request, this
+-- action is idempotent.
+--
+-- 'gameName', 'startStageDeployment_gameName' - The name of the game.
+--
+-- 'snapshotId', 'startStageDeployment_snapshotId' - The identifier of the snapshot to deploy.
+--
+-- 'stageName', 'startStageDeployment_stageName' - The name of the stage to deploy the snapshot onto.
+newStartStageDeployment ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  StartStageDeployment
+newStartStageDeployment
+  pGameName_
+  pSnapshotId_
+  pStageName_ =
+    StartStageDeployment'
+      { clientToken =
+          Prelude.Nothing,
+        gameName = pGameName_,
+        snapshotId = pSnapshotId_,
+        stageName = pStageName_
+      }
+
+-- | A client-defined token. With an active client token in the request, this
+-- action is idempotent.
+startStageDeployment_clientToken :: Lens.Lens' StartStageDeployment (Prelude.Maybe Prelude.Text)
+startStageDeployment_clientToken = Lens.lens (\StartStageDeployment' {clientToken} -> clientToken) (\s@StartStageDeployment' {} a -> s {clientToken = a} :: StartStageDeployment)
+
+-- | The name of the game.
+startStageDeployment_gameName :: Lens.Lens' StartStageDeployment Prelude.Text
+startStageDeployment_gameName = Lens.lens (\StartStageDeployment' {gameName} -> gameName) (\s@StartStageDeployment' {} a -> s {gameName = a} :: StartStageDeployment)
+
+-- | The identifier of the snapshot to deploy.
+startStageDeployment_snapshotId :: Lens.Lens' StartStageDeployment Prelude.Text
+startStageDeployment_snapshotId = Lens.lens (\StartStageDeployment' {snapshotId} -> snapshotId) (\s@StartStageDeployment' {} a -> s {snapshotId = a} :: StartStageDeployment)
+
+-- | The name of the stage to deploy the snapshot onto.
+startStageDeployment_stageName :: Lens.Lens' StartStageDeployment Prelude.Text
+startStageDeployment_stageName = Lens.lens (\StartStageDeployment' {stageName} -> stageName) (\s@StartStageDeployment' {} a -> s {stageName = a} :: StartStageDeployment)
+
+instance Core.AWSRequest StartStageDeployment where
+  type
+    AWSResponse StartStageDeployment =
+      StartStageDeploymentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartStageDeploymentResponse'
+            Prelude.<$> (x Data..?> "StageDeployment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartStageDeployment where
+  hashWithSalt _salt StartStageDeployment' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData StartStageDeployment where
+  rnf StartStageDeployment' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf stageName
+
+instance Data.ToHeaders StartStageDeployment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartStageDeployment where
+  toJSON StartStageDeployment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("SnapshotId" Data..= snapshotId)
+          ]
+      )
+
+instance Data.ToPath StartStageDeployment where
+  toPath StartStageDeployment' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName,
+        "/deployment"
+      ]
+
+instance Data.ToQuery StartStageDeployment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartStageDeploymentResponse' smart constructor.
+data StartStageDeploymentResponse = StartStageDeploymentResponse'
+  { -- | Properties that describe the stage deployment.
+    stageDeployment :: Prelude.Maybe StageDeploymentDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartStageDeploymentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stageDeployment', 'startStageDeploymentResponse_stageDeployment' - Properties that describe the stage deployment.
+--
+-- 'httpStatus', 'startStageDeploymentResponse_httpStatus' - The response's http status code.
+newStartStageDeploymentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartStageDeploymentResponse
+newStartStageDeploymentResponse pHttpStatus_ =
+  StartStageDeploymentResponse'
+    { stageDeployment =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that describe the stage deployment.
+startStageDeploymentResponse_stageDeployment :: Lens.Lens' StartStageDeploymentResponse (Prelude.Maybe StageDeploymentDetails)
+startStageDeploymentResponse_stageDeployment = Lens.lens (\StartStageDeploymentResponse' {stageDeployment} -> stageDeployment) (\s@StartStageDeploymentResponse' {} a -> s {stageDeployment = a} :: StartStageDeploymentResponse)
+
+-- | The response's http status code.
+startStageDeploymentResponse_httpStatus :: Lens.Lens' StartStageDeploymentResponse Prelude.Int
+startStageDeploymentResponse_httpStatus = Lens.lens (\StartStageDeploymentResponse' {httpStatus} -> httpStatus) (\s@StartStageDeploymentResponse' {} a -> s {httpStatus = a} :: StartStageDeploymentResponse)
+
+instance Prelude.NFData StartStageDeploymentResponse where
+  rnf StartStageDeploymentResponse' {..} =
+    Prelude.rnf stageDeployment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/TagResource.hs b/gen/Amazonka/GamesParks/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/TagResource.hs
@@ -0,0 +1,163 @@
+{-# 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.GamesParks.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds tags to a GameSparks resource.
+module Amazonka.GamesParks.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to add the tags to.
+    resourceArn :: Prelude.Text,
+    -- | The tags to add to the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource to add the tags to.
+--
+-- 'tags', 'tagResource_tags' - The tags to add to the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource to add the tags to.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to add to the resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | 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/GamesParks/Types.hs b/gen/Amazonka/GamesParks/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types.hs
@@ -0,0 +1,362 @@
+{-# 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.GamesParks.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.GamesParks.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * DeploymentAction
+    DeploymentAction (..),
+
+    -- * DeploymentState
+    DeploymentState (..),
+
+    -- * GameState
+    GameState (..),
+
+    -- * GeneratedCodeJobState
+    GeneratedCodeJobState (..),
+
+    -- * Operation
+    Operation (..),
+
+    -- * ResultCode
+    ResultCode (..),
+
+    -- * StageState
+    StageState (..),
+
+    -- * Connection
+    Connection (..),
+    newConnection,
+    connection_created,
+    connection_id,
+
+    -- * DeploymentResult
+    DeploymentResult (..),
+    newDeploymentResult,
+    deploymentResult_message,
+    deploymentResult_resultCode,
+
+    -- * Document
+    Document (..),
+    newDocument,
+
+    -- * ExtensionDetails
+    ExtensionDetails (..),
+    newExtensionDetails,
+    extensionDetails_description,
+    extensionDetails_name,
+    extensionDetails_namespace,
+
+    -- * ExtensionVersionDetails
+    ExtensionVersionDetails (..),
+    newExtensionVersionDetails,
+    extensionVersionDetails_name,
+    extensionVersionDetails_namespace,
+    extensionVersionDetails_schema,
+    extensionVersionDetails_version,
+
+    -- * GameConfigurationDetails
+    GameConfigurationDetails (..),
+    newGameConfigurationDetails,
+    gameConfigurationDetails_created,
+    gameConfigurationDetails_lastUpdated,
+    gameConfigurationDetails_sections,
+
+    -- * GameDetails
+    GameDetails (..),
+    newGameDetails,
+    gameDetails_arn,
+    gameDetails_created,
+    gameDetails_description,
+    gameDetails_enableTerminationProtection,
+    gameDetails_lastUpdated,
+    gameDetails_name,
+    gameDetails_state,
+    gameDetails_tags,
+
+    -- * GameSummary
+    GameSummary (..),
+    newGameSummary,
+    gameSummary_description,
+    gameSummary_name,
+    gameSummary_state,
+    gameSummary_tags,
+
+    -- * GeneratedCodeJobDetails
+    GeneratedCodeJobDetails (..),
+    newGeneratedCodeJobDetails,
+    generatedCodeJobDetails_description,
+    generatedCodeJobDetails_expirationTime,
+    generatedCodeJobDetails_generatedCodeJobId,
+    generatedCodeJobDetails_s3Url,
+    generatedCodeJobDetails_status,
+
+    -- * Generator
+    Generator (..),
+    newGenerator,
+    generator_gameSdkVersion,
+    generator_language,
+    generator_targetPlatform,
+
+    -- * ImportGameConfigurationSource
+    ImportGameConfigurationSource (..),
+    newImportGameConfigurationSource,
+    importGameConfigurationSource_file,
+
+    -- * Section
+    Section (..),
+    newSection,
+    section_attributes,
+    section_name,
+    section_size,
+
+    -- * SectionModification
+    SectionModification (..),
+    newSectionModification,
+    sectionModification_value,
+    sectionModification_operation,
+    sectionModification_path,
+    sectionModification_section,
+
+    -- * SnapshotDetails
+    SnapshotDetails (..),
+    newSnapshotDetails,
+    snapshotDetails_created,
+    snapshotDetails_description,
+    snapshotDetails_id,
+    snapshotDetails_lastUpdated,
+    snapshotDetails_sections,
+
+    -- * SnapshotSummary
+    SnapshotSummary (..),
+    newSnapshotSummary,
+    snapshotSummary_created,
+    snapshotSummary_description,
+    snapshotSummary_id,
+    snapshotSummary_lastUpdated,
+
+    -- * StageDeploymentDetails
+    StageDeploymentDetails (..),
+    newStageDeploymentDetails,
+    stageDeploymentDetails_created,
+    stageDeploymentDetails_deploymentAction,
+    stageDeploymentDetails_deploymentId,
+    stageDeploymentDetails_deploymentResult,
+    stageDeploymentDetails_deploymentState,
+    stageDeploymentDetails_lastUpdated,
+    stageDeploymentDetails_snapshotId,
+
+    -- * StageDeploymentSummary
+    StageDeploymentSummary (..),
+    newStageDeploymentSummary,
+    stageDeploymentSummary_deploymentAction,
+    stageDeploymentSummary_deploymentId,
+    stageDeploymentSummary_deploymentResult,
+    stageDeploymentSummary_deploymentState,
+    stageDeploymentSummary_lastUpdated,
+    stageDeploymentSummary_snapshotId,
+
+    -- * StageDetails
+    StageDetails (..),
+    newStageDetails,
+    stageDetails_arn,
+    stageDetails_created,
+    stageDetails_description,
+    stageDetails_gameKey,
+    stageDetails_lastUpdated,
+    stageDetails_logGroup,
+    stageDetails_name,
+    stageDetails_role,
+    stageDetails_state,
+    stageDetails_tags,
+
+    -- * StageSummary
+    StageSummary (..),
+    newStageSummary,
+    stageSummary_description,
+    stageSummary_gameKey,
+    stageSummary_name,
+    stageSummary_state,
+    stageSummary_tags,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.GamesParks.Types.Connection
+import Amazonka.GamesParks.Types.DeploymentAction
+import Amazonka.GamesParks.Types.DeploymentResult
+import Amazonka.GamesParks.Types.DeploymentState
+import Amazonka.GamesParks.Types.Document
+import Amazonka.GamesParks.Types.ExtensionDetails
+import Amazonka.GamesParks.Types.ExtensionVersionDetails
+import Amazonka.GamesParks.Types.GameConfigurationDetails
+import Amazonka.GamesParks.Types.GameDetails
+import Amazonka.GamesParks.Types.GameState
+import Amazonka.GamesParks.Types.GameSummary
+import Amazonka.GamesParks.Types.GeneratedCodeJobDetails
+import Amazonka.GamesParks.Types.GeneratedCodeJobState
+import Amazonka.GamesParks.Types.Generator
+import Amazonka.GamesParks.Types.ImportGameConfigurationSource
+import Amazonka.GamesParks.Types.Operation
+import Amazonka.GamesParks.Types.ResultCode
+import Amazonka.GamesParks.Types.Section
+import Amazonka.GamesParks.Types.SectionModification
+import Amazonka.GamesParks.Types.SnapshotDetails
+import Amazonka.GamesParks.Types.SnapshotSummary
+import Amazonka.GamesParks.Types.StageDeploymentDetails
+import Amazonka.GamesParks.Types.StageDeploymentSummary
+import Amazonka.GamesParks.Types.StageDetails
+import Amazonka.GamesParks.Types.StageState
+import Amazonka.GamesParks.Types.StageSummary
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-08-17@ of the Amazon GameSparks SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "GamesParks",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "gamesparks",
+      Core.signingName = "gamesparks",
+      Core.version = "2021-08-17",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "GamesParks",
+      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
+
+-- | You do not have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The resource already exists, or another operation is in progress.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The service encountered an internal error.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The resource specified in the request does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The request would result in exceeding service quota.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request throughput limit was exceeded.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | One of the parameters in the request is invalid.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/GamesParks/Types/Connection.hs b/gen/Amazonka/GamesParks/Types/Connection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/Connection.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.GamesParks.Types.Connection
+-- 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.GamesParks.Types.Connection 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
+
+-- | Details about a WebSocket connection.
+--
+-- /See:/ 'newConnection' smart constructor.
+data Connection = Connection'
+  { -- | The date and time when the connection was created.
+    created :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier used to indicate a specific WebSocket connection.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Connection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'created', 'connection_created' - The date and time when the connection was created.
+--
+-- 'id', 'connection_id' - The identifier used to indicate a specific WebSocket connection.
+newConnection ::
+  Connection
+newConnection =
+  Connection'
+    { created = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The date and time when the connection was created.
+connection_created :: Lens.Lens' Connection (Prelude.Maybe Prelude.UTCTime)
+connection_created = Lens.lens (\Connection' {created} -> created) (\s@Connection' {} a -> s {created = a} :: Connection) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier used to indicate a specific WebSocket connection.
+connection_id :: Lens.Lens' Connection (Prelude.Maybe Prelude.Text)
+connection_id = Lens.lens (\Connection' {id} -> id) (\s@Connection' {} a -> s {id = a} :: Connection)
+
+instance Data.FromJSON Connection where
+  parseJSON =
+    Data.withObject
+      "Connection"
+      ( \x ->
+          Connection'
+            Prelude.<$> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "Id")
+      )
+
+instance Prelude.Hashable Connection where
+  hashWithSalt _salt Connection' {..} =
+    _salt
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData Connection where
+  rnf Connection' {..} =
+    Prelude.rnf created `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/GamesParks/Types/DeploymentAction.hs b/gen/Amazonka/GamesParks/Types/DeploymentAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/DeploymentAction.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.DeploymentAction
+-- 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.GamesParks.Types.DeploymentAction
+  ( DeploymentAction
+      ( ..,
+        DeploymentAction_DEPLOY,
+        DeploymentAction_UNDEPLOY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeploymentAction = DeploymentAction'
+  { fromDeploymentAction ::
+      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 DeploymentAction_DEPLOY :: DeploymentAction
+pattern DeploymentAction_DEPLOY = DeploymentAction' "DEPLOY"
+
+pattern DeploymentAction_UNDEPLOY :: DeploymentAction
+pattern DeploymentAction_UNDEPLOY = DeploymentAction' "UNDEPLOY"
+
+{-# COMPLETE
+  DeploymentAction_DEPLOY,
+  DeploymentAction_UNDEPLOY,
+  DeploymentAction'
+  #-}
diff --git a/gen/Amazonka/GamesParks/Types/DeploymentResult.hs b/gen/Amazonka/GamesParks/Types/DeploymentResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/DeploymentResult.hs
@@ -0,0 +1,85 @@
+{-# 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.GamesParks.Types.DeploymentResult
+-- 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.GamesParks.Types.DeploymentResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.ResultCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | The result of the deployment.
+--
+-- /See:/ 'newDeploymentResult' smart constructor.
+data DeploymentResult = DeploymentResult'
+  { -- | Details about the deployment result.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The type of deployment result.
+    resultCode :: Prelude.Maybe ResultCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeploymentResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'deploymentResult_message' - Details about the deployment result.
+--
+-- 'resultCode', 'deploymentResult_resultCode' - The type of deployment result.
+newDeploymentResult ::
+  DeploymentResult
+newDeploymentResult =
+  DeploymentResult'
+    { message = Prelude.Nothing,
+      resultCode = Prelude.Nothing
+    }
+
+-- | Details about the deployment result.
+deploymentResult_message :: Lens.Lens' DeploymentResult (Prelude.Maybe Prelude.Text)
+deploymentResult_message = Lens.lens (\DeploymentResult' {message} -> message) (\s@DeploymentResult' {} a -> s {message = a} :: DeploymentResult)
+
+-- | The type of deployment result.
+deploymentResult_resultCode :: Lens.Lens' DeploymentResult (Prelude.Maybe ResultCode)
+deploymentResult_resultCode = Lens.lens (\DeploymentResult' {resultCode} -> resultCode) (\s@DeploymentResult' {} a -> s {resultCode = a} :: DeploymentResult)
+
+instance Data.FromJSON DeploymentResult where
+  parseJSON =
+    Data.withObject
+      "DeploymentResult"
+      ( \x ->
+          DeploymentResult'
+            Prelude.<$> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "ResultCode")
+      )
+
+instance Prelude.Hashable DeploymentResult where
+  hashWithSalt _salt DeploymentResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` resultCode
+
+instance Prelude.NFData DeploymentResult where
+  rnf DeploymentResult' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resultCode
diff --git a/gen/Amazonka/GamesParks/Types/DeploymentState.hs b/gen/Amazonka/GamesParks/Types/DeploymentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/DeploymentState.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.DeploymentState
+-- 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.GamesParks.Types.DeploymentState
+  ( DeploymentState
+      ( ..,
+        DeploymentState_COMPLETED,
+        DeploymentState_FAILED,
+        DeploymentState_IN_PROGRESS,
+        DeploymentState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeploymentState = DeploymentState'
+  { fromDeploymentState ::
+      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 DeploymentState_COMPLETED :: DeploymentState
+pattern DeploymentState_COMPLETED = DeploymentState' "COMPLETED"
+
+pattern DeploymentState_FAILED :: DeploymentState
+pattern DeploymentState_FAILED = DeploymentState' "FAILED"
+
+pattern DeploymentState_IN_PROGRESS :: DeploymentState
+pattern DeploymentState_IN_PROGRESS = DeploymentState' "IN_PROGRESS"
+
+pattern DeploymentState_PENDING :: DeploymentState
+pattern DeploymentState_PENDING = DeploymentState' "PENDING"
+
+{-# COMPLETE
+  DeploymentState_COMPLETED,
+  DeploymentState_FAILED,
+  DeploymentState_IN_PROGRESS,
+  DeploymentState_PENDING,
+  DeploymentState'
+  #-}
diff --git a/gen/Amazonka/GamesParks/Types/Document.hs b/gen/Amazonka/GamesParks/Types/Document.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/Document.hs
@@ -0,0 +1,57 @@
+{-# 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.GamesParks.Types.Document
+-- 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.GamesParks.Types.Document 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:/ 'newDocument' smart constructor.
+data Document = Document'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Document' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDocument ::
+  Document
+newDocument = Document'
+
+instance Data.FromJSON Document where
+  parseJSON =
+    Data.withObject
+      "Document"
+      (\x -> Prelude.pure Document')
+
+instance Prelude.Hashable Document where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData Document where
+  rnf _ = ()
+
+instance Data.ToJSON Document where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
diff --git a/gen/Amazonka/GamesParks/Types/ExtensionDetails.hs b/gen/Amazonka/GamesParks/Types/ExtensionDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/ExtensionDetails.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.ExtensionDetails
+-- 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.GamesParks.Types.ExtensionDetails 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
+
+-- | Details about the extension.
+--
+-- /See:/ 'newExtensionDetails' smart constructor.
+data ExtensionDetails = ExtensionDetails'
+  { -- | The description of the extension.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the extension.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The namespace (qualifier) of the extension.
+    namespace :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExtensionDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'extensionDetails_description' - The description of the extension.
+--
+-- 'name', 'extensionDetails_name' - The name of the extension.
+--
+-- 'namespace', 'extensionDetails_namespace' - The namespace (qualifier) of the extension.
+newExtensionDetails ::
+  ExtensionDetails
+newExtensionDetails =
+  ExtensionDetails'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      namespace = Prelude.Nothing
+    }
+
+-- | The description of the extension.
+extensionDetails_description :: Lens.Lens' ExtensionDetails (Prelude.Maybe Prelude.Text)
+extensionDetails_description = Lens.lens (\ExtensionDetails' {description} -> description) (\s@ExtensionDetails' {} a -> s {description = a} :: ExtensionDetails)
+
+-- | The name of the extension.
+extensionDetails_name :: Lens.Lens' ExtensionDetails (Prelude.Maybe Prelude.Text)
+extensionDetails_name = Lens.lens (\ExtensionDetails' {name} -> name) (\s@ExtensionDetails' {} a -> s {name = a} :: ExtensionDetails)
+
+-- | The namespace (qualifier) of the extension.
+extensionDetails_namespace :: Lens.Lens' ExtensionDetails (Prelude.Maybe Prelude.Text)
+extensionDetails_namespace = Lens.lens (\ExtensionDetails' {namespace} -> namespace) (\s@ExtensionDetails' {} a -> s {namespace = a} :: ExtensionDetails)
+
+instance Data.FromJSON ExtensionDetails where
+  parseJSON =
+    Data.withObject
+      "ExtensionDetails"
+      ( \x ->
+          ExtensionDetails'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Namespace")
+      )
+
+instance Prelude.Hashable ExtensionDetails where
+  hashWithSalt _salt ExtensionDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+
+instance Prelude.NFData ExtensionDetails where
+  rnf ExtensionDetails' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
diff --git a/gen/Amazonka/GamesParks/Types/ExtensionVersionDetails.hs b/gen/Amazonka/GamesParks/Types/ExtensionVersionDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/ExtensionVersionDetails.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.ExtensionVersionDetails
+-- 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.GamesParks.Types.ExtensionVersionDetails 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
+
+-- | Details about the extension version.
+--
+-- /See:/ 'newExtensionVersionDetails' smart constructor.
+data ExtensionVersionDetails = ExtensionVersionDetails'
+  { -- | The name of the extension.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The namespace (qualifier) of the extension.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The model that defines the interface for this extension version.
+    schema :: Prelude.Maybe Prelude.Text,
+    -- | The version of the extension.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExtensionVersionDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'extensionVersionDetails_name' - The name of the extension.
+--
+-- 'namespace', 'extensionVersionDetails_namespace' - The namespace (qualifier) of the extension.
+--
+-- 'schema', 'extensionVersionDetails_schema' - The model that defines the interface for this extension version.
+--
+-- 'version', 'extensionVersionDetails_version' - The version of the extension.
+newExtensionVersionDetails ::
+  ExtensionVersionDetails
+newExtensionVersionDetails =
+  ExtensionVersionDetails'
+    { name = Prelude.Nothing,
+      namespace = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The name of the extension.
+extensionVersionDetails_name :: Lens.Lens' ExtensionVersionDetails (Prelude.Maybe Prelude.Text)
+extensionVersionDetails_name = Lens.lens (\ExtensionVersionDetails' {name} -> name) (\s@ExtensionVersionDetails' {} a -> s {name = a} :: ExtensionVersionDetails)
+
+-- | The namespace (qualifier) of the extension.
+extensionVersionDetails_namespace :: Lens.Lens' ExtensionVersionDetails (Prelude.Maybe Prelude.Text)
+extensionVersionDetails_namespace = Lens.lens (\ExtensionVersionDetails' {namespace} -> namespace) (\s@ExtensionVersionDetails' {} a -> s {namespace = a} :: ExtensionVersionDetails)
+
+-- | The model that defines the interface for this extension version.
+extensionVersionDetails_schema :: Lens.Lens' ExtensionVersionDetails (Prelude.Maybe Prelude.Text)
+extensionVersionDetails_schema = Lens.lens (\ExtensionVersionDetails' {schema} -> schema) (\s@ExtensionVersionDetails' {} a -> s {schema = a} :: ExtensionVersionDetails)
+
+-- | The version of the extension.
+extensionVersionDetails_version :: Lens.Lens' ExtensionVersionDetails (Prelude.Maybe Prelude.Text)
+extensionVersionDetails_version = Lens.lens (\ExtensionVersionDetails' {version} -> version) (\s@ExtensionVersionDetails' {} a -> s {version = a} :: ExtensionVersionDetails)
+
+instance Data.FromJSON ExtensionVersionDetails where
+  parseJSON =
+    Data.withObject
+      "ExtensionVersionDetails"
+      ( \x ->
+          ExtensionVersionDetails'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Namespace")
+            Prelude.<*> (x Data..:? "Schema")
+            Prelude.<*> (x Data..:? "Version")
+      )
+
+instance Prelude.Hashable ExtensionVersionDetails where
+  hashWithSalt _salt ExtensionVersionDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` schema
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData ExtensionVersionDetails where
+  rnf ExtensionVersionDetails' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/GamesParks/Types/GameConfigurationDetails.hs b/gen/Amazonka/GamesParks/Types/GameConfigurationDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/GameConfigurationDetails.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.GameConfigurationDetails
+-- 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.GamesParks.Types.GameConfigurationDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.Section
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the game configuration.
+--
+-- The game configuration is organized into named sections, where the
+-- schema of each section is defined by an extension. The schema for these
+-- sections can be retrieved using the @GetExtensionVersion@ operation.
+--
+-- /See:/ 'newGameConfigurationDetails' smart constructor.
+data GameConfigurationDetails = GameConfigurationDetails'
+  { -- | The date when the game was created.
+    created :: Prelude.Maybe Data.ISO8601,
+    -- | The date when the game was last modified.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | Configuration data, organized by section name.
+    sections :: Prelude.Maybe (Prelude.HashMap Prelude.Text Section)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GameConfigurationDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'created', 'gameConfigurationDetails_created' - The date when the game was created.
+--
+-- 'lastUpdated', 'gameConfigurationDetails_lastUpdated' - The date when the game was last modified.
+--
+-- 'sections', 'gameConfigurationDetails_sections' - Configuration data, organized by section name.
+newGameConfigurationDetails ::
+  GameConfigurationDetails
+newGameConfigurationDetails =
+  GameConfigurationDetails'
+    { created =
+        Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      sections = Prelude.Nothing
+    }
+
+-- | The date when the game was created.
+gameConfigurationDetails_created :: Lens.Lens' GameConfigurationDetails (Prelude.Maybe Prelude.UTCTime)
+gameConfigurationDetails_created = Lens.lens (\GameConfigurationDetails' {created} -> created) (\s@GameConfigurationDetails' {} a -> s {created = a} :: GameConfigurationDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The date when the game was last modified.
+gameConfigurationDetails_lastUpdated :: Lens.Lens' GameConfigurationDetails (Prelude.Maybe Prelude.UTCTime)
+gameConfigurationDetails_lastUpdated = Lens.lens (\GameConfigurationDetails' {lastUpdated} -> lastUpdated) (\s@GameConfigurationDetails' {} a -> s {lastUpdated = a} :: GameConfigurationDetails) Prelude.. Lens.mapping Data._Time
+
+-- | Configuration data, organized by section name.
+gameConfigurationDetails_sections :: Lens.Lens' GameConfigurationDetails (Prelude.Maybe (Prelude.HashMap Prelude.Text Section))
+gameConfigurationDetails_sections = Lens.lens (\GameConfigurationDetails' {sections} -> sections) (\s@GameConfigurationDetails' {} a -> s {sections = a} :: GameConfigurationDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON GameConfigurationDetails where
+  parseJSON =
+    Data.withObject
+      "GameConfigurationDetails"
+      ( \x ->
+          GameConfigurationDetails'
+            Prelude.<$> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "Sections" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable GameConfigurationDetails where
+  hashWithSalt _salt GameConfigurationDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` sections
+
+instance Prelude.NFData GameConfigurationDetails where
+  rnf GameConfigurationDetails' {..} =
+    Prelude.rnf created
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf sections
diff --git a/gen/Amazonka/GamesParks/Types/GameDetails.hs b/gen/Amazonka/GamesParks/Types/GameDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/GameDetails.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.GameDetails
+-- 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.GamesParks.Types.GameDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.GameState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a game.
+--
+-- /See:/ 'newGameDetails' smart constructor.
+data GameDetails = GameDetails'
+  { -- | The Amazon Resource Name (ARN) of this game.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date when the game was created.
+    created :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the game.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Determines if the game can be deleted.
+    enableTerminationProtection :: Prelude.Maybe Prelude.Bool,
+    -- | The date when the game was last modified.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the game.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The state of the game.
+    state :: Prelude.Maybe GameState,
+    -- | The tags associated with the game.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GameDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'gameDetails_arn' - The Amazon Resource Name (ARN) of this game.
+--
+-- 'created', 'gameDetails_created' - The date when the game was created.
+--
+-- 'description', 'gameDetails_description' - The description of the game.
+--
+-- 'enableTerminationProtection', 'gameDetails_enableTerminationProtection' - Determines if the game can be deleted.
+--
+-- 'lastUpdated', 'gameDetails_lastUpdated' - The date when the game was last modified.
+--
+-- 'name', 'gameDetails_name' - The name of the game.
+--
+-- 'state', 'gameDetails_state' - The state of the game.
+--
+-- 'tags', 'gameDetails_tags' - The tags associated with the game.
+newGameDetails ::
+  GameDetails
+newGameDetails =
+  GameDetails'
+    { arn = Prelude.Nothing,
+      created = Prelude.Nothing,
+      description = Prelude.Nothing,
+      enableTerminationProtection = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      name = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of this game.
+gameDetails_arn :: Lens.Lens' GameDetails (Prelude.Maybe Prelude.Text)
+gameDetails_arn = Lens.lens (\GameDetails' {arn} -> arn) (\s@GameDetails' {} a -> s {arn = a} :: GameDetails)
+
+-- | The date when the game was created.
+gameDetails_created :: Lens.Lens' GameDetails (Prelude.Maybe Prelude.UTCTime)
+gameDetails_created = Lens.lens (\GameDetails' {created} -> created) (\s@GameDetails' {} a -> s {created = a} :: GameDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the game.
+gameDetails_description :: Lens.Lens' GameDetails (Prelude.Maybe Prelude.Text)
+gameDetails_description = Lens.lens (\GameDetails' {description} -> description) (\s@GameDetails' {} a -> s {description = a} :: GameDetails)
+
+-- | Determines if the game can be deleted.
+gameDetails_enableTerminationProtection :: Lens.Lens' GameDetails (Prelude.Maybe Prelude.Bool)
+gameDetails_enableTerminationProtection = Lens.lens (\GameDetails' {enableTerminationProtection} -> enableTerminationProtection) (\s@GameDetails' {} a -> s {enableTerminationProtection = a} :: GameDetails)
+
+-- | The date when the game was last modified.
+gameDetails_lastUpdated :: Lens.Lens' GameDetails (Prelude.Maybe Prelude.UTCTime)
+gameDetails_lastUpdated = Lens.lens (\GameDetails' {lastUpdated} -> lastUpdated) (\s@GameDetails' {} a -> s {lastUpdated = a} :: GameDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the game.
+gameDetails_name :: Lens.Lens' GameDetails (Prelude.Maybe Prelude.Text)
+gameDetails_name = Lens.lens (\GameDetails' {name} -> name) (\s@GameDetails' {} a -> s {name = a} :: GameDetails)
+
+-- | The state of the game.
+gameDetails_state :: Lens.Lens' GameDetails (Prelude.Maybe GameState)
+gameDetails_state = Lens.lens (\GameDetails' {state} -> state) (\s@GameDetails' {} a -> s {state = a} :: GameDetails)
+
+-- | The tags associated with the game.
+gameDetails_tags :: Lens.Lens' GameDetails (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+gameDetails_tags = Lens.lens (\GameDetails' {tags} -> tags) (\s@GameDetails' {} a -> s {tags = a} :: GameDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON GameDetails where
+  parseJSON =
+    Data.withObject
+      "GameDetails"
+      ( \x ->
+          GameDetails'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "EnableTerminationProtection")
+            Prelude.<*> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable GameDetails where
+  hashWithSalt _salt GameDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` enableTerminationProtection
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData GameDetails where
+  rnf GameDetails' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf created
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf enableTerminationProtection
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/GamesParks/Types/GameState.hs b/gen/Amazonka/GamesParks/Types/GameState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/GameState.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.GameState
+-- 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.GamesParks.Types.GameState
+  ( GameState
+      ( ..,
+        GameState_ACTIVE,
+        GameState_DELETING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype GameState = GameState'
+  { fromGameState ::
+      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 GameState_ACTIVE :: GameState
+pattern GameState_ACTIVE = GameState' "ACTIVE"
+
+pattern GameState_DELETING :: GameState
+pattern GameState_DELETING = GameState' "DELETING"
+
+{-# COMPLETE
+  GameState_ACTIVE,
+  GameState_DELETING,
+  GameState'
+  #-}
diff --git a/gen/Amazonka/GamesParks/Types/GameSummary.hs b/gen/Amazonka/GamesParks/Types/GameSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/GameSummary.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.GameSummary
+-- 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.GamesParks.Types.GameSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.GameState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the properties of a game.
+--
+-- /See:/ 'newGameSummary' smart constructor.
+data GameSummary = GameSummary'
+  { -- | The description of the game.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The state of the game.
+    state :: Prelude.Maybe GameState,
+    -- | The tags associated with the game.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GameSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'gameSummary_description' - The description of the game.
+--
+-- 'name', 'gameSummary_name' - The name of the game.
+--
+-- 'state', 'gameSummary_state' - The state of the game.
+--
+-- 'tags', 'gameSummary_tags' - The tags associated with the game.
+newGameSummary ::
+  GameSummary
+newGameSummary =
+  GameSummary'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The description of the game.
+gameSummary_description :: Lens.Lens' GameSummary (Prelude.Maybe Prelude.Text)
+gameSummary_description = Lens.lens (\GameSummary' {description} -> description) (\s@GameSummary' {} a -> s {description = a} :: GameSummary)
+
+-- | The name of the game.
+gameSummary_name :: Lens.Lens' GameSummary (Prelude.Maybe Prelude.Text)
+gameSummary_name = Lens.lens (\GameSummary' {name} -> name) (\s@GameSummary' {} a -> s {name = a} :: GameSummary)
+
+-- | The state of the game.
+gameSummary_state :: Lens.Lens' GameSummary (Prelude.Maybe GameState)
+gameSummary_state = Lens.lens (\GameSummary' {state} -> state) (\s@GameSummary' {} a -> s {state = a} :: GameSummary)
+
+-- | The tags associated with the game.
+gameSummary_tags :: Lens.Lens' GameSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+gameSummary_tags = Lens.lens (\GameSummary' {tags} -> tags) (\s@GameSummary' {} a -> s {tags = a} :: GameSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON GameSummary where
+  parseJSON =
+    Data.withObject
+      "GameSummary"
+      ( \x ->
+          GameSummary'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable GameSummary where
+  hashWithSalt _salt GameSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData GameSummary where
+  rnf GameSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/GamesParks/Types/GeneratedCodeJobDetails.hs b/gen/Amazonka/GamesParks/Types/GeneratedCodeJobDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/GeneratedCodeJobDetails.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.GamesParks.Types.GeneratedCodeJobDetails
+-- 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.GamesParks.Types.GeneratedCodeJobDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.GeneratedCodeJobState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a generated code job.
+--
+-- /See:/ 'newGeneratedCodeJobDetails' smart constructor.
+data GeneratedCodeJobDetails = GeneratedCodeJobDetails'
+  { -- | The description of the generated code job.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The expiration date and time for the download URL.
+    --
+    -- The download URL us guaranteed to be available until at least this time.
+    expirationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier for the generated code job.
+    generatedCodeJobId :: Prelude.Maybe Prelude.Text,
+    -- | A presigned URL that can be used to download the generated code.
+    s3Url :: Prelude.Maybe Prelude.Text,
+    -- | The status of the generated code job
+    status :: Prelude.Maybe GeneratedCodeJobState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GeneratedCodeJobDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'generatedCodeJobDetails_description' - The description of the generated code job.
+--
+-- 'expirationTime', 'generatedCodeJobDetails_expirationTime' - The expiration date and time for the download URL.
+--
+-- The download URL us guaranteed to be available until at least this time.
+--
+-- 'generatedCodeJobId', 'generatedCodeJobDetails_generatedCodeJobId' - The identifier for the generated code job.
+--
+-- 's3Url', 'generatedCodeJobDetails_s3Url' - A presigned URL that can be used to download the generated code.
+--
+-- 'status', 'generatedCodeJobDetails_status' - The status of the generated code job
+newGeneratedCodeJobDetails ::
+  GeneratedCodeJobDetails
+newGeneratedCodeJobDetails =
+  GeneratedCodeJobDetails'
+    { description =
+        Prelude.Nothing,
+      expirationTime = Prelude.Nothing,
+      generatedCodeJobId = Prelude.Nothing,
+      s3Url = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The description of the generated code job.
+generatedCodeJobDetails_description :: Lens.Lens' GeneratedCodeJobDetails (Prelude.Maybe Prelude.Text)
+generatedCodeJobDetails_description = Lens.lens (\GeneratedCodeJobDetails' {description} -> description) (\s@GeneratedCodeJobDetails' {} a -> s {description = a} :: GeneratedCodeJobDetails)
+
+-- | The expiration date and time for the download URL.
+--
+-- The download URL us guaranteed to be available until at least this time.
+generatedCodeJobDetails_expirationTime :: Lens.Lens' GeneratedCodeJobDetails (Prelude.Maybe Prelude.UTCTime)
+generatedCodeJobDetails_expirationTime = Lens.lens (\GeneratedCodeJobDetails' {expirationTime} -> expirationTime) (\s@GeneratedCodeJobDetails' {} a -> s {expirationTime = a} :: GeneratedCodeJobDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier for the generated code job.
+generatedCodeJobDetails_generatedCodeJobId :: Lens.Lens' GeneratedCodeJobDetails (Prelude.Maybe Prelude.Text)
+generatedCodeJobDetails_generatedCodeJobId = Lens.lens (\GeneratedCodeJobDetails' {generatedCodeJobId} -> generatedCodeJobId) (\s@GeneratedCodeJobDetails' {} a -> s {generatedCodeJobId = a} :: GeneratedCodeJobDetails)
+
+-- | A presigned URL that can be used to download the generated code.
+generatedCodeJobDetails_s3Url :: Lens.Lens' GeneratedCodeJobDetails (Prelude.Maybe Prelude.Text)
+generatedCodeJobDetails_s3Url = Lens.lens (\GeneratedCodeJobDetails' {s3Url} -> s3Url) (\s@GeneratedCodeJobDetails' {} a -> s {s3Url = a} :: GeneratedCodeJobDetails)
+
+-- | The status of the generated code job
+generatedCodeJobDetails_status :: Lens.Lens' GeneratedCodeJobDetails (Prelude.Maybe GeneratedCodeJobState)
+generatedCodeJobDetails_status = Lens.lens (\GeneratedCodeJobDetails' {status} -> status) (\s@GeneratedCodeJobDetails' {} a -> s {status = a} :: GeneratedCodeJobDetails)
+
+instance Data.FromJSON GeneratedCodeJobDetails where
+  parseJSON =
+    Data.withObject
+      "GeneratedCodeJobDetails"
+      ( \x ->
+          GeneratedCodeJobDetails'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ExpirationTime")
+            Prelude.<*> (x Data..:? "GeneratedCodeJobId")
+            Prelude.<*> (x Data..:? "S3Url")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable GeneratedCodeJobDetails where
+  hashWithSalt _salt GeneratedCodeJobDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` expirationTime
+      `Prelude.hashWithSalt` generatedCodeJobId
+      `Prelude.hashWithSalt` s3Url
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData GeneratedCodeJobDetails where
+  rnf GeneratedCodeJobDetails' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf expirationTime
+      `Prelude.seq` Prelude.rnf generatedCodeJobId
+      `Prelude.seq` Prelude.rnf s3Url
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/GamesParks/Types/GeneratedCodeJobState.hs b/gen/Amazonka/GamesParks/Types/GeneratedCodeJobState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/GeneratedCodeJobState.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.GeneratedCodeJobState
+-- 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.GamesParks.Types.GeneratedCodeJobState
+  ( GeneratedCodeJobState
+      ( ..,
+        GeneratedCodeJobState_COMPLETED,
+        GeneratedCodeJobState_FAILED,
+        GeneratedCodeJobState_IN_PROGRESS,
+        GeneratedCodeJobState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype GeneratedCodeJobState = GeneratedCodeJobState'
+  { fromGeneratedCodeJobState ::
+      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 GeneratedCodeJobState_COMPLETED :: GeneratedCodeJobState
+pattern GeneratedCodeJobState_COMPLETED = GeneratedCodeJobState' "COMPLETED"
+
+pattern GeneratedCodeJobState_FAILED :: GeneratedCodeJobState
+pattern GeneratedCodeJobState_FAILED = GeneratedCodeJobState' "FAILED"
+
+pattern GeneratedCodeJobState_IN_PROGRESS :: GeneratedCodeJobState
+pattern GeneratedCodeJobState_IN_PROGRESS = GeneratedCodeJobState' "IN_PROGRESS"
+
+pattern GeneratedCodeJobState_PENDING :: GeneratedCodeJobState
+pattern GeneratedCodeJobState_PENDING = GeneratedCodeJobState' "PENDING"
+
+{-# COMPLETE
+  GeneratedCodeJobState_COMPLETED,
+  GeneratedCodeJobState_FAILED,
+  GeneratedCodeJobState_IN_PROGRESS,
+  GeneratedCodeJobState_PENDING,
+  GeneratedCodeJobState'
+  #-}
diff --git a/gen/Amazonka/GamesParks/Types/Generator.hs b/gen/Amazonka/GamesParks/Types/Generator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/Generator.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.GamesParks.Types.Generator
+-- 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.GamesParks.Types.Generator 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
+
+-- | Properties that specify the code generator for a generated code job.
+--
+-- /See:/ 'newGenerator' smart constructor.
+data Generator = Generator'
+  { -- | The target version of the GameSparks Game SDK.
+    gameSdkVersion :: Prelude.Maybe Prelude.Text,
+    -- | The programming language for the generated code.
+    --
+    -- Not all languages are supported for each platform. For cases where
+    -- multiple languages are supported, this parameter specifies the language
+    -- to be used. If this value is omitted, the default language for the
+    -- target platform will be used.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | The platform that will be used to run the generated code.
+    targetPlatform :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Generator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameSdkVersion', 'generator_gameSdkVersion' - The target version of the GameSparks Game SDK.
+--
+-- 'language', 'generator_language' - The programming language for the generated code.
+--
+-- Not all languages are supported for each platform. For cases where
+-- multiple languages are supported, this parameter specifies the language
+-- to be used. If this value is omitted, the default language for the
+-- target platform will be used.
+--
+-- 'targetPlatform', 'generator_targetPlatform' - The platform that will be used to run the generated code.
+newGenerator ::
+  Generator
+newGenerator =
+  Generator'
+    { gameSdkVersion = Prelude.Nothing,
+      language = Prelude.Nothing,
+      targetPlatform = Prelude.Nothing
+    }
+
+-- | The target version of the GameSparks Game SDK.
+generator_gameSdkVersion :: Lens.Lens' Generator (Prelude.Maybe Prelude.Text)
+generator_gameSdkVersion = Lens.lens (\Generator' {gameSdkVersion} -> gameSdkVersion) (\s@Generator' {} a -> s {gameSdkVersion = a} :: Generator)
+
+-- | The programming language for the generated code.
+--
+-- Not all languages are supported for each platform. For cases where
+-- multiple languages are supported, this parameter specifies the language
+-- to be used. If this value is omitted, the default language for the
+-- target platform will be used.
+generator_language :: Lens.Lens' Generator (Prelude.Maybe Prelude.Text)
+generator_language = Lens.lens (\Generator' {language} -> language) (\s@Generator' {} a -> s {language = a} :: Generator)
+
+-- | The platform that will be used to run the generated code.
+generator_targetPlatform :: Lens.Lens' Generator (Prelude.Maybe Prelude.Text)
+generator_targetPlatform = Lens.lens (\Generator' {targetPlatform} -> targetPlatform) (\s@Generator' {} a -> s {targetPlatform = a} :: Generator)
+
+instance Prelude.Hashable Generator where
+  hashWithSalt _salt Generator' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameSdkVersion
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` targetPlatform
+
+instance Prelude.NFData Generator where
+  rnf Generator' {..} =
+    Prelude.rnf gameSdkVersion
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf targetPlatform
+
+instance Data.ToJSON Generator where
+  toJSON Generator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("GameSdkVersion" Data..=)
+              Prelude.<$> gameSdkVersion,
+            ("Language" Data..=) Prelude.<$> language,
+            ("TargetPlatform" Data..=)
+              Prelude.<$> targetPlatform
+          ]
+      )
diff --git a/gen/Amazonka/GamesParks/Types/ImportGameConfigurationSource.hs b/gen/Amazonka/GamesParks/Types/ImportGameConfigurationSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/ImportGameConfigurationSource.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.GamesParks.Types.ImportGameConfigurationSource
+-- 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.GamesParks.Types.ImportGameConfigurationSource 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 source used to import configuration sections.
+--
+-- /See:/ 'newImportGameConfigurationSource' smart constructor.
+data ImportGameConfigurationSource = ImportGameConfigurationSource'
+  { -- | The JSON string containing the configuration sections.
+    file :: Data.Base64
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportGameConfigurationSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'file', 'importGameConfigurationSource_file' - The JSON string containing the configuration sections.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+newImportGameConfigurationSource ::
+  -- | 'file'
+  Prelude.ByteString ->
+  ImportGameConfigurationSource
+newImportGameConfigurationSource pFile_ =
+  ImportGameConfigurationSource'
+    { file =
+        Data._Base64 Lens.# pFile_
+    }
+
+-- | The JSON string containing the configuration sections.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+importGameConfigurationSource_file :: Lens.Lens' ImportGameConfigurationSource Prelude.ByteString
+importGameConfigurationSource_file = Lens.lens (\ImportGameConfigurationSource' {file} -> file) (\s@ImportGameConfigurationSource' {} a -> s {file = a} :: ImportGameConfigurationSource) Prelude.. Data._Base64
+
+instance
+  Prelude.Hashable
+    ImportGameConfigurationSource
+  where
+  hashWithSalt _salt ImportGameConfigurationSource' {..} =
+    _salt `Prelude.hashWithSalt` file
+
+instance Prelude.NFData ImportGameConfigurationSource where
+  rnf ImportGameConfigurationSource' {..} =
+    Prelude.rnf file
+
+instance Data.ToJSON ImportGameConfigurationSource where
+  toJSON ImportGameConfigurationSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("File" Data..= file)]
+      )
diff --git a/gen/Amazonka/GamesParks/Types/Operation.hs b/gen/Amazonka/GamesParks/Types/Operation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/Operation.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.Operation
+-- 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.GamesParks.Types.Operation
+  ( Operation
+      ( ..,
+        Operation_ADD,
+        Operation_REMOVE,
+        Operation_REPLACE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Operation = Operation'
+  { fromOperation ::
+      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 Operation_ADD :: Operation
+pattern Operation_ADD = Operation' "ADD"
+
+pattern Operation_REMOVE :: Operation
+pattern Operation_REMOVE = Operation' "REMOVE"
+
+pattern Operation_REPLACE :: Operation
+pattern Operation_REPLACE = Operation' "REPLACE"
+
+{-# COMPLETE
+  Operation_ADD,
+  Operation_REMOVE,
+  Operation_REPLACE,
+  Operation'
+  #-}
diff --git a/gen/Amazonka/GamesParks/Types/ResultCode.hs b/gen/Amazonka/GamesParks/Types/ResultCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/ResultCode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.ResultCode
+-- 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.GamesParks.Types.ResultCode
+  ( ResultCode
+      ( ..,
+        ResultCode_INVALID_ROLE_FAILURE,
+        ResultCode_SUCCESS,
+        ResultCode_UNSPECIFIED_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResultCode = ResultCode'
+  { fromResultCode ::
+      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 ResultCode_INVALID_ROLE_FAILURE :: ResultCode
+pattern ResultCode_INVALID_ROLE_FAILURE = ResultCode' "INVALID_ROLE_FAILURE"
+
+pattern ResultCode_SUCCESS :: ResultCode
+pattern ResultCode_SUCCESS = ResultCode' "SUCCESS"
+
+pattern ResultCode_UNSPECIFIED_FAILURE :: ResultCode
+pattern ResultCode_UNSPECIFIED_FAILURE = ResultCode' "UNSPECIFIED_FAILURE"
+
+{-# COMPLETE
+  ResultCode_INVALID_ROLE_FAILURE,
+  ResultCode_SUCCESS,
+  ResultCode_UNSPECIFIED_FAILURE,
+  ResultCode'
+  #-}
diff --git a/gen/Amazonka/GamesParks/Types/Section.hs b/gen/Amazonka/GamesParks/Types/Section.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/Section.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.Section
+-- 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.GamesParks.Types.Section where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.Document
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration section.
+--
+-- /See:/ 'newSection' smart constructor.
+data Section = Section'
+  { -- | The content of a configuration section.
+    attributes :: Prelude.Maybe Document,
+    -- | The name of the section.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The size, in bytes, of the section contents.
+    size :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Section' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'section_attributes' - The content of a configuration section.
+--
+-- 'name', 'section_name' - The name of the section.
+--
+-- 'size', 'section_size' - The size, in bytes, of the section contents.
+newSection ::
+  Section
+newSection =
+  Section'
+    { attributes = Prelude.Nothing,
+      name = Prelude.Nothing,
+      size = Prelude.Nothing
+    }
+
+-- | The content of a configuration section.
+section_attributes :: Lens.Lens' Section (Prelude.Maybe Document)
+section_attributes = Lens.lens (\Section' {attributes} -> attributes) (\s@Section' {} a -> s {attributes = a} :: Section)
+
+-- | The name of the section.
+section_name :: Lens.Lens' Section (Prelude.Maybe Prelude.Text)
+section_name = Lens.lens (\Section' {name} -> name) (\s@Section' {} a -> s {name = a} :: Section)
+
+-- | The size, in bytes, of the section contents.
+section_size :: Lens.Lens' Section (Prelude.Maybe Prelude.Natural)
+section_size = Lens.lens (\Section' {size} -> size) (\s@Section' {} a -> s {size = a} :: Section)
+
+instance Data.FromJSON Section where
+  parseJSON =
+    Data.withObject
+      "Section"
+      ( \x ->
+          Section'
+            Prelude.<$> (x Data..:? "Attributes")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Size")
+      )
+
+instance Prelude.Hashable Section where
+  hashWithSalt _salt Section' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` size
+
+instance Prelude.NFData Section where
+  rnf Section' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf size
diff --git a/gen/Amazonka/GamesParks/Types/SectionModification.hs b/gen/Amazonka/GamesParks/Types/SectionModification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/SectionModification.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.GamesParks.Types.SectionModification
+-- 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.GamesParks.Types.SectionModification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.Document
+import Amazonka.GamesParks.Types.Operation
+import qualified Amazonka.Prelude as Prelude
+
+-- | A single modification to the configuration section.
+--
+-- /See:/ 'newSectionModification' smart constructor.
+data SectionModification = SectionModification'
+  { -- | For add and replace operations, this is the value that will be used.
+    --
+    -- This field should be omitted for delete operations.
+    value :: Prelude.Maybe Document,
+    -- | The operation to be performed on a configuration section.
+    --
+    -- Content can be added, deleted, or replaced within a section.
+    operation :: Operation,
+    -- | The path within the section content to be modified.
+    path :: Prelude.Text,
+    -- | The name of the section to be modified.
+    section :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SectionModification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'sectionModification_value' - For add and replace operations, this is the value that will be used.
+--
+-- This field should be omitted for delete operations.
+--
+-- 'operation', 'sectionModification_operation' - The operation to be performed on a configuration section.
+--
+-- Content can be added, deleted, or replaced within a section.
+--
+-- 'path', 'sectionModification_path' - The path within the section content to be modified.
+--
+-- 'section', 'sectionModification_section' - The name of the section to be modified.
+newSectionModification ::
+  -- | 'operation'
+  Operation ->
+  -- | 'path'
+  Prelude.Text ->
+  -- | 'section'
+  Prelude.Text ->
+  SectionModification
+newSectionModification pOperation_ pPath_ pSection_ =
+  SectionModification'
+    { value = Prelude.Nothing,
+      operation = pOperation_,
+      path = pPath_,
+      section = pSection_
+    }
+
+-- | For add and replace operations, this is the value that will be used.
+--
+-- This field should be omitted for delete operations.
+sectionModification_value :: Lens.Lens' SectionModification (Prelude.Maybe Document)
+sectionModification_value = Lens.lens (\SectionModification' {value} -> value) (\s@SectionModification' {} a -> s {value = a} :: SectionModification)
+
+-- | The operation to be performed on a configuration section.
+--
+-- Content can be added, deleted, or replaced within a section.
+sectionModification_operation :: Lens.Lens' SectionModification Operation
+sectionModification_operation = Lens.lens (\SectionModification' {operation} -> operation) (\s@SectionModification' {} a -> s {operation = a} :: SectionModification)
+
+-- | The path within the section content to be modified.
+sectionModification_path :: Lens.Lens' SectionModification Prelude.Text
+sectionModification_path = Lens.lens (\SectionModification' {path} -> path) (\s@SectionModification' {} a -> s {path = a} :: SectionModification)
+
+-- | The name of the section to be modified.
+sectionModification_section :: Lens.Lens' SectionModification Prelude.Text
+sectionModification_section = Lens.lens (\SectionModification' {section} -> section) (\s@SectionModification' {} a -> s {section = a} :: SectionModification)
+
+instance Prelude.Hashable SectionModification where
+  hashWithSalt _salt SectionModification' {..} =
+    _salt
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` operation
+      `Prelude.hashWithSalt` path
+      `Prelude.hashWithSalt` section
+
+instance Prelude.NFData SectionModification where
+  rnf SectionModification' {..} =
+    Prelude.rnf value
+      `Prelude.seq` Prelude.rnf operation
+      `Prelude.seq` Prelude.rnf path
+      `Prelude.seq` Prelude.rnf section
+
+instance Data.ToJSON SectionModification where
+  toJSON SectionModification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Value" Data..=) Prelude.<$> value,
+            Prelude.Just ("Operation" Data..= operation),
+            Prelude.Just ("Path" Data..= path),
+            Prelude.Just ("Section" Data..= section)
+          ]
+      )
diff --git a/gen/Amazonka/GamesParks/Types/SnapshotDetails.hs b/gen/Amazonka/GamesParks/Types/SnapshotDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/SnapshotDetails.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.SnapshotDetails
+-- 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.GamesParks.Types.SnapshotDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.Section
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties that provide details of a snapshot.
+--
+-- /See:/ 'newSnapshotDetails' smart constructor.
+data SnapshotDetails = SnapshotDetails'
+  { -- | The timestamp of when the snapshot was created.
+    created :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the snapshot.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the snapshot was last updated.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | The sections in the snapshot.
+    sections :: Prelude.Maybe (Prelude.HashMap Prelude.Text Section)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'created', 'snapshotDetails_created' - The timestamp of when the snapshot was created.
+--
+-- 'description', 'snapshotDetails_description' - The description of the snapshot.
+--
+-- 'id', 'snapshotDetails_id' - The identifier of the snapshot.
+--
+-- 'lastUpdated', 'snapshotDetails_lastUpdated' - The timestamp of when the snapshot was last updated.
+--
+-- 'sections', 'snapshotDetails_sections' - The sections in the snapshot.
+newSnapshotDetails ::
+  SnapshotDetails
+newSnapshotDetails =
+  SnapshotDetails'
+    { created = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      sections = Prelude.Nothing
+    }
+
+-- | The timestamp of when the snapshot was created.
+snapshotDetails_created :: Lens.Lens' SnapshotDetails (Prelude.Maybe Prelude.UTCTime)
+snapshotDetails_created = Lens.lens (\SnapshotDetails' {created} -> created) (\s@SnapshotDetails' {} a -> s {created = a} :: SnapshotDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the snapshot.
+snapshotDetails_description :: Lens.Lens' SnapshotDetails (Prelude.Maybe Prelude.Text)
+snapshotDetails_description = Lens.lens (\SnapshotDetails' {description} -> description) (\s@SnapshotDetails' {} a -> s {description = a} :: SnapshotDetails)
+
+-- | The identifier of the snapshot.
+snapshotDetails_id :: Lens.Lens' SnapshotDetails (Prelude.Maybe Prelude.Text)
+snapshotDetails_id = Lens.lens (\SnapshotDetails' {id} -> id) (\s@SnapshotDetails' {} a -> s {id = a} :: SnapshotDetails)
+
+-- | The timestamp of when the snapshot was last updated.
+snapshotDetails_lastUpdated :: Lens.Lens' SnapshotDetails (Prelude.Maybe Prelude.UTCTime)
+snapshotDetails_lastUpdated = Lens.lens (\SnapshotDetails' {lastUpdated} -> lastUpdated) (\s@SnapshotDetails' {} a -> s {lastUpdated = a} :: SnapshotDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The sections in the snapshot.
+snapshotDetails_sections :: Lens.Lens' SnapshotDetails (Prelude.Maybe (Prelude.HashMap Prelude.Text Section))
+snapshotDetails_sections = Lens.lens (\SnapshotDetails' {sections} -> sections) (\s@SnapshotDetails' {} a -> s {sections = a} :: SnapshotDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SnapshotDetails where
+  parseJSON =
+    Data.withObject
+      "SnapshotDetails"
+      ( \x ->
+          SnapshotDetails'
+            Prelude.<$> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "Sections" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SnapshotDetails where
+  hashWithSalt _salt SnapshotDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` sections
+
+instance Prelude.NFData SnapshotDetails where
+  rnf SnapshotDetails' {..} =
+    Prelude.rnf created
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf sections
diff --git a/gen/Amazonka/GamesParks/Types/SnapshotSummary.hs b/gen/Amazonka/GamesParks/Types/SnapshotSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/SnapshotSummary.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.SnapshotSummary
+-- 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.GamesParks.Types.SnapshotSummary 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 summary of the properties of a snapshot.
+--
+-- /See:/ 'newSnapshotSummary' smart constructor.
+data SnapshotSummary = SnapshotSummary'
+  { -- | The timestamp of when the snapshot was created.
+    created :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the snapshot.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Then timestamp of when the snapshot was last updated.
+    lastUpdated :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'created', 'snapshotSummary_created' - The timestamp of when the snapshot was created.
+--
+-- 'description', 'snapshotSummary_description' - The description of the snapshot.
+--
+-- 'id', 'snapshotSummary_id' - The identifier of the snapshot.
+--
+-- 'lastUpdated', 'snapshotSummary_lastUpdated' - Then timestamp of when the snapshot was last updated.
+newSnapshotSummary ::
+  SnapshotSummary
+newSnapshotSummary =
+  SnapshotSummary'
+    { created = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing
+    }
+
+-- | The timestamp of when the snapshot was created.
+snapshotSummary_created :: Lens.Lens' SnapshotSummary (Prelude.Maybe Prelude.UTCTime)
+snapshotSummary_created = Lens.lens (\SnapshotSummary' {created} -> created) (\s@SnapshotSummary' {} a -> s {created = a} :: SnapshotSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the snapshot.
+snapshotSummary_description :: Lens.Lens' SnapshotSummary (Prelude.Maybe Prelude.Text)
+snapshotSummary_description = Lens.lens (\SnapshotSummary' {description} -> description) (\s@SnapshotSummary' {} a -> s {description = a} :: SnapshotSummary)
+
+-- | The identifier of the snapshot.
+snapshotSummary_id :: Lens.Lens' SnapshotSummary (Prelude.Maybe Prelude.Text)
+snapshotSummary_id = Lens.lens (\SnapshotSummary' {id} -> id) (\s@SnapshotSummary' {} a -> s {id = a} :: SnapshotSummary)
+
+-- | Then timestamp of when the snapshot was last updated.
+snapshotSummary_lastUpdated :: Lens.Lens' SnapshotSummary (Prelude.Maybe Prelude.UTCTime)
+snapshotSummary_lastUpdated = Lens.lens (\SnapshotSummary' {lastUpdated} -> lastUpdated) (\s@SnapshotSummary' {} a -> s {lastUpdated = a} :: SnapshotSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON SnapshotSummary where
+  parseJSON =
+    Data.withObject
+      "SnapshotSummary"
+      ( \x ->
+          SnapshotSummary'
+            Prelude.<$> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LastUpdated")
+      )
+
+instance Prelude.Hashable SnapshotSummary where
+  hashWithSalt _salt SnapshotSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUpdated
+
+instance Prelude.NFData SnapshotSummary where
+  rnf SnapshotSummary' {..} =
+    Prelude.rnf created
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUpdated
diff --git a/gen/Amazonka/GamesParks/Types/StageDeploymentDetails.hs b/gen/Amazonka/GamesParks/Types/StageDeploymentDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/StageDeploymentDetails.hs
@@ -0,0 +1,147 @@
+{-# 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.GamesParks.Types.StageDeploymentDetails
+-- 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.GamesParks.Types.StageDeploymentDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.DeploymentAction
+import Amazonka.GamesParks.Types.DeploymentResult
+import Amazonka.GamesParks.Types.DeploymentState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties that provide details of a stage deployment.
+--
+-- /See:/ 'newStageDeploymentDetails' smart constructor.
+data StageDeploymentDetails = StageDeploymentDetails'
+  { -- | The timestamp of when the stage deployment was created.
+    created :: Prelude.Maybe Data.ISO8601,
+    -- | The type of action of the stage deployment.
+    deploymentAction :: Prelude.Maybe DeploymentAction,
+    -- | The identifier of the deployment.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The result of the deployment.
+    deploymentResult :: Prelude.Maybe DeploymentResult,
+    -- | The state of the deployment.
+    deploymentState :: Prelude.Maybe DeploymentState,
+    -- | The timestamp of when the deployment was last updated.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier of the snapshot associated with the stage deployment.
+    snapshotId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StageDeploymentDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'created', 'stageDeploymentDetails_created' - The timestamp of when the stage deployment was created.
+--
+-- 'deploymentAction', 'stageDeploymentDetails_deploymentAction' - The type of action of the stage deployment.
+--
+-- 'deploymentId', 'stageDeploymentDetails_deploymentId' - The identifier of the deployment.
+--
+-- 'deploymentResult', 'stageDeploymentDetails_deploymentResult' - The result of the deployment.
+--
+-- 'deploymentState', 'stageDeploymentDetails_deploymentState' - The state of the deployment.
+--
+-- 'lastUpdated', 'stageDeploymentDetails_lastUpdated' - The timestamp of when the deployment was last updated.
+--
+-- 'snapshotId', 'stageDeploymentDetails_snapshotId' - The identifier of the snapshot associated with the stage deployment.
+newStageDeploymentDetails ::
+  StageDeploymentDetails
+newStageDeploymentDetails =
+  StageDeploymentDetails'
+    { created = Prelude.Nothing,
+      deploymentAction = Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      deploymentResult = Prelude.Nothing,
+      deploymentState = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      snapshotId = Prelude.Nothing
+    }
+
+-- | The timestamp of when the stage deployment was created.
+stageDeploymentDetails_created :: Lens.Lens' StageDeploymentDetails (Prelude.Maybe Prelude.UTCTime)
+stageDeploymentDetails_created = Lens.lens (\StageDeploymentDetails' {created} -> created) (\s@StageDeploymentDetails' {} a -> s {created = a} :: StageDeploymentDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The type of action of the stage deployment.
+stageDeploymentDetails_deploymentAction :: Lens.Lens' StageDeploymentDetails (Prelude.Maybe DeploymentAction)
+stageDeploymentDetails_deploymentAction = Lens.lens (\StageDeploymentDetails' {deploymentAction} -> deploymentAction) (\s@StageDeploymentDetails' {} a -> s {deploymentAction = a} :: StageDeploymentDetails)
+
+-- | The identifier of the deployment.
+stageDeploymentDetails_deploymentId :: Lens.Lens' StageDeploymentDetails (Prelude.Maybe Prelude.Text)
+stageDeploymentDetails_deploymentId = Lens.lens (\StageDeploymentDetails' {deploymentId} -> deploymentId) (\s@StageDeploymentDetails' {} a -> s {deploymentId = a} :: StageDeploymentDetails)
+
+-- | The result of the deployment.
+stageDeploymentDetails_deploymentResult :: Lens.Lens' StageDeploymentDetails (Prelude.Maybe DeploymentResult)
+stageDeploymentDetails_deploymentResult = Lens.lens (\StageDeploymentDetails' {deploymentResult} -> deploymentResult) (\s@StageDeploymentDetails' {} a -> s {deploymentResult = a} :: StageDeploymentDetails)
+
+-- | The state of the deployment.
+stageDeploymentDetails_deploymentState :: Lens.Lens' StageDeploymentDetails (Prelude.Maybe DeploymentState)
+stageDeploymentDetails_deploymentState = Lens.lens (\StageDeploymentDetails' {deploymentState} -> deploymentState) (\s@StageDeploymentDetails' {} a -> s {deploymentState = a} :: StageDeploymentDetails)
+
+-- | The timestamp of when the deployment was last updated.
+stageDeploymentDetails_lastUpdated :: Lens.Lens' StageDeploymentDetails (Prelude.Maybe Prelude.UTCTime)
+stageDeploymentDetails_lastUpdated = Lens.lens (\StageDeploymentDetails' {lastUpdated} -> lastUpdated) (\s@StageDeploymentDetails' {} a -> s {lastUpdated = a} :: StageDeploymentDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the snapshot associated with the stage deployment.
+stageDeploymentDetails_snapshotId :: Lens.Lens' StageDeploymentDetails (Prelude.Maybe Prelude.Text)
+stageDeploymentDetails_snapshotId = Lens.lens (\StageDeploymentDetails' {snapshotId} -> snapshotId) (\s@StageDeploymentDetails' {} a -> s {snapshotId = a} :: StageDeploymentDetails)
+
+instance Data.FromJSON StageDeploymentDetails where
+  parseJSON =
+    Data.withObject
+      "StageDeploymentDetails"
+      ( \x ->
+          StageDeploymentDetails'
+            Prelude.<$> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "DeploymentAction")
+            Prelude.<*> (x Data..:? "DeploymentId")
+            Prelude.<*> (x Data..:? "DeploymentResult")
+            Prelude.<*> (x Data..:? "DeploymentState")
+            Prelude.<*> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "SnapshotId")
+      )
+
+instance Prelude.Hashable StageDeploymentDetails where
+  hashWithSalt _salt StageDeploymentDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` deploymentAction
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` deploymentResult
+      `Prelude.hashWithSalt` deploymentState
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData StageDeploymentDetails where
+  rnf StageDeploymentDetails' {..} =
+    Prelude.rnf created
+      `Prelude.seq` Prelude.rnf deploymentAction
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf deploymentResult
+      `Prelude.seq` Prelude.rnf deploymentState
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf snapshotId
diff --git a/gen/Amazonka/GamesParks/Types/StageDeploymentSummary.hs b/gen/Amazonka/GamesParks/Types/StageDeploymentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/StageDeploymentSummary.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.StageDeploymentSummary
+-- 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.GamesParks.Types.StageDeploymentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.DeploymentAction
+import Amazonka.GamesParks.Types.DeploymentResult
+import Amazonka.GamesParks.Types.DeploymentState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the properties of a stage deployment.
+--
+-- /See:/ 'newStageDeploymentSummary' smart constructor.
+data StageDeploymentSummary = StageDeploymentSummary'
+  { -- | The type of action of the deployment.
+    deploymentAction :: Prelude.Maybe DeploymentAction,
+    -- | The identifier of the deployment.
+    deploymentId :: Prelude.Maybe Prelude.Text,
+    -- | The result of the deployment.
+    deploymentResult :: Prelude.Maybe DeploymentResult,
+    -- | The state of the deployment.
+    deploymentState :: Prelude.Maybe DeploymentState,
+    -- | The timestamp of when the deployment was last updated.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | The identifier of the snapshot associated with the stage deployment.
+    snapshotId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StageDeploymentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deploymentAction', 'stageDeploymentSummary_deploymentAction' - The type of action of the deployment.
+--
+-- 'deploymentId', 'stageDeploymentSummary_deploymentId' - The identifier of the deployment.
+--
+-- 'deploymentResult', 'stageDeploymentSummary_deploymentResult' - The result of the deployment.
+--
+-- 'deploymentState', 'stageDeploymentSummary_deploymentState' - The state of the deployment.
+--
+-- 'lastUpdated', 'stageDeploymentSummary_lastUpdated' - The timestamp of when the deployment was last updated.
+--
+-- 'snapshotId', 'stageDeploymentSummary_snapshotId' - The identifier of the snapshot associated with the stage deployment.
+newStageDeploymentSummary ::
+  StageDeploymentSummary
+newStageDeploymentSummary =
+  StageDeploymentSummary'
+    { deploymentAction =
+        Prelude.Nothing,
+      deploymentId = Prelude.Nothing,
+      deploymentResult = Prelude.Nothing,
+      deploymentState = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      snapshotId = Prelude.Nothing
+    }
+
+-- | The type of action of the deployment.
+stageDeploymentSummary_deploymentAction :: Lens.Lens' StageDeploymentSummary (Prelude.Maybe DeploymentAction)
+stageDeploymentSummary_deploymentAction = Lens.lens (\StageDeploymentSummary' {deploymentAction} -> deploymentAction) (\s@StageDeploymentSummary' {} a -> s {deploymentAction = a} :: StageDeploymentSummary)
+
+-- | The identifier of the deployment.
+stageDeploymentSummary_deploymentId :: Lens.Lens' StageDeploymentSummary (Prelude.Maybe Prelude.Text)
+stageDeploymentSummary_deploymentId = Lens.lens (\StageDeploymentSummary' {deploymentId} -> deploymentId) (\s@StageDeploymentSummary' {} a -> s {deploymentId = a} :: StageDeploymentSummary)
+
+-- | The result of the deployment.
+stageDeploymentSummary_deploymentResult :: Lens.Lens' StageDeploymentSummary (Prelude.Maybe DeploymentResult)
+stageDeploymentSummary_deploymentResult = Lens.lens (\StageDeploymentSummary' {deploymentResult} -> deploymentResult) (\s@StageDeploymentSummary' {} a -> s {deploymentResult = a} :: StageDeploymentSummary)
+
+-- | The state of the deployment.
+stageDeploymentSummary_deploymentState :: Lens.Lens' StageDeploymentSummary (Prelude.Maybe DeploymentState)
+stageDeploymentSummary_deploymentState = Lens.lens (\StageDeploymentSummary' {deploymentState} -> deploymentState) (\s@StageDeploymentSummary' {} a -> s {deploymentState = a} :: StageDeploymentSummary)
+
+-- | The timestamp of when the deployment was last updated.
+stageDeploymentSummary_lastUpdated :: Lens.Lens' StageDeploymentSummary (Prelude.Maybe Prelude.UTCTime)
+stageDeploymentSummary_lastUpdated = Lens.lens (\StageDeploymentSummary' {lastUpdated} -> lastUpdated) (\s@StageDeploymentSummary' {} a -> s {lastUpdated = a} :: StageDeploymentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the snapshot associated with the stage deployment.
+stageDeploymentSummary_snapshotId :: Lens.Lens' StageDeploymentSummary (Prelude.Maybe Prelude.Text)
+stageDeploymentSummary_snapshotId = Lens.lens (\StageDeploymentSummary' {snapshotId} -> snapshotId) (\s@StageDeploymentSummary' {} a -> s {snapshotId = a} :: StageDeploymentSummary)
+
+instance Data.FromJSON StageDeploymentSummary where
+  parseJSON =
+    Data.withObject
+      "StageDeploymentSummary"
+      ( \x ->
+          StageDeploymentSummary'
+            Prelude.<$> (x Data..:? "DeploymentAction")
+            Prelude.<*> (x Data..:? "DeploymentId")
+            Prelude.<*> (x Data..:? "DeploymentResult")
+            Prelude.<*> (x Data..:? "DeploymentState")
+            Prelude.<*> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "SnapshotId")
+      )
+
+instance Prelude.Hashable StageDeploymentSummary where
+  hashWithSalt _salt StageDeploymentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` deploymentAction
+      `Prelude.hashWithSalt` deploymentId
+      `Prelude.hashWithSalt` deploymentResult
+      `Prelude.hashWithSalt` deploymentState
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData StageDeploymentSummary where
+  rnf StageDeploymentSummary' {..} =
+    Prelude.rnf deploymentAction
+      `Prelude.seq` Prelude.rnf deploymentId
+      `Prelude.seq` Prelude.rnf deploymentResult
+      `Prelude.seq` Prelude.rnf deploymentState
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf snapshotId
diff --git a/gen/Amazonka/GamesParks/Types/StageDetails.hs b/gen/Amazonka/GamesParks/Types/StageDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/StageDetails.hs
@@ -0,0 +1,193 @@
+{-# 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.GamesParks.Types.StageDetails
+-- 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.GamesParks.Types.StageDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.StageState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties that provide details of a stage.
+--
+-- /See:/ 'newStageDetails' smart constructor.
+data StageDetails = StageDetails'
+  { -- | The Amazon Resource Name (ARN) of the stage.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the stage was created.
+    created :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The game key associated with the stage.
+    --
+    -- The game key is a unique identifier that the game client uses to connect
+    -- to the GameSparks backend.
+    gameKey :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the stage was last updated.
+    lastUpdated :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon CloudWatch log group for game runtimes deployed to the stage.
+    logGroup :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stage.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role used to run the game runtimes
+    -- deployed to the stage.
+    role' :: Prelude.Maybe Prelude.Text,
+    -- | The state of the stage.
+    state :: Prelude.Maybe StageState,
+    -- | The tags associated with the stage.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StageDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'stageDetails_arn' - The Amazon Resource Name (ARN) of the stage.
+--
+-- 'created', 'stageDetails_created' - The timestamp of when the stage was created.
+--
+-- 'description', 'stageDetails_description' - The description of the stage.
+--
+-- 'gameKey', 'stageDetails_gameKey' - The game key associated with the stage.
+--
+-- The game key is a unique identifier that the game client uses to connect
+-- to the GameSparks backend.
+--
+-- 'lastUpdated', 'stageDetails_lastUpdated' - The timestamp of when the stage was last updated.
+--
+-- 'logGroup', 'stageDetails_logGroup' - The Amazon CloudWatch log group for game runtimes deployed to the stage.
+--
+-- 'name', 'stageDetails_name' - The name of the stage.
+--
+-- 'role'', 'stageDetails_role' - The Amazon Resource Name (ARN) of the role used to run the game runtimes
+-- deployed to the stage.
+--
+-- 'state', 'stageDetails_state' - The state of the stage.
+--
+-- 'tags', 'stageDetails_tags' - The tags associated with the stage.
+newStageDetails ::
+  StageDetails
+newStageDetails =
+  StageDetails'
+    { arn = Prelude.Nothing,
+      created = Prelude.Nothing,
+      description = Prelude.Nothing,
+      gameKey = Prelude.Nothing,
+      lastUpdated = Prelude.Nothing,
+      logGroup = Prelude.Nothing,
+      name = Prelude.Nothing,
+      role' = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the stage.
+stageDetails_arn :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.Text)
+stageDetails_arn = Lens.lens (\StageDetails' {arn} -> arn) (\s@StageDetails' {} a -> s {arn = a} :: StageDetails)
+
+-- | The timestamp of when the stage was created.
+stageDetails_created :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.UTCTime)
+stageDetails_created = Lens.lens (\StageDetails' {created} -> created) (\s@StageDetails' {} a -> s {created = a} :: StageDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the stage.
+stageDetails_description :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.Text)
+stageDetails_description = Lens.lens (\StageDetails' {description} -> description) (\s@StageDetails' {} a -> s {description = a} :: StageDetails)
+
+-- | The game key associated with the stage.
+--
+-- The game key is a unique identifier that the game client uses to connect
+-- to the GameSparks backend.
+stageDetails_gameKey :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.Text)
+stageDetails_gameKey = Lens.lens (\StageDetails' {gameKey} -> gameKey) (\s@StageDetails' {} a -> s {gameKey = a} :: StageDetails)
+
+-- | The timestamp of when the stage was last updated.
+stageDetails_lastUpdated :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.UTCTime)
+stageDetails_lastUpdated = Lens.lens (\StageDetails' {lastUpdated} -> lastUpdated) (\s@StageDetails' {} a -> s {lastUpdated = a} :: StageDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon CloudWatch log group for game runtimes deployed to the stage.
+stageDetails_logGroup :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.Text)
+stageDetails_logGroup = Lens.lens (\StageDetails' {logGroup} -> logGroup) (\s@StageDetails' {} a -> s {logGroup = a} :: StageDetails)
+
+-- | The name of the stage.
+stageDetails_name :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.Text)
+stageDetails_name = Lens.lens (\StageDetails' {name} -> name) (\s@StageDetails' {} a -> s {name = a} :: StageDetails)
+
+-- | The Amazon Resource Name (ARN) of the role used to run the game runtimes
+-- deployed to the stage.
+stageDetails_role :: Lens.Lens' StageDetails (Prelude.Maybe Prelude.Text)
+stageDetails_role = Lens.lens (\StageDetails' {role'} -> role') (\s@StageDetails' {} a -> s {role' = a} :: StageDetails)
+
+-- | The state of the stage.
+stageDetails_state :: Lens.Lens' StageDetails (Prelude.Maybe StageState)
+stageDetails_state = Lens.lens (\StageDetails' {state} -> state) (\s@StageDetails' {} a -> s {state = a} :: StageDetails)
+
+-- | The tags associated with the stage.
+stageDetails_tags :: Lens.Lens' StageDetails (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+stageDetails_tags = Lens.lens (\StageDetails' {tags} -> tags) (\s@StageDetails' {} a -> s {tags = a} :: StageDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON StageDetails where
+  parseJSON =
+    Data.withObject
+      "StageDetails"
+      ( \x ->
+          StageDetails'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "GameKey")
+            Prelude.<*> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "LogGroup")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Role")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable StageDetails where
+  hashWithSalt _salt StageDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gameKey
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` logGroup
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` role'
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData StageDetails where
+  rnf StageDetails' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf created
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gameKey
+      `Prelude.seq` Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf logGroup
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf role'
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/GamesParks/Types/StageState.hs b/gen/Amazonka/GamesParks/Types/StageState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/StageState.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.GamesParks.Types.StageState
+-- 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.GamesParks.Types.StageState
+  ( StageState
+      ( ..,
+        StageState_ACTIVE,
+        StageState_DELETING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StageState = StageState'
+  { fromStageState ::
+      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 StageState_ACTIVE :: StageState
+pattern StageState_ACTIVE = StageState' "ACTIVE"
+
+pattern StageState_DELETING :: StageState
+pattern StageState_DELETING = StageState' "DELETING"
+
+{-# COMPLETE
+  StageState_ACTIVE,
+  StageState_DELETING,
+  StageState'
+  #-}
diff --git a/gen/Amazonka/GamesParks/Types/StageSummary.hs b/gen/Amazonka/GamesParks/Types/StageSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/Types/StageSummary.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.GamesParks.Types.StageSummary
+-- 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.GamesParks.Types.StageSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types.StageState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the properties of a stage.
+--
+-- /See:/ 'newStageSummary' smart constructor.
+data StageSummary = StageSummary'
+  { -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The game key associated with the stage.
+    --
+    -- The game key is a unique identifier that the game client uses to connect
+    -- to the GameSparks backend.
+    gameKey :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stage.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The state of the stage.
+    state :: Prelude.Maybe StageState,
+    -- | The tags associated with the stage.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StageSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'stageSummary_description' - The description of the stage.
+--
+-- 'gameKey', 'stageSummary_gameKey' - The game key associated with the stage.
+--
+-- The game key is a unique identifier that the game client uses to connect
+-- to the GameSparks backend.
+--
+-- 'name', 'stageSummary_name' - The name of the stage.
+--
+-- 'state', 'stageSummary_state' - The state of the stage.
+--
+-- 'tags', 'stageSummary_tags' - The tags associated with the stage.
+newStageSummary ::
+  StageSummary
+newStageSummary =
+  StageSummary'
+    { description = Prelude.Nothing,
+      gameKey = Prelude.Nothing,
+      name = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The description of the stage.
+stageSummary_description :: Lens.Lens' StageSummary (Prelude.Maybe Prelude.Text)
+stageSummary_description = Lens.lens (\StageSummary' {description} -> description) (\s@StageSummary' {} a -> s {description = a} :: StageSummary)
+
+-- | The game key associated with the stage.
+--
+-- The game key is a unique identifier that the game client uses to connect
+-- to the GameSparks backend.
+stageSummary_gameKey :: Lens.Lens' StageSummary (Prelude.Maybe Prelude.Text)
+stageSummary_gameKey = Lens.lens (\StageSummary' {gameKey} -> gameKey) (\s@StageSummary' {} a -> s {gameKey = a} :: StageSummary)
+
+-- | The name of the stage.
+stageSummary_name :: Lens.Lens' StageSummary (Prelude.Maybe Prelude.Text)
+stageSummary_name = Lens.lens (\StageSummary' {name} -> name) (\s@StageSummary' {} a -> s {name = a} :: StageSummary)
+
+-- | The state of the stage.
+stageSummary_state :: Lens.Lens' StageSummary (Prelude.Maybe StageState)
+stageSummary_state = Lens.lens (\StageSummary' {state} -> state) (\s@StageSummary' {} a -> s {state = a} :: StageSummary)
+
+-- | The tags associated with the stage.
+stageSummary_tags :: Lens.Lens' StageSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+stageSummary_tags = Lens.lens (\StageSummary' {tags} -> tags) (\s@StageSummary' {} a -> s {tags = a} :: StageSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON StageSummary where
+  parseJSON =
+    Data.withObject
+      "StageSummary"
+      ( \x ->
+          StageSummary'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "GameKey")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable StageSummary where
+  hashWithSalt _salt StageSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gameKey
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData StageSummary where
+  rnf StageSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gameKey
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/GamesParks/UntagResource.hs b/gen/Amazonka/GamesParks/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/UntagResource.hs
@@ -0,0 +1,163 @@
+{-# 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.GamesParks.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes tags from a GameSparks resource.
+module Amazonka.GamesParks.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to remove the tags from.
+    resourceArn :: Prelude.Text,
+    -- | The keys of the tags to remove.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource to remove the tags from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The keys of the tags to remove.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource to remove the tags from.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The keys of the tags to remove.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty 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.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  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.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/UpdateGame.hs b/gen/Amazonka/GamesParks/UpdateGame.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/UpdateGame.hs
@@ -0,0 +1,178 @@
+{-# 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.GamesParks.UpdateGame
+-- 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 details of the game.
+module Amazonka.GamesParks.UpdateGame
+  ( -- * Creating a Request
+    UpdateGame (..),
+    newUpdateGame,
+
+    -- * Request Lenses
+    updateGame_description,
+    updateGame_gameName,
+
+    -- * Destructuring the Response
+    UpdateGameResponse (..),
+    newUpdateGameResponse,
+
+    -- * Response Lenses
+    updateGameResponse_game,
+    updateGameResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateGame' smart constructor.
+data UpdateGame = UpdateGame'
+  { -- | The description of the game.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGame' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateGame_description' - The description of the game.
+--
+-- 'gameName', 'updateGame_gameName' - The name of the game.
+newUpdateGame ::
+  -- | 'gameName'
+  Prelude.Text ->
+  UpdateGame
+newUpdateGame pGameName_ =
+  UpdateGame'
+    { description = Prelude.Nothing,
+      gameName = pGameName_
+    }
+
+-- | The description of the game.
+updateGame_description :: Lens.Lens' UpdateGame (Prelude.Maybe Prelude.Text)
+updateGame_description = Lens.lens (\UpdateGame' {description} -> description) (\s@UpdateGame' {} a -> s {description = a} :: UpdateGame)
+
+-- | The name of the game.
+updateGame_gameName :: Lens.Lens' UpdateGame Prelude.Text
+updateGame_gameName = Lens.lens (\UpdateGame' {gameName} -> gameName) (\s@UpdateGame' {} a -> s {gameName = a} :: UpdateGame)
+
+instance Core.AWSRequest UpdateGame where
+  type AWSResponse UpdateGame = UpdateGameResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateGameResponse'
+            Prelude.<$> (x Data..?> "Game")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateGame where
+  hashWithSalt _salt UpdateGame' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gameName
+
+instance Prelude.NFData UpdateGame where
+  rnf UpdateGame' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gameName
+
+instance Data.ToHeaders UpdateGame where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateGame where
+  toJSON UpdateGame' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Description" Data..=) Prelude.<$> description]
+      )
+
+instance Data.ToPath UpdateGame where
+  toPath UpdateGame' {..} =
+    Prelude.mconcat ["/game/", Data.toBS gameName]
+
+instance Data.ToQuery UpdateGame where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateGameResponse' smart constructor.
+data UpdateGameResponse = UpdateGameResponse'
+  { -- | The details of the game.
+    game :: Prelude.Maybe GameDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGameResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'game', 'updateGameResponse_game' - The details of the game.
+--
+-- 'httpStatus', 'updateGameResponse_httpStatus' - The response's http status code.
+newUpdateGameResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateGameResponse
+newUpdateGameResponse pHttpStatus_ =
+  UpdateGameResponse'
+    { game = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the game.
+updateGameResponse_game :: Lens.Lens' UpdateGameResponse (Prelude.Maybe GameDetails)
+updateGameResponse_game = Lens.lens (\UpdateGameResponse' {game} -> game) (\s@UpdateGameResponse' {} a -> s {game = a} :: UpdateGameResponse)
+
+-- | The response's http status code.
+updateGameResponse_httpStatus :: Lens.Lens' UpdateGameResponse Prelude.Int
+updateGameResponse_httpStatus = Lens.lens (\UpdateGameResponse' {httpStatus} -> httpStatus) (\s@UpdateGameResponse' {} a -> s {httpStatus = a} :: UpdateGameResponse)
+
+instance Prelude.NFData UpdateGameResponse where
+  rnf UpdateGameResponse' {..} =
+    Prelude.rnf game
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/UpdateGameConfiguration.hs b/gen/Amazonka/GamesParks/UpdateGameConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/UpdateGameConfiguration.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.GamesParks.UpdateGameConfiguration
+-- 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 one or more sections of the game configuration.
+module Amazonka.GamesParks.UpdateGameConfiguration
+  ( -- * Creating a Request
+    UpdateGameConfiguration (..),
+    newUpdateGameConfiguration,
+
+    -- * Request Lenses
+    updateGameConfiguration_gameName,
+    updateGameConfiguration_modifications,
+
+    -- * Destructuring the Response
+    UpdateGameConfigurationResponse (..),
+    newUpdateGameConfigurationResponse,
+
+    -- * Response Lenses
+    updateGameConfigurationResponse_gameConfiguration,
+    updateGameConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateGameConfiguration' smart constructor.
+data UpdateGameConfiguration = UpdateGameConfiguration'
+  { -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The list of modifications to make.
+    modifications :: Prelude.NonEmpty SectionModification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGameConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameName', 'updateGameConfiguration_gameName' - The name of the game.
+--
+-- 'modifications', 'updateGameConfiguration_modifications' - The list of modifications to make.
+newUpdateGameConfiguration ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'modifications'
+  Prelude.NonEmpty SectionModification ->
+  UpdateGameConfiguration
+newUpdateGameConfiguration pGameName_ pModifications_ =
+  UpdateGameConfiguration'
+    { gameName = pGameName_,
+      modifications =
+        Lens.coerced Lens.# pModifications_
+    }
+
+-- | The name of the game.
+updateGameConfiguration_gameName :: Lens.Lens' UpdateGameConfiguration Prelude.Text
+updateGameConfiguration_gameName = Lens.lens (\UpdateGameConfiguration' {gameName} -> gameName) (\s@UpdateGameConfiguration' {} a -> s {gameName = a} :: UpdateGameConfiguration)
+
+-- | The list of modifications to make.
+updateGameConfiguration_modifications :: Lens.Lens' UpdateGameConfiguration (Prelude.NonEmpty SectionModification)
+updateGameConfiguration_modifications = Lens.lens (\UpdateGameConfiguration' {modifications} -> modifications) (\s@UpdateGameConfiguration' {} a -> s {modifications = a} :: UpdateGameConfiguration) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateGameConfiguration where
+  type
+    AWSResponse UpdateGameConfiguration =
+      UpdateGameConfigurationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateGameConfigurationResponse'
+            Prelude.<$> (x Data..?> "GameConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateGameConfiguration where
+  hashWithSalt _salt UpdateGameConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` modifications
+
+instance Prelude.NFData UpdateGameConfiguration where
+  rnf UpdateGameConfiguration' {..} =
+    Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf modifications
+
+instance Data.ToHeaders UpdateGameConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateGameConfiguration where
+  toJSON UpdateGameConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("Modifications" Data..= modifications)
+          ]
+      )
+
+instance Data.ToPath UpdateGameConfiguration where
+  toPath UpdateGameConfiguration' {..} =
+    Prelude.mconcat
+      ["/game/", Data.toBS gameName, "/configuration"]
+
+instance Data.ToQuery UpdateGameConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateGameConfigurationResponse' smart constructor.
+data UpdateGameConfigurationResponse = UpdateGameConfigurationResponse'
+  { -- | Details about the game configuration.
+    gameConfiguration :: Prelude.Maybe GameConfigurationDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGameConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gameConfiguration', 'updateGameConfigurationResponse_gameConfiguration' - Details about the game configuration.
+--
+-- 'httpStatus', 'updateGameConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateGameConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateGameConfigurationResponse
+newUpdateGameConfigurationResponse pHttpStatus_ =
+  UpdateGameConfigurationResponse'
+    { gameConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the game configuration.
+updateGameConfigurationResponse_gameConfiguration :: Lens.Lens' UpdateGameConfigurationResponse (Prelude.Maybe GameConfigurationDetails)
+updateGameConfigurationResponse_gameConfiguration = Lens.lens (\UpdateGameConfigurationResponse' {gameConfiguration} -> gameConfiguration) (\s@UpdateGameConfigurationResponse' {} a -> s {gameConfiguration = a} :: UpdateGameConfigurationResponse)
+
+-- | The response's http status code.
+updateGameConfigurationResponse_httpStatus :: Lens.Lens' UpdateGameConfigurationResponse Prelude.Int
+updateGameConfigurationResponse_httpStatus = Lens.lens (\UpdateGameConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateGameConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateGameConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateGameConfigurationResponse
+  where
+  rnf UpdateGameConfigurationResponse' {..} =
+    Prelude.rnf gameConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/UpdateSnapshot.hs b/gen/Amazonka/GamesParks/UpdateSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/UpdateSnapshot.hs
@@ -0,0 +1,199 @@
+{-# 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.GamesParks.UpdateSnapshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the metadata of a GameSparks snapshot.
+module Amazonka.GamesParks.UpdateSnapshot
+  ( -- * Creating a Request
+    UpdateSnapshot (..),
+    newUpdateSnapshot,
+
+    -- * Request Lenses
+    updateSnapshot_description,
+    updateSnapshot_gameName,
+    updateSnapshot_snapshotId,
+
+    -- * Destructuring the Response
+    UpdateSnapshotResponse (..),
+    newUpdateSnapshotResponse,
+
+    -- * Response Lenses
+    updateSnapshotResponse_snapshot,
+    updateSnapshotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSnapshot' smart constructor.
+data UpdateSnapshot = UpdateSnapshot'
+  { -- | The description of the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The identifier of the snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateSnapshot_description' - The description of the snapshot.
+--
+-- 'gameName', 'updateSnapshot_gameName' - The name of the game.
+--
+-- 'snapshotId', 'updateSnapshot_snapshotId' - The identifier of the snapshot.
+newUpdateSnapshot ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  UpdateSnapshot
+newUpdateSnapshot pGameName_ pSnapshotId_ =
+  UpdateSnapshot'
+    { description = Prelude.Nothing,
+      gameName = pGameName_,
+      snapshotId = pSnapshotId_
+    }
+
+-- | The description of the snapshot.
+updateSnapshot_description :: Lens.Lens' UpdateSnapshot (Prelude.Maybe Prelude.Text)
+updateSnapshot_description = Lens.lens (\UpdateSnapshot' {description} -> description) (\s@UpdateSnapshot' {} a -> s {description = a} :: UpdateSnapshot)
+
+-- | The name of the game.
+updateSnapshot_gameName :: Lens.Lens' UpdateSnapshot Prelude.Text
+updateSnapshot_gameName = Lens.lens (\UpdateSnapshot' {gameName} -> gameName) (\s@UpdateSnapshot' {} a -> s {gameName = a} :: UpdateSnapshot)
+
+-- | The identifier of the snapshot.
+updateSnapshot_snapshotId :: Lens.Lens' UpdateSnapshot Prelude.Text
+updateSnapshot_snapshotId = Lens.lens (\UpdateSnapshot' {snapshotId} -> snapshotId) (\s@UpdateSnapshot' {} a -> s {snapshotId = a} :: UpdateSnapshot)
+
+instance Core.AWSRequest UpdateSnapshot where
+  type
+    AWSResponse UpdateSnapshot =
+      UpdateSnapshotResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSnapshotResponse'
+            Prelude.<$> (x Data..?> "Snapshot")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSnapshot where
+  hashWithSalt _salt UpdateSnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData UpdateSnapshot where
+  rnf UpdateSnapshot' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders UpdateSnapshot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSnapshot where
+  toJSON UpdateSnapshot' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Description" Data..=) Prelude.<$> description]
+      )
+
+instance Data.ToPath UpdateSnapshot where
+  toPath UpdateSnapshot' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/snapshot/",
+        Data.toBS snapshotId
+      ]
+
+instance Data.ToQuery UpdateSnapshot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSnapshotResponse' smart constructor.
+data UpdateSnapshotResponse = UpdateSnapshotResponse'
+  { -- | Properties that provide details of the updated snapshot.
+    snapshot :: Prelude.Maybe SnapshotDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSnapshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snapshot', 'updateSnapshotResponse_snapshot' - Properties that provide details of the updated snapshot.
+--
+-- 'httpStatus', 'updateSnapshotResponse_httpStatus' - The response's http status code.
+newUpdateSnapshotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSnapshotResponse
+newUpdateSnapshotResponse pHttpStatus_ =
+  UpdateSnapshotResponse'
+    { snapshot = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that provide details of the updated snapshot.
+updateSnapshotResponse_snapshot :: Lens.Lens' UpdateSnapshotResponse (Prelude.Maybe SnapshotDetails)
+updateSnapshotResponse_snapshot = Lens.lens (\UpdateSnapshotResponse' {snapshot} -> snapshot) (\s@UpdateSnapshotResponse' {} a -> s {snapshot = a} :: UpdateSnapshotResponse)
+
+-- | The response's http status code.
+updateSnapshotResponse_httpStatus :: Lens.Lens' UpdateSnapshotResponse Prelude.Int
+updateSnapshotResponse_httpStatus = Lens.lens (\UpdateSnapshotResponse' {httpStatus} -> httpStatus) (\s@UpdateSnapshotResponse' {} a -> s {httpStatus = a} :: UpdateSnapshotResponse)
+
+instance Prelude.NFData UpdateSnapshotResponse where
+  rnf UpdateSnapshotResponse' {..} =
+    Prelude.rnf snapshot
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/UpdateStage.hs b/gen/Amazonka/GamesParks/UpdateStage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/UpdateStage.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.GamesParks.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 the metadata of a stage.
+module Amazonka.GamesParks.UpdateStage
+  ( -- * Creating a Request
+    UpdateStage (..),
+    newUpdateStage,
+
+    -- * Request Lenses
+    updateStage_description,
+    updateStage_role,
+    updateStage_gameName,
+    updateStage_stageName,
+
+    -- * Destructuring the Response
+    UpdateStageResponse (..),
+    newUpdateStageResponse,
+
+    -- * Response Lenses
+    updateStageResponse_stage,
+    updateStageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateStage' smart constructor.
+data UpdateStage = UpdateStage'
+  { -- | The description of the stage.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role to use for the game snapshots
+    -- deployed to this stage.
+    role' :: Prelude.Maybe Prelude.Text,
+    -- | The name of the game.
+    gameName :: Prelude.Text,
+    -- | The name of the stage.
+    stageName :: 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:
+--
+-- 'description', 'updateStage_description' - The description of the stage.
+--
+-- 'role'', 'updateStage_role' - The Amazon Resource Name (ARN) of the role to use for the game snapshots
+-- deployed to this stage.
+--
+-- 'gameName', 'updateStage_gameName' - The name of the game.
+--
+-- 'stageName', 'updateStage_stageName' - The name of the stage.
+newUpdateStage ::
+  -- | 'gameName'
+  Prelude.Text ->
+  -- | 'stageName'
+  Prelude.Text ->
+  UpdateStage
+newUpdateStage pGameName_ pStageName_ =
+  UpdateStage'
+    { description = Prelude.Nothing,
+      role' = Prelude.Nothing,
+      gameName = pGameName_,
+      stageName = pStageName_
+    }
+
+-- | The description of the stage.
+updateStage_description :: Lens.Lens' UpdateStage (Prelude.Maybe Prelude.Text)
+updateStage_description = Lens.lens (\UpdateStage' {description} -> description) (\s@UpdateStage' {} a -> s {description = a} :: UpdateStage)
+
+-- | The Amazon Resource Name (ARN) of the role to use for the game snapshots
+-- deployed to this stage.
+updateStage_role :: Lens.Lens' UpdateStage (Prelude.Maybe Prelude.Text)
+updateStage_role = Lens.lens (\UpdateStage' {role'} -> role') (\s@UpdateStage' {} a -> s {role' = a} :: UpdateStage)
+
+-- | The name of the game.
+updateStage_gameName :: Lens.Lens' UpdateStage Prelude.Text
+updateStage_gameName = Lens.lens (\UpdateStage' {gameName} -> gameName) (\s@UpdateStage' {} a -> s {gameName = a} :: UpdateStage)
+
+-- | The name of the stage.
+updateStage_stageName :: Lens.Lens' UpdateStage Prelude.Text
+updateStage_stageName = Lens.lens (\UpdateStage' {stageName} -> stageName) (\s@UpdateStage' {} a -> s {stageName = 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..?> "Stage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateStage where
+  hashWithSalt _salt UpdateStage' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` role'
+      `Prelude.hashWithSalt` gameName
+      `Prelude.hashWithSalt` stageName
+
+instance Prelude.NFData UpdateStage where
+  rnf UpdateStage' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf role'
+      `Prelude.seq` Prelude.rnf gameName
+      `Prelude.seq` Prelude.rnf stageName
+
+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
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Role" Data..=) Prelude.<$> role'
+          ]
+      )
+
+instance Data.ToPath UpdateStage where
+  toPath UpdateStage' {..} =
+    Prelude.mconcat
+      [ "/game/",
+        Data.toBS gameName,
+        "/stage/",
+        Data.toBS stageName
+      ]
+
+instance Data.ToQuery UpdateStage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateStageResponse' smart constructor.
+data UpdateStageResponse = UpdateStageResponse'
+  { -- | Properties that provide details of the updated stage.
+    stage :: Prelude.Maybe StageDetails,
+    -- | 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:
+--
+-- 'stage', 'updateStageResponse_stage' - Properties that provide details of the updated stage.
+--
+-- 'httpStatus', 'updateStageResponse_httpStatus' - The response's http status code.
+newUpdateStageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateStageResponse
+newUpdateStageResponse pHttpStatus_ =
+  UpdateStageResponse'
+    { stage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties that provide details of the updated stage.
+updateStageResponse_stage :: Lens.Lens' UpdateStageResponse (Prelude.Maybe StageDetails)
+updateStageResponse_stage = Lens.lens (\UpdateStageResponse' {stage} -> stage) (\s@UpdateStageResponse' {} a -> s {stage = a} :: UpdateStageResponse)
+
+-- | 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 stage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/GamesParks/Waiters.hs b/gen/Amazonka/GamesParks/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/GamesParks/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.GamesParks.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.GamesParks.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.GamesParks.Lens
+import Amazonka.GamesParks.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.GamesParks
+import Test.Amazonka.GamesParks.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "GamesParks"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/GamesParks.hs b/test/Test/Amazonka/GamesParks.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/GamesParks.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.GamesParks
+-- 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.GamesParks
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/GamesParks/Internal.hs b/test/Test/Amazonka/GamesParks/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/GamesParks/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.GamesParks.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.GamesParks.Internal where
diff --git a/test/Test/Amazonka/Gen/GamesParks.hs b/test/Test/Amazonka/Gen/GamesParks.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/GamesParks.hs
@@ -0,0 +1,698 @@
+{-# 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.GamesParks
+-- 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.GamesParks where
+
+import Amazonka.GamesParks
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.GamesParks.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateGame $
+--             newCreateGame
+--
+--         , requestCreateSnapshot $
+--             newCreateSnapshot
+--
+--         , requestCreateStage $
+--             newCreateStage
+--
+--         , requestDeleteGame $
+--             newDeleteGame
+--
+--         , requestDeleteStage $
+--             newDeleteStage
+--
+--         , requestDisconnectPlayer $
+--             newDisconnectPlayer
+--
+--         , requestExportSnapshot $
+--             newExportSnapshot
+--
+--         , requestGetExtension $
+--             newGetExtension
+--
+--         , requestGetExtensionVersion $
+--             newGetExtensionVersion
+--
+--         , requestGetGame $
+--             newGetGame
+--
+--         , requestGetGameConfiguration $
+--             newGetGameConfiguration
+--
+--         , requestGetGeneratedCodeJob $
+--             newGetGeneratedCodeJob
+--
+--         , requestGetPlayerConnectionStatus $
+--             newGetPlayerConnectionStatus
+--
+--         , requestGetSnapshot $
+--             newGetSnapshot
+--
+--         , requestGetStage $
+--             newGetStage
+--
+--         , requestGetStageDeployment $
+--             newGetStageDeployment
+--
+--         , requestImportGameConfiguration $
+--             newImportGameConfiguration
+--
+--         , requestListExtensionVersions $
+--             newListExtensionVersions
+--
+--         , requestListExtensions $
+--             newListExtensions
+--
+--         , requestListGames $
+--             newListGames
+--
+--         , requestListGeneratedCodeJobs $
+--             newListGeneratedCodeJobs
+--
+--         , requestListSnapshots $
+--             newListSnapshots
+--
+--         , requestListStageDeployments $
+--             newListStageDeployments
+--
+--         , requestListStages $
+--             newListStages
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestStartGeneratedCodeJob $
+--             newStartGeneratedCodeJob
+--
+--         , requestStartStageDeployment $
+--             newStartStageDeployment
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateGame $
+--             newUpdateGame
+--
+--         , requestUpdateGameConfiguration $
+--             newUpdateGameConfiguration
+--
+--         , requestUpdateSnapshot $
+--             newUpdateSnapshot
+--
+--         , requestUpdateStage $
+--             newUpdateStage
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateGame $
+--             newCreateGameResponse
+--
+--         , responseCreateSnapshot $
+--             newCreateSnapshotResponse
+--
+--         , responseCreateStage $
+--             newCreateStageResponse
+--
+--         , responseDeleteGame $
+--             newDeleteGameResponse
+--
+--         , responseDeleteStage $
+--             newDeleteStageResponse
+--
+--         , responseDisconnectPlayer $
+--             newDisconnectPlayerResponse
+--
+--         , responseExportSnapshot $
+--             newExportSnapshotResponse
+--
+--         , responseGetExtension $
+--             newGetExtensionResponse
+--
+--         , responseGetExtensionVersion $
+--             newGetExtensionVersionResponse
+--
+--         , responseGetGame $
+--             newGetGameResponse
+--
+--         , responseGetGameConfiguration $
+--             newGetGameConfigurationResponse
+--
+--         , responseGetGeneratedCodeJob $
+--             newGetGeneratedCodeJobResponse
+--
+--         , responseGetPlayerConnectionStatus $
+--             newGetPlayerConnectionStatusResponse
+--
+--         , responseGetSnapshot $
+--             newGetSnapshotResponse
+--
+--         , responseGetStage $
+--             newGetStageResponse
+--
+--         , responseGetStageDeployment $
+--             newGetStageDeploymentResponse
+--
+--         , responseImportGameConfiguration $
+--             newImportGameConfigurationResponse
+--
+--         , responseListExtensionVersions $
+--             newListExtensionVersionsResponse
+--
+--         , responseListExtensions $
+--             newListExtensionsResponse
+--
+--         , responseListGames $
+--             newListGamesResponse
+--
+--         , responseListGeneratedCodeJobs $
+--             newListGeneratedCodeJobsResponse
+--
+--         , responseListSnapshots $
+--             newListSnapshotsResponse
+--
+--         , responseListStageDeployments $
+--             newListStageDeploymentsResponse
+--
+--         , responseListStages $
+--             newListStagesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseStartGeneratedCodeJob $
+--             newStartGeneratedCodeJobResponse
+--
+--         , responseStartStageDeployment $
+--             newStartStageDeploymentResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateGame $
+--             newUpdateGameResponse
+--
+--         , responseUpdateGameConfiguration $
+--             newUpdateGameConfigurationResponse
+--
+--         , responseUpdateSnapshot $
+--             newUpdateSnapshotResponse
+--
+--         , responseUpdateStage $
+--             newUpdateStageResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateGame :: CreateGame -> TestTree
+requestCreateGame =
+  req
+    "CreateGame"
+    "fixture/CreateGame.yaml"
+
+requestCreateSnapshot :: CreateSnapshot -> TestTree
+requestCreateSnapshot =
+  req
+    "CreateSnapshot"
+    "fixture/CreateSnapshot.yaml"
+
+requestCreateStage :: CreateStage -> TestTree
+requestCreateStage =
+  req
+    "CreateStage"
+    "fixture/CreateStage.yaml"
+
+requestDeleteGame :: DeleteGame -> TestTree
+requestDeleteGame =
+  req
+    "DeleteGame"
+    "fixture/DeleteGame.yaml"
+
+requestDeleteStage :: DeleteStage -> TestTree
+requestDeleteStage =
+  req
+    "DeleteStage"
+    "fixture/DeleteStage.yaml"
+
+requestDisconnectPlayer :: DisconnectPlayer -> TestTree
+requestDisconnectPlayer =
+  req
+    "DisconnectPlayer"
+    "fixture/DisconnectPlayer.yaml"
+
+requestExportSnapshot :: ExportSnapshot -> TestTree
+requestExportSnapshot =
+  req
+    "ExportSnapshot"
+    "fixture/ExportSnapshot.yaml"
+
+requestGetExtension :: GetExtension -> TestTree
+requestGetExtension =
+  req
+    "GetExtension"
+    "fixture/GetExtension.yaml"
+
+requestGetExtensionVersion :: GetExtensionVersion -> TestTree
+requestGetExtensionVersion =
+  req
+    "GetExtensionVersion"
+    "fixture/GetExtensionVersion.yaml"
+
+requestGetGame :: GetGame -> TestTree
+requestGetGame =
+  req
+    "GetGame"
+    "fixture/GetGame.yaml"
+
+requestGetGameConfiguration :: GetGameConfiguration -> TestTree
+requestGetGameConfiguration =
+  req
+    "GetGameConfiguration"
+    "fixture/GetGameConfiguration.yaml"
+
+requestGetGeneratedCodeJob :: GetGeneratedCodeJob -> TestTree
+requestGetGeneratedCodeJob =
+  req
+    "GetGeneratedCodeJob"
+    "fixture/GetGeneratedCodeJob.yaml"
+
+requestGetPlayerConnectionStatus :: GetPlayerConnectionStatus -> TestTree
+requestGetPlayerConnectionStatus =
+  req
+    "GetPlayerConnectionStatus"
+    "fixture/GetPlayerConnectionStatus.yaml"
+
+requestGetSnapshot :: GetSnapshot -> TestTree
+requestGetSnapshot =
+  req
+    "GetSnapshot"
+    "fixture/GetSnapshot.yaml"
+
+requestGetStage :: GetStage -> TestTree
+requestGetStage =
+  req
+    "GetStage"
+    "fixture/GetStage.yaml"
+
+requestGetStageDeployment :: GetStageDeployment -> TestTree
+requestGetStageDeployment =
+  req
+    "GetStageDeployment"
+    "fixture/GetStageDeployment.yaml"
+
+requestImportGameConfiguration :: ImportGameConfiguration -> TestTree
+requestImportGameConfiguration =
+  req
+    "ImportGameConfiguration"
+    "fixture/ImportGameConfiguration.yaml"
+
+requestListExtensionVersions :: ListExtensionVersions -> TestTree
+requestListExtensionVersions =
+  req
+    "ListExtensionVersions"
+    "fixture/ListExtensionVersions.yaml"
+
+requestListExtensions :: ListExtensions -> TestTree
+requestListExtensions =
+  req
+    "ListExtensions"
+    "fixture/ListExtensions.yaml"
+
+requestListGames :: ListGames -> TestTree
+requestListGames =
+  req
+    "ListGames"
+    "fixture/ListGames.yaml"
+
+requestListGeneratedCodeJobs :: ListGeneratedCodeJobs -> TestTree
+requestListGeneratedCodeJobs =
+  req
+    "ListGeneratedCodeJobs"
+    "fixture/ListGeneratedCodeJobs.yaml"
+
+requestListSnapshots :: ListSnapshots -> TestTree
+requestListSnapshots =
+  req
+    "ListSnapshots"
+    "fixture/ListSnapshots.yaml"
+
+requestListStageDeployments :: ListStageDeployments -> TestTree
+requestListStageDeployments =
+  req
+    "ListStageDeployments"
+    "fixture/ListStageDeployments.yaml"
+
+requestListStages :: ListStages -> TestTree
+requestListStages =
+  req
+    "ListStages"
+    "fixture/ListStages.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestStartGeneratedCodeJob :: StartGeneratedCodeJob -> TestTree
+requestStartGeneratedCodeJob =
+  req
+    "StartGeneratedCodeJob"
+    "fixture/StartGeneratedCodeJob.yaml"
+
+requestStartStageDeployment :: StartStageDeployment -> TestTree
+requestStartStageDeployment =
+  req
+    "StartStageDeployment"
+    "fixture/StartStageDeployment.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateGame :: UpdateGame -> TestTree
+requestUpdateGame =
+  req
+    "UpdateGame"
+    "fixture/UpdateGame.yaml"
+
+requestUpdateGameConfiguration :: UpdateGameConfiguration -> TestTree
+requestUpdateGameConfiguration =
+  req
+    "UpdateGameConfiguration"
+    "fixture/UpdateGameConfiguration.yaml"
+
+requestUpdateSnapshot :: UpdateSnapshot -> TestTree
+requestUpdateSnapshot =
+  req
+    "UpdateSnapshot"
+    "fixture/UpdateSnapshot.yaml"
+
+requestUpdateStage :: UpdateStage -> TestTree
+requestUpdateStage =
+  req
+    "UpdateStage"
+    "fixture/UpdateStage.yaml"
+
+-- Responses
+
+responseCreateGame :: CreateGameResponse -> TestTree
+responseCreateGame =
+  res
+    "CreateGameResponse"
+    "fixture/CreateGameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateGame)
+
+responseCreateSnapshot :: CreateSnapshotResponse -> TestTree
+responseCreateSnapshot =
+  res
+    "CreateSnapshotResponse"
+    "fixture/CreateSnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSnapshot)
+
+responseCreateStage :: CreateStageResponse -> TestTree
+responseCreateStage =
+  res
+    "CreateStageResponse"
+    "fixture/CreateStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStage)
+
+responseDeleteGame :: DeleteGameResponse -> TestTree
+responseDeleteGame =
+  res
+    "DeleteGameResponse"
+    "fixture/DeleteGameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteGame)
+
+responseDeleteStage :: DeleteStageResponse -> TestTree
+responseDeleteStage =
+  res
+    "DeleteStageResponse"
+    "fixture/DeleteStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStage)
+
+responseDisconnectPlayer :: DisconnectPlayerResponse -> TestTree
+responseDisconnectPlayer =
+  res
+    "DisconnectPlayerResponse"
+    "fixture/DisconnectPlayerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisconnectPlayer)
+
+responseExportSnapshot :: ExportSnapshotResponse -> TestTree
+responseExportSnapshot =
+  res
+    "ExportSnapshotResponse"
+    "fixture/ExportSnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportSnapshot)
+
+responseGetExtension :: GetExtensionResponse -> TestTree
+responseGetExtension =
+  res
+    "GetExtensionResponse"
+    "fixture/GetExtensionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetExtension)
+
+responseGetExtensionVersion :: GetExtensionVersionResponse -> TestTree
+responseGetExtensionVersion =
+  res
+    "GetExtensionVersionResponse"
+    "fixture/GetExtensionVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetExtensionVersion)
+
+responseGetGame :: GetGameResponse -> TestTree
+responseGetGame =
+  res
+    "GetGameResponse"
+    "fixture/GetGameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetGame)
+
+responseGetGameConfiguration :: GetGameConfigurationResponse -> TestTree
+responseGetGameConfiguration =
+  res
+    "GetGameConfigurationResponse"
+    "fixture/GetGameConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetGameConfiguration)
+
+responseGetGeneratedCodeJob :: GetGeneratedCodeJobResponse -> TestTree
+responseGetGeneratedCodeJob =
+  res
+    "GetGeneratedCodeJobResponse"
+    "fixture/GetGeneratedCodeJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetGeneratedCodeJob)
+
+responseGetPlayerConnectionStatus :: GetPlayerConnectionStatusResponse -> TestTree
+responseGetPlayerConnectionStatus =
+  res
+    "GetPlayerConnectionStatusResponse"
+    "fixture/GetPlayerConnectionStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPlayerConnectionStatus)
+
+responseGetSnapshot :: GetSnapshotResponse -> TestTree
+responseGetSnapshot =
+  res
+    "GetSnapshotResponse"
+    "fixture/GetSnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSnapshot)
+
+responseGetStage :: GetStageResponse -> TestTree
+responseGetStage =
+  res
+    "GetStageResponse"
+    "fixture/GetStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStage)
+
+responseGetStageDeployment :: GetStageDeploymentResponse -> TestTree
+responseGetStageDeployment =
+  res
+    "GetStageDeploymentResponse"
+    "fixture/GetStageDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetStageDeployment)
+
+responseImportGameConfiguration :: ImportGameConfigurationResponse -> TestTree
+responseImportGameConfiguration =
+  res
+    "ImportGameConfigurationResponse"
+    "fixture/ImportGameConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportGameConfiguration)
+
+responseListExtensionVersions :: ListExtensionVersionsResponse -> TestTree
+responseListExtensionVersions =
+  res
+    "ListExtensionVersionsResponse"
+    "fixture/ListExtensionVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExtensionVersions)
+
+responseListExtensions :: ListExtensionsResponse -> TestTree
+responseListExtensions =
+  res
+    "ListExtensionsResponse"
+    "fixture/ListExtensionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExtensions)
+
+responseListGames :: ListGamesResponse -> TestTree
+responseListGames =
+  res
+    "ListGamesResponse"
+    "fixture/ListGamesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListGames)
+
+responseListGeneratedCodeJobs :: ListGeneratedCodeJobsResponse -> TestTree
+responseListGeneratedCodeJobs =
+  res
+    "ListGeneratedCodeJobsResponse"
+    "fixture/ListGeneratedCodeJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListGeneratedCodeJobs)
+
+responseListSnapshots :: ListSnapshotsResponse -> TestTree
+responseListSnapshots =
+  res
+    "ListSnapshotsResponse"
+    "fixture/ListSnapshotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSnapshots)
+
+responseListStageDeployments :: ListStageDeploymentsResponse -> TestTree
+responseListStageDeployments =
+  res
+    "ListStageDeploymentsResponse"
+    "fixture/ListStageDeploymentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStageDeployments)
+
+responseListStages :: ListStagesResponse -> TestTree
+responseListStages =
+  res
+    "ListStagesResponse"
+    "fixture/ListStagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListStages)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseStartGeneratedCodeJob :: StartGeneratedCodeJobResponse -> TestTree
+responseStartGeneratedCodeJob =
+  res
+    "StartGeneratedCodeJobResponse"
+    "fixture/StartGeneratedCodeJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartGeneratedCodeJob)
+
+responseStartStageDeployment :: StartStageDeploymentResponse -> TestTree
+responseStartStageDeployment =
+  res
+    "StartStageDeploymentResponse"
+    "fixture/StartStageDeploymentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartStageDeployment)
+
+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)
+
+responseUpdateGame :: UpdateGameResponse -> TestTree
+responseUpdateGame =
+  res
+    "UpdateGameResponse"
+    "fixture/UpdateGameResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateGame)
+
+responseUpdateGameConfiguration :: UpdateGameConfigurationResponse -> TestTree
+responseUpdateGameConfiguration =
+  res
+    "UpdateGameConfigurationResponse"
+    "fixture/UpdateGameConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateGameConfiguration)
+
+responseUpdateSnapshot :: UpdateSnapshotResponse -> TestTree
+responseUpdateSnapshot =
+  res
+    "UpdateSnapshotResponse"
+    "fixture/UpdateSnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSnapshot)
+
+responseUpdateStage :: UpdateStageResponse -> TestTree
+responseUpdateStage =
+  res
+    "UpdateStageResponse"
+    "fixture/UpdateStageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateStage)
