diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/ApiGateway/Account.hs b/gen/Stratosphere/ApiGateway/Account.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Account.hs
@@ -0,0 +1,36 @@
+module Stratosphere.ApiGateway.Account (
+        Account(..), mkAccount
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Account
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html>
+    Account {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html#cfn-apigateway-account-cloudwatchrolearn>
+             cloudWatchRoleArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccount :: Account
+mkAccount
+  = Account
+      {haddock_workaround_ = (), cloudWatchRoleArn = Prelude.Nothing}
+instance ToResourceProperties Account where
+  toResourceProperties Account {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Account",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudWatchRoleArn" Prelude.<$> cloudWatchRoleArn])}
+instance JSON.ToJSON Account where
+  toJSON Account {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudWatchRoleArn" Prelude.<$> cloudWatchRoleArn]))
+instance Property "CloudWatchRoleArn" Account where
+  type PropertyType "CloudWatchRoleArn" Account = Value Prelude.Text
+  set newValue Account {..}
+    = Account {cloudWatchRoleArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/ApiKey.hs b/gen/Stratosphere/ApiGateway/ApiKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/ApiKey.hs
@@ -0,0 +1,97 @@
+module Stratosphere.ApiGateway.ApiKey (
+        module Exports, ApiKey(..), mkApiKey
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.ApiKey.StageKeyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ApiKey
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html>
+    ApiKey {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-customerid>
+            customerId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-description>
+            description :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-enabled>
+            enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-generatedistinctid>
+            generateDistinctId :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-name>
+            name :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-stagekeys>
+            stageKeys :: (Prelude.Maybe [StageKeyProperty]),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-tags>
+            tags :: (Prelude.Maybe [Tag]),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-apikey.html#cfn-apigateway-apikey-value>
+            value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkApiKey :: ApiKey
+mkApiKey
+  = ApiKey
+      {haddock_workaround_ = (), customerId = Prelude.Nothing,
+       description = Prelude.Nothing, enabled = Prelude.Nothing,
+       generateDistinctId = Prelude.Nothing, name = Prelude.Nothing,
+       stageKeys = Prelude.Nothing, tags = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties ApiKey where
+  toResourceProperties ApiKey {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::ApiKey", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CustomerId" Prelude.<$> customerId,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "Enabled" Prelude.<$> enabled,
+                            (JSON..=) "GenerateDistinctId" Prelude.<$> generateDistinctId,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "StageKeys" Prelude.<$> stageKeys,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON ApiKey where
+  toJSON ApiKey {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CustomerId" Prelude.<$> customerId,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "Enabled" Prelude.<$> enabled,
+               (JSON..=) "GenerateDistinctId" Prelude.<$> generateDistinctId,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "StageKeys" Prelude.<$> stageKeys,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "CustomerId" ApiKey where
+  type PropertyType "CustomerId" ApiKey = Value Prelude.Text
+  set newValue ApiKey {..}
+    = ApiKey {customerId = Prelude.pure newValue, ..}
+instance Property "Description" ApiKey where
+  type PropertyType "Description" ApiKey = Value Prelude.Text
+  set newValue ApiKey {..}
+    = ApiKey {description = Prelude.pure newValue, ..}
+instance Property "Enabled" ApiKey where
+  type PropertyType "Enabled" ApiKey = Value Prelude.Bool
+  set newValue ApiKey {..}
+    = ApiKey {enabled = Prelude.pure newValue, ..}
+instance Property "GenerateDistinctId" ApiKey where
+  type PropertyType "GenerateDistinctId" ApiKey = Value Prelude.Bool
+  set newValue ApiKey {..}
+    = ApiKey {generateDistinctId = Prelude.pure newValue, ..}
+instance Property "Name" ApiKey where
+  type PropertyType "Name" ApiKey = Value Prelude.Text
+  set newValue ApiKey {..}
+    = ApiKey {name = Prelude.pure newValue, ..}
+instance Property "StageKeys" ApiKey where
+  type PropertyType "StageKeys" ApiKey = [StageKeyProperty]
+  set newValue ApiKey {..}
+    = ApiKey {stageKeys = Prelude.pure newValue, ..}
+instance Property "Tags" ApiKey where
+  type PropertyType "Tags" ApiKey = [Tag]
+  set newValue ApiKey {..}
+    = ApiKey {tags = Prelude.pure newValue, ..}
+instance Property "Value" ApiKey where
+  type PropertyType "Value" ApiKey = Value Prelude.Text
+  set newValue ApiKey {..}
+    = ApiKey {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/ApiKey/StageKeyProperty.hs b/gen/Stratosphere/ApiGateway/ApiKey/StageKeyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/ApiKey/StageKeyProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ApiGateway.ApiKey.StageKeyProperty (
+        StageKeyProperty(..), mkStageKeyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StageKeyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-apikey-stagekey.html>
+    StageKeyProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-apikey-stagekey.html#cfn-apigateway-apikey-stagekey-restapiid>
+                      restApiId :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-apikey-stagekey.html#cfn-apigateway-apikey-stagekey-stagename>
+                      stageName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStageKeyProperty :: StageKeyProperty
+mkStageKeyProperty
+  = StageKeyProperty
+      {haddock_workaround_ = (), restApiId = Prelude.Nothing,
+       stageName = Prelude.Nothing}
+instance ToResourceProperties StageKeyProperty where
+  toResourceProperties StageKeyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::ApiKey.StageKey",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "RestApiId" Prelude.<$> restApiId,
+                            (JSON..=) "StageName" Prelude.<$> stageName])}
+instance JSON.ToJSON StageKeyProperty where
+  toJSON StageKeyProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "RestApiId" Prelude.<$> restApiId,
+               (JSON..=) "StageName" Prelude.<$> stageName]))
+instance Property "RestApiId" StageKeyProperty where
+  type PropertyType "RestApiId" StageKeyProperty = Value Prelude.Text
+  set newValue StageKeyProperty {..}
+    = StageKeyProperty {restApiId = Prelude.pure newValue, ..}
+instance Property "StageName" StageKeyProperty where
+  type PropertyType "StageName" StageKeyProperty = Value Prelude.Text
+  set newValue StageKeyProperty {..}
+    = StageKeyProperty {stageName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/ApiKey/StageKeyProperty.hs-boot b/gen/Stratosphere/ApiGateway/ApiKey/StageKeyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/ApiKey/StageKeyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.ApiKey.StageKeyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StageKeyProperty :: Prelude.Type
+instance ToResourceProperties StageKeyProperty
+instance Prelude.Eq StageKeyProperty
+instance Prelude.Show StageKeyProperty
+instance JSON.ToJSON StageKeyProperty
diff --git a/gen/Stratosphere/ApiGateway/Authorizer.hs b/gen/Stratosphere/ApiGateway/Authorizer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Authorizer.hs
@@ -0,0 +1,122 @@
+module Stratosphere.ApiGateway.Authorizer (
+        Authorizer(..), mkAuthorizer
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Authorizer
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html>
+    Authorizer {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-authtype>
+                authType :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-authorizercredentials>
+                authorizerCredentials :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-authorizerresultttlinseconds>
+                authorizerResultTtlInSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-authorizeruri>
+                authorizerUri :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-identitysource>
+                identitySource :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-identityvalidationexpression>
+                identityValidationExpression :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-name>
+                name :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-providerarns>
+                providerARNs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-restapiid>
+                restApiId :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-authorizer.html#cfn-apigateway-authorizer-type>
+                type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAuthorizer ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> Authorizer
+mkAuthorizer name restApiId type'
+  = Authorizer
+      {haddock_workaround_ = (), name = name, restApiId = restApiId,
+       type' = type', authType = Prelude.Nothing,
+       authorizerCredentials = Prelude.Nothing,
+       authorizerResultTtlInSeconds = Prelude.Nothing,
+       authorizerUri = Prelude.Nothing, identitySource = Prelude.Nothing,
+       identityValidationExpression = Prelude.Nothing,
+       providerARNs = Prelude.Nothing}
+instance ToResourceProperties Authorizer where
+  toResourceProperties Authorizer {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Authorizer",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name, "RestApiId" JSON..= restApiId,
+                            "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthType" Prelude.<$> authType,
+                               (JSON..=) "AuthorizerCredentials"
+                                 Prelude.<$> authorizerCredentials,
+                               (JSON..=) "AuthorizerResultTtlInSeconds"
+                                 Prelude.<$> authorizerResultTtlInSeconds,
+                               (JSON..=) "AuthorizerUri" Prelude.<$> authorizerUri,
+                               (JSON..=) "IdentitySource" Prelude.<$> identitySource,
+                               (JSON..=) "IdentityValidationExpression"
+                                 Prelude.<$> identityValidationExpression,
+                               (JSON..=) "ProviderARNs" Prelude.<$> providerARNs]))}
+instance JSON.ToJSON Authorizer where
+  toJSON Authorizer {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name, "RestApiId" JSON..= restApiId,
+               "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthType" Prelude.<$> authType,
+                  (JSON..=) "AuthorizerCredentials"
+                    Prelude.<$> authorizerCredentials,
+                  (JSON..=) "AuthorizerResultTtlInSeconds"
+                    Prelude.<$> authorizerResultTtlInSeconds,
+                  (JSON..=) "AuthorizerUri" Prelude.<$> authorizerUri,
+                  (JSON..=) "IdentitySource" Prelude.<$> identitySource,
+                  (JSON..=) "IdentityValidationExpression"
+                    Prelude.<$> identityValidationExpression,
+                  (JSON..=) "ProviderARNs" Prelude.<$> providerARNs])))
+instance Property "AuthType" Authorizer where
+  type PropertyType "AuthType" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..}
+    = Authorizer {authType = Prelude.pure newValue, ..}
+instance Property "AuthorizerCredentials" Authorizer where
+  type PropertyType "AuthorizerCredentials" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..}
+    = Authorizer {authorizerCredentials = Prelude.pure newValue, ..}
+instance Property "AuthorizerResultTtlInSeconds" Authorizer where
+  type PropertyType "AuthorizerResultTtlInSeconds" Authorizer = Value Prelude.Integer
+  set newValue Authorizer {..}
+    = Authorizer
+        {authorizerResultTtlInSeconds = Prelude.pure newValue, ..}
+instance Property "AuthorizerUri" Authorizer where
+  type PropertyType "AuthorizerUri" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..}
+    = Authorizer {authorizerUri = Prelude.pure newValue, ..}
+instance Property "IdentitySource" Authorizer where
+  type PropertyType "IdentitySource" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..}
+    = Authorizer {identitySource = Prelude.pure newValue, ..}
+instance Property "IdentityValidationExpression" Authorizer where
+  type PropertyType "IdentityValidationExpression" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..}
+    = Authorizer
+        {identityValidationExpression = Prelude.pure newValue, ..}
+instance Property "Name" Authorizer where
+  type PropertyType "Name" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..} = Authorizer {name = newValue, ..}
+instance Property "ProviderARNs" Authorizer where
+  type PropertyType "ProviderARNs" Authorizer = ValueList Prelude.Text
+  set newValue Authorizer {..}
+    = Authorizer {providerARNs = Prelude.pure newValue, ..}
+instance Property "RestApiId" Authorizer where
+  type PropertyType "RestApiId" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..}
+    = Authorizer {restApiId = newValue, ..}
+instance Property "Type" Authorizer where
+  type PropertyType "Type" Authorizer = Value Prelude.Text
+  set newValue Authorizer {..} = Authorizer {type' = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/BasePathMapping.hs b/gen/Stratosphere/ApiGateway/BasePathMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/BasePathMapping.hs
@@ -0,0 +1,72 @@
+module Stratosphere.ApiGateway.BasePathMapping (
+        BasePathMapping(..), mkBasePathMapping
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BasePathMapping
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html>
+    BasePathMapping {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-basepath>
+                     basePath :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-domainname>
+                     domainName :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-id>
+                     id :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-restapiid>
+                     restApiId :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-stage>
+                     stage :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBasePathMapping :: Value Prelude.Text -> BasePathMapping
+mkBasePathMapping domainName
+  = BasePathMapping
+      {haddock_workaround_ = (), domainName = domainName,
+       basePath = Prelude.Nothing, id = Prelude.Nothing,
+       restApiId = Prelude.Nothing, stage = Prelude.Nothing}
+instance ToResourceProperties BasePathMapping where
+  toResourceProperties BasePathMapping {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::BasePathMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DomainName" JSON..= domainName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BasePath" Prelude.<$> basePath,
+                               (JSON..=) "Id" Prelude.<$> id,
+                               (JSON..=) "RestApiId" Prelude.<$> restApiId,
+                               (JSON..=) "Stage" Prelude.<$> stage]))}
+instance JSON.ToJSON BasePathMapping where
+  toJSON BasePathMapping {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DomainName" JSON..= domainName]
+              (Prelude.catMaybes
+                 [(JSON..=) "BasePath" Prelude.<$> basePath,
+                  (JSON..=) "Id" Prelude.<$> id,
+                  (JSON..=) "RestApiId" Prelude.<$> restApiId,
+                  (JSON..=) "Stage" Prelude.<$> stage])))
+instance Property "BasePath" BasePathMapping where
+  type PropertyType "BasePath" BasePathMapping = Value Prelude.Text
+  set newValue BasePathMapping {..}
+    = BasePathMapping {basePath = Prelude.pure newValue, ..}
+instance Property "DomainName" BasePathMapping where
+  type PropertyType "DomainName" BasePathMapping = Value Prelude.Text
+  set newValue BasePathMapping {..}
+    = BasePathMapping {domainName = newValue, ..}
+instance Property "Id" BasePathMapping where
+  type PropertyType "Id" BasePathMapping = Value Prelude.Text
+  set newValue BasePathMapping {..}
+    = BasePathMapping {id = Prelude.pure newValue, ..}
+instance Property "RestApiId" BasePathMapping where
+  type PropertyType "RestApiId" BasePathMapping = Value Prelude.Text
+  set newValue BasePathMapping {..}
+    = BasePathMapping {restApiId = Prelude.pure newValue, ..}
+instance Property "Stage" BasePathMapping where
+  type PropertyType "Stage" BasePathMapping = Value Prelude.Text
+  set newValue BasePathMapping {..}
+    = BasePathMapping {stage = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/BasePathMappingV2.hs b/gen/Stratosphere/ApiGateway/BasePathMappingV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/BasePathMappingV2.hs
@@ -0,0 +1,65 @@
+module Stratosphere.ApiGateway.BasePathMappingV2 (
+        BasePathMappingV2(..), mkBasePathMappingV2
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BasePathMappingV2
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmappingv2.html>
+    BasePathMappingV2 {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmappingv2.html#cfn-apigateway-basepathmappingv2-basepath>
+                       basePath :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmappingv2.html#cfn-apigateway-basepathmappingv2-domainnamearn>
+                       domainNameArn :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmappingv2.html#cfn-apigateway-basepathmappingv2-restapiid>
+                       restApiId :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmappingv2.html#cfn-apigateway-basepathmappingv2-stage>
+                       stage :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBasePathMappingV2 ::
+  Value Prelude.Text -> Value Prelude.Text -> BasePathMappingV2
+mkBasePathMappingV2 domainNameArn restApiId
+  = BasePathMappingV2
+      {haddock_workaround_ = (), domainNameArn = domainNameArn,
+       restApiId = restApiId, basePath = Prelude.Nothing,
+       stage = Prelude.Nothing}
+instance ToResourceProperties BasePathMappingV2 where
+  toResourceProperties BasePathMappingV2 {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::BasePathMappingV2",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DomainNameArn" JSON..= domainNameArn,
+                            "RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BasePath" Prelude.<$> basePath,
+                               (JSON..=) "Stage" Prelude.<$> stage]))}
+instance JSON.ToJSON BasePathMappingV2 where
+  toJSON BasePathMappingV2 {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DomainNameArn" JSON..= domainNameArn,
+               "RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "BasePath" Prelude.<$> basePath,
+                  (JSON..=) "Stage" Prelude.<$> stage])))
+instance Property "BasePath" BasePathMappingV2 where
+  type PropertyType "BasePath" BasePathMappingV2 = Value Prelude.Text
+  set newValue BasePathMappingV2 {..}
+    = BasePathMappingV2 {basePath = Prelude.pure newValue, ..}
+instance Property "DomainNameArn" BasePathMappingV2 where
+  type PropertyType "DomainNameArn" BasePathMappingV2 = Value Prelude.Text
+  set newValue BasePathMappingV2 {..}
+    = BasePathMappingV2 {domainNameArn = newValue, ..}
+instance Property "RestApiId" BasePathMappingV2 where
+  type PropertyType "RestApiId" BasePathMappingV2 = Value Prelude.Text
+  set newValue BasePathMappingV2 {..}
+    = BasePathMappingV2 {restApiId = newValue, ..}
+instance Property "Stage" BasePathMappingV2 where
+  type PropertyType "Stage" BasePathMappingV2 = Value Prelude.Text
+  set newValue BasePathMappingV2 {..}
+    = BasePathMappingV2 {stage = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/ClientCertificate.hs b/gen/Stratosphere/ApiGateway/ClientCertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/ClientCertificate.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ApiGateway.ClientCertificate (
+        ClientCertificate(..), mkClientCertificate
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ClientCertificate
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html>
+    ClientCertificate {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html#cfn-apigateway-clientcertificate-description>
+                       description :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-clientcertificate.html#cfn-apigateway-clientcertificate-tags>
+                       tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientCertificate :: ClientCertificate
+mkClientCertificate
+  = ClientCertificate
+      {haddock_workaround_ = (), description = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties ClientCertificate where
+  toResourceProperties ClientCertificate {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::ClientCertificate",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON ClientCertificate where
+  toJSON ClientCertificate {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "Description" ClientCertificate where
+  type PropertyType "Description" ClientCertificate = Value Prelude.Text
+  set newValue ClientCertificate {..}
+    = ClientCertificate {description = Prelude.pure newValue, ..}
+instance Property "Tags" ClientCertificate where
+  type PropertyType "Tags" ClientCertificate = [Tag]
+  set newValue ClientCertificate {..}
+    = ClientCertificate {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Deployment.hs b/gen/Stratosphere/ApiGateway/Deployment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment.hs
@@ -0,0 +1,77 @@
+module Stratosphere.ApiGateway.Deployment (
+        module Exports, Deployment(..), mkDeployment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.Deployment.DeploymentCanarySettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.Deployment.StageDescriptionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Deployment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html>
+    Deployment {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-deploymentcanarysettings>
+                deploymentCanarySettings :: (Prelude.Maybe DeploymentCanarySettingsProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-description>
+                description :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-restapiid>
+                restApiId :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-stagedescription>
+                stageDescription :: (Prelude.Maybe StageDescriptionProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html#cfn-apigateway-deployment-stagename>
+                stageName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeployment :: Value Prelude.Text -> Deployment
+mkDeployment restApiId
+  = Deployment
+      {haddock_workaround_ = (), restApiId = restApiId,
+       deploymentCanarySettings = Prelude.Nothing,
+       description = Prelude.Nothing, stageDescription = Prelude.Nothing,
+       stageName = Prelude.Nothing}
+instance ToResourceProperties Deployment where
+  toResourceProperties Deployment {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Deployment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DeploymentCanarySettings"
+                                 Prelude.<$> deploymentCanarySettings,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "StageDescription" Prelude.<$> stageDescription,
+                               (JSON..=) "StageName" Prelude.<$> stageName]))}
+instance JSON.ToJSON Deployment where
+  toJSON Deployment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "DeploymentCanarySettings"
+                    Prelude.<$> deploymentCanarySettings,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "StageDescription" Prelude.<$> stageDescription,
+                  (JSON..=) "StageName" Prelude.<$> stageName])))
+instance Property "DeploymentCanarySettings" Deployment where
+  type PropertyType "DeploymentCanarySettings" Deployment = DeploymentCanarySettingsProperty
+  set newValue Deployment {..}
+    = Deployment {deploymentCanarySettings = Prelude.pure newValue, ..}
+instance Property "Description" Deployment where
+  type PropertyType "Description" Deployment = Value Prelude.Text
+  set newValue Deployment {..}
+    = Deployment {description = Prelude.pure newValue, ..}
+instance Property "RestApiId" Deployment where
+  type PropertyType "RestApiId" Deployment = Value Prelude.Text
+  set newValue Deployment {..}
+    = Deployment {restApiId = newValue, ..}
+instance Property "StageDescription" Deployment where
+  type PropertyType "StageDescription" Deployment = StageDescriptionProperty
+  set newValue Deployment {..}
+    = Deployment {stageDescription = Prelude.pure newValue, ..}
+instance Property "StageName" Deployment where
+  type PropertyType "StageName" Deployment = Value Prelude.Text
+  set newValue Deployment {..}
+    = Deployment {stageName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Deployment/AccessLogSettingProperty.hs b/gen/Stratosphere/ApiGateway/Deployment/AccessLogSettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/AccessLogSettingProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ApiGateway.Deployment.AccessLogSettingProperty (
+        AccessLogSettingProperty(..), mkAccessLogSettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccessLogSettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-accesslogsetting.html>
+    AccessLogSettingProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-accesslogsetting.html#cfn-apigateway-deployment-accesslogsetting-destinationarn>
+                              destinationArn :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-accesslogsetting.html#cfn-apigateway-deployment-accesslogsetting-format>
+                              format :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessLogSettingProperty :: AccessLogSettingProperty
+mkAccessLogSettingProperty
+  = AccessLogSettingProperty
+      {haddock_workaround_ = (), destinationArn = Prelude.Nothing,
+       format = Prelude.Nothing}
+instance ToResourceProperties AccessLogSettingProperty where
+  toResourceProperties AccessLogSettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Deployment.AccessLogSetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DestinationArn" Prelude.<$> destinationArn,
+                            (JSON..=) "Format" Prelude.<$> format])}
+instance JSON.ToJSON AccessLogSettingProperty where
+  toJSON AccessLogSettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DestinationArn" Prelude.<$> destinationArn,
+               (JSON..=) "Format" Prelude.<$> format]))
+instance Property "DestinationArn" AccessLogSettingProperty where
+  type PropertyType "DestinationArn" AccessLogSettingProperty = Value Prelude.Text
+  set newValue AccessLogSettingProperty {..}
+    = AccessLogSettingProperty
+        {destinationArn = Prelude.pure newValue, ..}
+instance Property "Format" AccessLogSettingProperty where
+  type PropertyType "Format" AccessLogSettingProperty = Value Prelude.Text
+  set newValue AccessLogSettingProperty {..}
+    = AccessLogSettingProperty {format = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Deployment/AccessLogSettingProperty.hs-boot b/gen/Stratosphere/ApiGateway/Deployment/AccessLogSettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/AccessLogSettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Deployment.AccessLogSettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessLogSettingProperty :: Prelude.Type
+instance ToResourceProperties AccessLogSettingProperty
+instance Prelude.Eq AccessLogSettingProperty
+instance Prelude.Show AccessLogSettingProperty
+instance JSON.ToJSON AccessLogSettingProperty
diff --git a/gen/Stratosphere/ApiGateway/Deployment/CanarySettingProperty.hs b/gen/Stratosphere/ApiGateway/Deployment/CanarySettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/CanarySettingProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.ApiGateway.Deployment.CanarySettingProperty (
+        CanarySettingProperty(..), mkCanarySettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CanarySettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-canarysetting.html>
+    CanarySettingProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-canarysetting.html#cfn-apigateway-deployment-canarysetting-percenttraffic>
+                           percentTraffic :: (Prelude.Maybe (Value Prelude.Double)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-canarysetting.html#cfn-apigateway-deployment-canarysetting-stagevariableoverrides>
+                           stageVariableOverrides :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-canarysetting.html#cfn-apigateway-deployment-canarysetting-usestagecache>
+                           useStageCache :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCanarySettingProperty :: CanarySettingProperty
+mkCanarySettingProperty
+  = CanarySettingProperty
+      {haddock_workaround_ = (), percentTraffic = Prelude.Nothing,
+       stageVariableOverrides = Prelude.Nothing,
+       useStageCache = Prelude.Nothing}
+instance ToResourceProperties CanarySettingProperty where
+  toResourceProperties CanarySettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Deployment.CanarySetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PercentTraffic" Prelude.<$> percentTraffic,
+                            (JSON..=) "StageVariableOverrides"
+                              Prelude.<$> stageVariableOverrides,
+                            (JSON..=) "UseStageCache" Prelude.<$> useStageCache])}
+instance JSON.ToJSON CanarySettingProperty where
+  toJSON CanarySettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PercentTraffic" Prelude.<$> percentTraffic,
+               (JSON..=) "StageVariableOverrides"
+                 Prelude.<$> stageVariableOverrides,
+               (JSON..=) "UseStageCache" Prelude.<$> useStageCache]))
+instance Property "PercentTraffic" CanarySettingProperty where
+  type PropertyType "PercentTraffic" CanarySettingProperty = Value Prelude.Double
+  set newValue CanarySettingProperty {..}
+    = CanarySettingProperty
+        {percentTraffic = Prelude.pure newValue, ..}
+instance Property "StageVariableOverrides" CanarySettingProperty where
+  type PropertyType "StageVariableOverrides" CanarySettingProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue CanarySettingProperty {..}
+    = CanarySettingProperty
+        {stageVariableOverrides = Prelude.pure newValue, ..}
+instance Property "UseStageCache" CanarySettingProperty where
+  type PropertyType "UseStageCache" CanarySettingProperty = Value Prelude.Bool
+  set newValue CanarySettingProperty {..}
+    = CanarySettingProperty {useStageCache = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Deployment/CanarySettingProperty.hs-boot b/gen/Stratosphere/ApiGateway/Deployment/CanarySettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/CanarySettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Deployment.CanarySettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CanarySettingProperty :: Prelude.Type
+instance ToResourceProperties CanarySettingProperty
+instance Prelude.Eq CanarySettingProperty
+instance Prelude.Show CanarySettingProperty
+instance JSON.ToJSON CanarySettingProperty
diff --git a/gen/Stratosphere/ApiGateway/Deployment/DeploymentCanarySettingsProperty.hs b/gen/Stratosphere/ApiGateway/Deployment/DeploymentCanarySettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/DeploymentCanarySettingsProperty.hs
@@ -0,0 +1,61 @@
+module Stratosphere.ApiGateway.Deployment.DeploymentCanarySettingsProperty (
+        DeploymentCanarySettingsProperty(..),
+        mkDeploymentCanarySettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeploymentCanarySettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-deploymentcanarysettings.html>
+    DeploymentCanarySettingsProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-deploymentcanarysettings.html#cfn-apigateway-deployment-deploymentcanarysettings-percenttraffic>
+                                      percentTraffic :: (Prelude.Maybe (Value Prelude.Double)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-deploymentcanarysettings.html#cfn-apigateway-deployment-deploymentcanarysettings-stagevariableoverrides>
+                                      stageVariableOverrides :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-deploymentcanarysettings.html#cfn-apigateway-deployment-deploymentcanarysettings-usestagecache>
+                                      useStageCache :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeploymentCanarySettingsProperty ::
+  DeploymentCanarySettingsProperty
+mkDeploymentCanarySettingsProperty
+  = DeploymentCanarySettingsProperty
+      {haddock_workaround_ = (), percentTraffic = Prelude.Nothing,
+       stageVariableOverrides = Prelude.Nothing,
+       useStageCache = Prelude.Nothing}
+instance ToResourceProperties DeploymentCanarySettingsProperty where
+  toResourceProperties DeploymentCanarySettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Deployment.DeploymentCanarySettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PercentTraffic" Prelude.<$> percentTraffic,
+                            (JSON..=) "StageVariableOverrides"
+                              Prelude.<$> stageVariableOverrides,
+                            (JSON..=) "UseStageCache" Prelude.<$> useStageCache])}
+instance JSON.ToJSON DeploymentCanarySettingsProperty where
+  toJSON DeploymentCanarySettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PercentTraffic" Prelude.<$> percentTraffic,
+               (JSON..=) "StageVariableOverrides"
+                 Prelude.<$> stageVariableOverrides,
+               (JSON..=) "UseStageCache" Prelude.<$> useStageCache]))
+instance Property "PercentTraffic" DeploymentCanarySettingsProperty where
+  type PropertyType "PercentTraffic" DeploymentCanarySettingsProperty = Value Prelude.Double
+  set newValue DeploymentCanarySettingsProperty {..}
+    = DeploymentCanarySettingsProperty
+        {percentTraffic = Prelude.pure newValue, ..}
+instance Property "StageVariableOverrides" DeploymentCanarySettingsProperty where
+  type PropertyType "StageVariableOverrides" DeploymentCanarySettingsProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue DeploymentCanarySettingsProperty {..}
+    = DeploymentCanarySettingsProperty
+        {stageVariableOverrides = Prelude.pure newValue, ..}
+instance Property "UseStageCache" DeploymentCanarySettingsProperty where
+  type PropertyType "UseStageCache" DeploymentCanarySettingsProperty = Value Prelude.Bool
+  set newValue DeploymentCanarySettingsProperty {..}
+    = DeploymentCanarySettingsProperty
+        {useStageCache = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Deployment/DeploymentCanarySettingsProperty.hs-boot b/gen/Stratosphere/ApiGateway/Deployment/DeploymentCanarySettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/DeploymentCanarySettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Deployment.DeploymentCanarySettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeploymentCanarySettingsProperty :: Prelude.Type
+instance ToResourceProperties DeploymentCanarySettingsProperty
+instance Prelude.Eq DeploymentCanarySettingsProperty
+instance Prelude.Show DeploymentCanarySettingsProperty
+instance JSON.ToJSON DeploymentCanarySettingsProperty
diff --git a/gen/Stratosphere/ApiGateway/Deployment/MethodSettingProperty.hs b/gen/Stratosphere/ApiGateway/Deployment/MethodSettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/MethodSettingProperty.hs
@@ -0,0 +1,122 @@
+module Stratosphere.ApiGateway.Deployment.MethodSettingProperty (
+        MethodSettingProperty(..), mkMethodSettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MethodSettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html>
+    MethodSettingProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-cachedataencrypted>
+                           cacheDataEncrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-cachettlinseconds>
+                           cacheTtlInSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-cachingenabled>
+                           cachingEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-datatraceenabled>
+                           dataTraceEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-httpmethod>
+                           httpMethod :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-logginglevel>
+                           loggingLevel :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-metricsenabled>
+                           metricsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-resourcepath>
+                           resourcePath :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-throttlingburstlimit>
+                           throttlingBurstLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-methodsetting.html#cfn-apigateway-deployment-methodsetting-throttlingratelimit>
+                           throttlingRateLimit :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMethodSettingProperty :: MethodSettingProperty
+mkMethodSettingProperty
+  = MethodSettingProperty
+      {haddock_workaround_ = (), cacheDataEncrypted = Prelude.Nothing,
+       cacheTtlInSeconds = Prelude.Nothing,
+       cachingEnabled = Prelude.Nothing,
+       dataTraceEnabled = Prelude.Nothing, httpMethod = Prelude.Nothing,
+       loggingLevel = Prelude.Nothing, metricsEnabled = Prelude.Nothing,
+       resourcePath = Prelude.Nothing,
+       throttlingBurstLimit = Prelude.Nothing,
+       throttlingRateLimit = Prelude.Nothing}
+instance ToResourceProperties MethodSettingProperty where
+  toResourceProperties MethodSettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Deployment.MethodSetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CacheDataEncrypted" Prelude.<$> cacheDataEncrypted,
+                            (JSON..=) "CacheTtlInSeconds" Prelude.<$> cacheTtlInSeconds,
+                            (JSON..=) "CachingEnabled" Prelude.<$> cachingEnabled,
+                            (JSON..=) "DataTraceEnabled" Prelude.<$> dataTraceEnabled,
+                            (JSON..=) "HttpMethod" Prelude.<$> httpMethod,
+                            (JSON..=) "LoggingLevel" Prelude.<$> loggingLevel,
+                            (JSON..=) "MetricsEnabled" Prelude.<$> metricsEnabled,
+                            (JSON..=) "ResourcePath" Prelude.<$> resourcePath,
+                            (JSON..=) "ThrottlingBurstLimit" Prelude.<$> throttlingBurstLimit,
+                            (JSON..=) "ThrottlingRateLimit" Prelude.<$> throttlingRateLimit])}
+instance JSON.ToJSON MethodSettingProperty where
+  toJSON MethodSettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CacheDataEncrypted" Prelude.<$> cacheDataEncrypted,
+               (JSON..=) "CacheTtlInSeconds" Prelude.<$> cacheTtlInSeconds,
+               (JSON..=) "CachingEnabled" Prelude.<$> cachingEnabled,
+               (JSON..=) "DataTraceEnabled" Prelude.<$> dataTraceEnabled,
+               (JSON..=) "HttpMethod" Prelude.<$> httpMethod,
+               (JSON..=) "LoggingLevel" Prelude.<$> loggingLevel,
+               (JSON..=) "MetricsEnabled" Prelude.<$> metricsEnabled,
+               (JSON..=) "ResourcePath" Prelude.<$> resourcePath,
+               (JSON..=) "ThrottlingBurstLimit" Prelude.<$> throttlingBurstLimit,
+               (JSON..=) "ThrottlingRateLimit" Prelude.<$> throttlingRateLimit]))
+instance Property "CacheDataEncrypted" MethodSettingProperty where
+  type PropertyType "CacheDataEncrypted" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {cacheDataEncrypted = Prelude.pure newValue, ..}
+instance Property "CacheTtlInSeconds" MethodSettingProperty where
+  type PropertyType "CacheTtlInSeconds" MethodSettingProperty = Value Prelude.Integer
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {cacheTtlInSeconds = Prelude.pure newValue, ..}
+instance Property "CachingEnabled" MethodSettingProperty where
+  type PropertyType "CachingEnabled" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {cachingEnabled = Prelude.pure newValue, ..}
+instance Property "DataTraceEnabled" MethodSettingProperty where
+  type PropertyType "DataTraceEnabled" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {dataTraceEnabled = Prelude.pure newValue, ..}
+instance Property "HttpMethod" MethodSettingProperty where
+  type PropertyType "HttpMethod" MethodSettingProperty = Value Prelude.Text
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty {httpMethod = Prelude.pure newValue, ..}
+instance Property "LoggingLevel" MethodSettingProperty where
+  type PropertyType "LoggingLevel" MethodSettingProperty = Value Prelude.Text
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty {loggingLevel = Prelude.pure newValue, ..}
+instance Property "MetricsEnabled" MethodSettingProperty where
+  type PropertyType "MetricsEnabled" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {metricsEnabled = Prelude.pure newValue, ..}
+instance Property "ResourcePath" MethodSettingProperty where
+  type PropertyType "ResourcePath" MethodSettingProperty = Value Prelude.Text
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty {resourcePath = Prelude.pure newValue, ..}
+instance Property "ThrottlingBurstLimit" MethodSettingProperty where
+  type PropertyType "ThrottlingBurstLimit" MethodSettingProperty = Value Prelude.Integer
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {throttlingBurstLimit = Prelude.pure newValue, ..}
+instance Property "ThrottlingRateLimit" MethodSettingProperty where
+  type PropertyType "ThrottlingRateLimit" MethodSettingProperty = Value Prelude.Double
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {throttlingRateLimit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Deployment/MethodSettingProperty.hs-boot b/gen/Stratosphere/ApiGateway/Deployment/MethodSettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/MethodSettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Deployment.MethodSettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MethodSettingProperty :: Prelude.Type
+instance ToResourceProperties MethodSettingProperty
+instance Prelude.Eq MethodSettingProperty
+instance Prelude.Show MethodSettingProperty
+instance JSON.ToJSON MethodSettingProperty
diff --git a/gen/Stratosphere/ApiGateway/Deployment/StageDescriptionProperty.hs b/gen/Stratosphere/ApiGateway/Deployment/StageDescriptionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/StageDescriptionProperty.hs
@@ -0,0 +1,215 @@
+module Stratosphere.ApiGateway.Deployment.StageDescriptionProperty (
+        module Exports, StageDescriptionProperty(..),
+        mkStageDescriptionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.Deployment.AccessLogSettingProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.Deployment.CanarySettingProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.Deployment.MethodSettingProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data StageDescriptionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html>
+    StageDescriptionProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-accesslogsetting>
+                              accessLogSetting :: (Prelude.Maybe AccessLogSettingProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cacheclusterenabled>
+                              cacheClusterEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cacheclustersize>
+                              cacheClusterSize :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cachedataencrypted>
+                              cacheDataEncrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cachettlinseconds>
+                              cacheTtlInSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-cachingenabled>
+                              cachingEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-canarysetting>
+                              canarySetting :: (Prelude.Maybe CanarySettingProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-clientcertificateid>
+                              clientCertificateId :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-datatraceenabled>
+                              dataTraceEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-description>
+                              description :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-documentationversion>
+                              documentationVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-logginglevel>
+                              loggingLevel :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-methodsettings>
+                              methodSettings :: (Prelude.Maybe [MethodSettingProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-metricsenabled>
+                              metricsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-tags>
+                              tags :: (Prelude.Maybe [Tag]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-throttlingburstlimit>
+                              throttlingBurstLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-throttlingratelimit>
+                              throttlingRateLimit :: (Prelude.Maybe (Value Prelude.Double)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-tracingenabled>
+                              tracingEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-deployment-stagedescription.html#cfn-apigateway-deployment-stagedescription-variables>
+                              variables :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text)))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStageDescriptionProperty :: StageDescriptionProperty
+mkStageDescriptionProperty
+  = StageDescriptionProperty
+      {haddock_workaround_ = (), accessLogSetting = Prelude.Nothing,
+       cacheClusterEnabled = Prelude.Nothing,
+       cacheClusterSize = Prelude.Nothing,
+       cacheDataEncrypted = Prelude.Nothing,
+       cacheTtlInSeconds = Prelude.Nothing,
+       cachingEnabled = Prelude.Nothing, canarySetting = Prelude.Nothing,
+       clientCertificateId = Prelude.Nothing,
+       dataTraceEnabled = Prelude.Nothing, description = Prelude.Nothing,
+       documentationVersion = Prelude.Nothing,
+       loggingLevel = Prelude.Nothing, methodSettings = Prelude.Nothing,
+       metricsEnabled = Prelude.Nothing, tags = Prelude.Nothing,
+       throttlingBurstLimit = Prelude.Nothing,
+       throttlingRateLimit = Prelude.Nothing,
+       tracingEnabled = Prelude.Nothing, variables = Prelude.Nothing}
+instance ToResourceProperties StageDescriptionProperty where
+  toResourceProperties StageDescriptionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Deployment.StageDescription",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AccessLogSetting" Prelude.<$> accessLogSetting,
+                            (JSON..=) "CacheClusterEnabled" Prelude.<$> cacheClusterEnabled,
+                            (JSON..=) "CacheClusterSize" Prelude.<$> cacheClusterSize,
+                            (JSON..=) "CacheDataEncrypted" Prelude.<$> cacheDataEncrypted,
+                            (JSON..=) "CacheTtlInSeconds" Prelude.<$> cacheTtlInSeconds,
+                            (JSON..=) "CachingEnabled" Prelude.<$> cachingEnabled,
+                            (JSON..=) "CanarySetting" Prelude.<$> canarySetting,
+                            (JSON..=) "ClientCertificateId" Prelude.<$> clientCertificateId,
+                            (JSON..=) "DataTraceEnabled" Prelude.<$> dataTraceEnabled,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "DocumentationVersion" Prelude.<$> documentationVersion,
+                            (JSON..=) "LoggingLevel" Prelude.<$> loggingLevel,
+                            (JSON..=) "MethodSettings" Prelude.<$> methodSettings,
+                            (JSON..=) "MetricsEnabled" Prelude.<$> metricsEnabled,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "ThrottlingBurstLimit" Prelude.<$> throttlingBurstLimit,
+                            (JSON..=) "ThrottlingRateLimit" Prelude.<$> throttlingRateLimit,
+                            (JSON..=) "TracingEnabled" Prelude.<$> tracingEnabled,
+                            (JSON..=) "Variables" Prelude.<$> variables])}
+instance JSON.ToJSON StageDescriptionProperty where
+  toJSON StageDescriptionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AccessLogSetting" Prelude.<$> accessLogSetting,
+               (JSON..=) "CacheClusterEnabled" Prelude.<$> cacheClusterEnabled,
+               (JSON..=) "CacheClusterSize" Prelude.<$> cacheClusterSize,
+               (JSON..=) "CacheDataEncrypted" Prelude.<$> cacheDataEncrypted,
+               (JSON..=) "CacheTtlInSeconds" Prelude.<$> cacheTtlInSeconds,
+               (JSON..=) "CachingEnabled" Prelude.<$> cachingEnabled,
+               (JSON..=) "CanarySetting" Prelude.<$> canarySetting,
+               (JSON..=) "ClientCertificateId" Prelude.<$> clientCertificateId,
+               (JSON..=) "DataTraceEnabled" Prelude.<$> dataTraceEnabled,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "DocumentationVersion" Prelude.<$> documentationVersion,
+               (JSON..=) "LoggingLevel" Prelude.<$> loggingLevel,
+               (JSON..=) "MethodSettings" Prelude.<$> methodSettings,
+               (JSON..=) "MetricsEnabled" Prelude.<$> metricsEnabled,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "ThrottlingBurstLimit" Prelude.<$> throttlingBurstLimit,
+               (JSON..=) "ThrottlingRateLimit" Prelude.<$> throttlingRateLimit,
+               (JSON..=) "TracingEnabled" Prelude.<$> tracingEnabled,
+               (JSON..=) "Variables" Prelude.<$> variables]))
+instance Property "AccessLogSetting" StageDescriptionProperty where
+  type PropertyType "AccessLogSetting" StageDescriptionProperty = AccessLogSettingProperty
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {accessLogSetting = Prelude.pure newValue, ..}
+instance Property "CacheClusterEnabled" StageDescriptionProperty where
+  type PropertyType "CacheClusterEnabled" StageDescriptionProperty = Value Prelude.Bool
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {cacheClusterEnabled = Prelude.pure newValue, ..}
+instance Property "CacheClusterSize" StageDescriptionProperty where
+  type PropertyType "CacheClusterSize" StageDescriptionProperty = Value Prelude.Text
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {cacheClusterSize = Prelude.pure newValue, ..}
+instance Property "CacheDataEncrypted" StageDescriptionProperty where
+  type PropertyType "CacheDataEncrypted" StageDescriptionProperty = Value Prelude.Bool
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {cacheDataEncrypted = Prelude.pure newValue, ..}
+instance Property "CacheTtlInSeconds" StageDescriptionProperty where
+  type PropertyType "CacheTtlInSeconds" StageDescriptionProperty = Value Prelude.Integer
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {cacheTtlInSeconds = Prelude.pure newValue, ..}
+instance Property "CachingEnabled" StageDescriptionProperty where
+  type PropertyType "CachingEnabled" StageDescriptionProperty = Value Prelude.Bool
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {cachingEnabled = Prelude.pure newValue, ..}
+instance Property "CanarySetting" StageDescriptionProperty where
+  type PropertyType "CanarySetting" StageDescriptionProperty = CanarySettingProperty
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {canarySetting = Prelude.pure newValue, ..}
+instance Property "ClientCertificateId" StageDescriptionProperty where
+  type PropertyType "ClientCertificateId" StageDescriptionProperty = Value Prelude.Text
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {clientCertificateId = Prelude.pure newValue, ..}
+instance Property "DataTraceEnabled" StageDescriptionProperty where
+  type PropertyType "DataTraceEnabled" StageDescriptionProperty = Value Prelude.Bool
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {dataTraceEnabled = Prelude.pure newValue, ..}
+instance Property "Description" StageDescriptionProperty where
+  type PropertyType "Description" StageDescriptionProperty = Value Prelude.Text
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {description = Prelude.pure newValue, ..}
+instance Property "DocumentationVersion" StageDescriptionProperty where
+  type PropertyType "DocumentationVersion" StageDescriptionProperty = Value Prelude.Text
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {documentationVersion = Prelude.pure newValue, ..}
+instance Property "LoggingLevel" StageDescriptionProperty where
+  type PropertyType "LoggingLevel" StageDescriptionProperty = Value Prelude.Text
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {loggingLevel = Prelude.pure newValue, ..}
+instance Property "MethodSettings" StageDescriptionProperty where
+  type PropertyType "MethodSettings" StageDescriptionProperty = [MethodSettingProperty]
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {methodSettings = Prelude.pure newValue, ..}
+instance Property "MetricsEnabled" StageDescriptionProperty where
+  type PropertyType "MetricsEnabled" StageDescriptionProperty = Value Prelude.Bool
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {metricsEnabled = Prelude.pure newValue, ..}
+instance Property "Tags" StageDescriptionProperty where
+  type PropertyType "Tags" StageDescriptionProperty = [Tag]
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty {tags = Prelude.pure newValue, ..}
+instance Property "ThrottlingBurstLimit" StageDescriptionProperty where
+  type PropertyType "ThrottlingBurstLimit" StageDescriptionProperty = Value Prelude.Integer
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {throttlingBurstLimit = Prelude.pure newValue, ..}
+instance Property "ThrottlingRateLimit" StageDescriptionProperty where
+  type PropertyType "ThrottlingRateLimit" StageDescriptionProperty = Value Prelude.Double
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {throttlingRateLimit = Prelude.pure newValue, ..}
+instance Property "TracingEnabled" StageDescriptionProperty where
+  type PropertyType "TracingEnabled" StageDescriptionProperty = Value Prelude.Bool
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty
+        {tracingEnabled = Prelude.pure newValue, ..}
+instance Property "Variables" StageDescriptionProperty where
+  type PropertyType "Variables" StageDescriptionProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue StageDescriptionProperty {..}
+    = StageDescriptionProperty {variables = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Deployment/StageDescriptionProperty.hs-boot b/gen/Stratosphere/ApiGateway/Deployment/StageDescriptionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Deployment/StageDescriptionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Deployment.StageDescriptionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StageDescriptionProperty :: Prelude.Type
+instance ToResourceProperties StageDescriptionProperty
+instance Prelude.Eq StageDescriptionProperty
+instance Prelude.Show StageDescriptionProperty
+instance JSON.ToJSON StageDescriptionProperty
diff --git a/gen/Stratosphere/ApiGateway/DocumentationPart.hs b/gen/Stratosphere/ApiGateway/DocumentationPart.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DocumentationPart.hs
@@ -0,0 +1,50 @@
+module Stratosphere.ApiGateway.DocumentationPart (
+        module Exports, DocumentationPart(..), mkDocumentationPart
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.DocumentationPart.LocationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DocumentationPart
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationpart.html>
+    DocumentationPart {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationpart.html#cfn-apigateway-documentationpart-location>
+                       location :: LocationProperty,
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationpart.html#cfn-apigateway-documentationpart-properties>
+                       properties :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationpart.html#cfn-apigateway-documentationpart-restapiid>
+                       restApiId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentationPart ::
+  LocationProperty
+  -> Value Prelude.Text -> Value Prelude.Text -> DocumentationPart
+mkDocumentationPart location properties restApiId
+  = DocumentationPart
+      {haddock_workaround_ = (), location = location,
+       properties = properties, restApiId = restApiId}
+instance ToResourceProperties DocumentationPart where
+  toResourceProperties DocumentationPart {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DocumentationPart",
+         supportsTags = Prelude.False,
+         properties = ["Location" JSON..= location,
+                       "Properties" JSON..= properties, "RestApiId" JSON..= restApiId]}
+instance JSON.ToJSON DocumentationPart where
+  toJSON DocumentationPart {..}
+    = JSON.object
+        ["Location" JSON..= location, "Properties" JSON..= properties,
+         "RestApiId" JSON..= restApiId]
+instance Property "Location" DocumentationPart where
+  type PropertyType "Location" DocumentationPart = LocationProperty
+  set newValue DocumentationPart {..}
+    = DocumentationPart {location = newValue, ..}
+instance Property "Properties" DocumentationPart where
+  type PropertyType "Properties" DocumentationPart = Value Prelude.Text
+  set newValue DocumentationPart {..}
+    = DocumentationPart {properties = newValue, ..}
+instance Property "RestApiId" DocumentationPart where
+  type PropertyType "RestApiId" DocumentationPart = Value Prelude.Text
+  set newValue DocumentationPart {..}
+    = DocumentationPart {restApiId = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DocumentationPart/LocationProperty.hs b/gen/Stratosphere/ApiGateway/DocumentationPart/LocationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DocumentationPart/LocationProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.ApiGateway.DocumentationPart.LocationProperty (
+        LocationProperty(..), mkLocationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LocationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-documentationpart-location.html>
+    LocationProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-documentationpart-location.html#cfn-apigateway-documentationpart-location-method>
+                      method :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-documentationpart-location.html#cfn-apigateway-documentationpart-location-name>
+                      name :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-documentationpart-location.html#cfn-apigateway-documentationpart-location-path>
+                      path :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-documentationpart-location.html#cfn-apigateway-documentationpart-location-statuscode>
+                      statusCode :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-documentationpart-location.html#cfn-apigateway-documentationpart-location-type>
+                      type' :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationProperty :: LocationProperty
+mkLocationProperty
+  = LocationProperty
+      {haddock_workaround_ = (), method = Prelude.Nothing,
+       name = Prelude.Nothing, path = Prelude.Nothing,
+       statusCode = Prelude.Nothing, type' = Prelude.Nothing}
+instance ToResourceProperties LocationProperty where
+  toResourceProperties LocationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DocumentationPart.Location",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Method" Prelude.<$> method,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Path" Prelude.<$> path,
+                            (JSON..=) "StatusCode" Prelude.<$> statusCode,
+                            (JSON..=) "Type" Prelude.<$> type'])}
+instance JSON.ToJSON LocationProperty where
+  toJSON LocationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Method" Prelude.<$> method,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Path" Prelude.<$> path,
+               (JSON..=) "StatusCode" Prelude.<$> statusCode,
+               (JSON..=) "Type" Prelude.<$> type']))
+instance Property "Method" LocationProperty where
+  type PropertyType "Method" LocationProperty = Value Prelude.Text
+  set newValue LocationProperty {..}
+    = LocationProperty {method = Prelude.pure newValue, ..}
+instance Property "Name" LocationProperty where
+  type PropertyType "Name" LocationProperty = Value Prelude.Text
+  set newValue LocationProperty {..}
+    = LocationProperty {name = Prelude.pure newValue, ..}
+instance Property "Path" LocationProperty where
+  type PropertyType "Path" LocationProperty = Value Prelude.Text
+  set newValue LocationProperty {..}
+    = LocationProperty {path = Prelude.pure newValue, ..}
+instance Property "StatusCode" LocationProperty where
+  type PropertyType "StatusCode" LocationProperty = Value Prelude.Text
+  set newValue LocationProperty {..}
+    = LocationProperty {statusCode = Prelude.pure newValue, ..}
+instance Property "Type" LocationProperty where
+  type PropertyType "Type" LocationProperty = Value Prelude.Text
+  set newValue LocationProperty {..}
+    = LocationProperty {type' = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DocumentationPart/LocationProperty.hs-boot b/gen/Stratosphere/ApiGateway/DocumentationPart/LocationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DocumentationPart/LocationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.DocumentationPart.LocationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LocationProperty :: Prelude.Type
+instance ToResourceProperties LocationProperty
+instance Prelude.Eq LocationProperty
+instance Prelude.Show LocationProperty
+instance JSON.ToJSON LocationProperty
diff --git a/gen/Stratosphere/ApiGateway/DocumentationVersion.hs b/gen/Stratosphere/ApiGateway/DocumentationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DocumentationVersion.hs
@@ -0,0 +1,57 @@
+module Stratosphere.ApiGateway.DocumentationVersion (
+        DocumentationVersion(..), mkDocumentationVersion
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DocumentationVersion
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationversion.html>
+    DocumentationVersion {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationversion.html#cfn-apigateway-documentationversion-description>
+                          description :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationversion.html#cfn-apigateway-documentationversion-documentationversion>
+                          documentationVersion :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-documentationversion.html#cfn-apigateway-documentationversion-restapiid>
+                          restApiId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentationVersion ::
+  Value Prelude.Text -> Value Prelude.Text -> DocumentationVersion
+mkDocumentationVersion documentationVersion restApiId
+  = DocumentationVersion
+      {haddock_workaround_ = (),
+       documentationVersion = documentationVersion, restApiId = restApiId,
+       description = Prelude.Nothing}
+instance ToResourceProperties DocumentationVersion where
+  toResourceProperties DocumentationVersion {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DocumentationVersion",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DocumentationVersion" JSON..= documentationVersion,
+                            "RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON DocumentationVersion where
+  toJSON DocumentationVersion {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DocumentationVersion" JSON..= documentationVersion,
+               "RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "Description" DocumentationVersion where
+  type PropertyType "Description" DocumentationVersion = Value Prelude.Text
+  set newValue DocumentationVersion {..}
+    = DocumentationVersion {description = Prelude.pure newValue, ..}
+instance Property "DocumentationVersion" DocumentationVersion where
+  type PropertyType "DocumentationVersion" DocumentationVersion = Value Prelude.Text
+  set newValue DocumentationVersion {..}
+    = DocumentationVersion {documentationVersion = newValue, ..}
+instance Property "RestApiId" DocumentationVersion where
+  type PropertyType "RestApiId" DocumentationVersion = Value Prelude.Text
+  set newValue DocumentationVersion {..}
+    = DocumentationVersion {restApiId = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DomainName.hs b/gen/Stratosphere/ApiGateway/DomainName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainName.hs
@@ -0,0 +1,119 @@
+module Stratosphere.ApiGateway.DomainName (
+        module Exports, DomainName(..), mkDomainName
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.DomainName.EndpointConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.DomainName.MutualTlsAuthenticationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data DomainName
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html>
+    DomainName {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-certificatearn>
+                certificateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-domainname>
+                domainName :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-endpointconfiguration>
+                endpointConfiguration :: (Prelude.Maybe EndpointConfigurationProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-mutualtlsauthentication>
+                mutualTlsAuthentication :: (Prelude.Maybe MutualTlsAuthenticationProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-ownershipverificationcertificatearn>
+                ownershipVerificationCertificateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-regionalcertificatearn>
+                regionalCertificateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-routingmode>
+                routingMode :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-securitypolicy>
+                securityPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-tags>
+                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDomainName :: DomainName
+mkDomainName
+  = DomainName
+      {haddock_workaround_ = (), certificateArn = Prelude.Nothing,
+       domainName = Prelude.Nothing,
+       endpointConfiguration = Prelude.Nothing,
+       mutualTlsAuthentication = Prelude.Nothing,
+       ownershipVerificationCertificateArn = Prelude.Nothing,
+       regionalCertificateArn = Prelude.Nothing,
+       routingMode = Prelude.Nothing, securityPolicy = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties DomainName where
+  toResourceProperties DomainName {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DomainName",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CertificateArn" Prelude.<$> certificateArn,
+                            (JSON..=) "DomainName" Prelude.<$> domainName,
+                            (JSON..=) "EndpointConfiguration"
+                              Prelude.<$> endpointConfiguration,
+                            (JSON..=) "MutualTlsAuthentication"
+                              Prelude.<$> mutualTlsAuthentication,
+                            (JSON..=) "OwnershipVerificationCertificateArn"
+                              Prelude.<$> ownershipVerificationCertificateArn,
+                            (JSON..=) "RegionalCertificateArn"
+                              Prelude.<$> regionalCertificateArn,
+                            (JSON..=) "RoutingMode" Prelude.<$> routingMode,
+                            (JSON..=) "SecurityPolicy" Prelude.<$> securityPolicy,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON DomainName where
+  toJSON DomainName {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CertificateArn" Prelude.<$> certificateArn,
+               (JSON..=) "DomainName" Prelude.<$> domainName,
+               (JSON..=) "EndpointConfiguration"
+                 Prelude.<$> endpointConfiguration,
+               (JSON..=) "MutualTlsAuthentication"
+                 Prelude.<$> mutualTlsAuthentication,
+               (JSON..=) "OwnershipVerificationCertificateArn"
+                 Prelude.<$> ownershipVerificationCertificateArn,
+               (JSON..=) "RegionalCertificateArn"
+                 Prelude.<$> regionalCertificateArn,
+               (JSON..=) "RoutingMode" Prelude.<$> routingMode,
+               (JSON..=) "SecurityPolicy" Prelude.<$> securityPolicy,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "CertificateArn" DomainName where
+  type PropertyType "CertificateArn" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {certificateArn = Prelude.pure newValue, ..}
+instance Property "DomainName" DomainName where
+  type PropertyType "DomainName" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {domainName = Prelude.pure newValue, ..}
+instance Property "EndpointConfiguration" DomainName where
+  type PropertyType "EndpointConfiguration" DomainName = EndpointConfigurationProperty
+  set newValue DomainName {..}
+    = DomainName {endpointConfiguration = Prelude.pure newValue, ..}
+instance Property "MutualTlsAuthentication" DomainName where
+  type PropertyType "MutualTlsAuthentication" DomainName = MutualTlsAuthenticationProperty
+  set newValue DomainName {..}
+    = DomainName {mutualTlsAuthentication = Prelude.pure newValue, ..}
+instance Property "OwnershipVerificationCertificateArn" DomainName where
+  type PropertyType "OwnershipVerificationCertificateArn" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName
+        {ownershipVerificationCertificateArn = Prelude.pure newValue, ..}
+instance Property "RegionalCertificateArn" DomainName where
+  type PropertyType "RegionalCertificateArn" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {regionalCertificateArn = Prelude.pure newValue, ..}
+instance Property "RoutingMode" DomainName where
+  type PropertyType "RoutingMode" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {routingMode = Prelude.pure newValue, ..}
+instance Property "SecurityPolicy" DomainName where
+  type PropertyType "SecurityPolicy" DomainName = Value Prelude.Text
+  set newValue DomainName {..}
+    = DomainName {securityPolicy = Prelude.pure newValue, ..}
+instance Property "Tags" DomainName where
+  type PropertyType "Tags" DomainName = [Tag]
+  set newValue DomainName {..}
+    = DomainName {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DomainName/EndpointConfigurationProperty.hs b/gen/Stratosphere/ApiGateway/DomainName/EndpointConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainName/EndpointConfigurationProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ApiGateway.DomainName.EndpointConfigurationProperty (
+        EndpointConfigurationProperty(..), mkEndpointConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EndpointConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainname-endpointconfiguration.html>
+    EndpointConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainname-endpointconfiguration.html#cfn-apigateway-domainname-endpointconfiguration-ipaddresstype>
+                                   ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainname-endpointconfiguration.html#cfn-apigateway-domainname-endpointconfiguration-types>
+                                   types :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEndpointConfigurationProperty :: EndpointConfigurationProperty
+mkEndpointConfigurationProperty
+  = EndpointConfigurationProperty
+      {haddock_workaround_ = (), ipAddressType = Prelude.Nothing,
+       types = Prelude.Nothing}
+instance ToResourceProperties EndpointConfigurationProperty where
+  toResourceProperties EndpointConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DomainName.EndpointConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                            (JSON..=) "Types" Prelude.<$> types])}
+instance JSON.ToJSON EndpointConfigurationProperty where
+  toJSON EndpointConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+               (JSON..=) "Types" Prelude.<$> types]))
+instance Property "IpAddressType" EndpointConfigurationProperty where
+  type PropertyType "IpAddressType" EndpointConfigurationProperty = Value Prelude.Text
+  set newValue EndpointConfigurationProperty {..}
+    = EndpointConfigurationProperty
+        {ipAddressType = Prelude.pure newValue, ..}
+instance Property "Types" EndpointConfigurationProperty where
+  type PropertyType "Types" EndpointConfigurationProperty = ValueList Prelude.Text
+  set newValue EndpointConfigurationProperty {..}
+    = EndpointConfigurationProperty {types = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DomainName/EndpointConfigurationProperty.hs-boot b/gen/Stratosphere/ApiGateway/DomainName/EndpointConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainName/EndpointConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.DomainName.EndpointConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EndpointConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EndpointConfigurationProperty
+instance Prelude.Eq EndpointConfigurationProperty
+instance Prelude.Show EndpointConfigurationProperty
+instance JSON.ToJSON EndpointConfigurationProperty
diff --git a/gen/Stratosphere/ApiGateway/DomainName/MutualTlsAuthenticationProperty.hs b/gen/Stratosphere/ApiGateway/DomainName/MutualTlsAuthenticationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainName/MutualTlsAuthenticationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ApiGateway.DomainName.MutualTlsAuthenticationProperty (
+        MutualTlsAuthenticationProperty(..),
+        mkMutualTlsAuthenticationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MutualTlsAuthenticationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainname-mutualtlsauthentication.html>
+    MutualTlsAuthenticationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainname-mutualtlsauthentication.html#cfn-apigateway-domainname-mutualtlsauthentication-truststoreuri>
+                                     truststoreUri :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainname-mutualtlsauthentication.html#cfn-apigateway-domainname-mutualtlsauthentication-truststoreversion>
+                                     truststoreVersion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMutualTlsAuthenticationProperty ::
+  MutualTlsAuthenticationProperty
+mkMutualTlsAuthenticationProperty
+  = MutualTlsAuthenticationProperty
+      {haddock_workaround_ = (), truststoreUri = Prelude.Nothing,
+       truststoreVersion = Prelude.Nothing}
+instance ToResourceProperties MutualTlsAuthenticationProperty where
+  toResourceProperties MutualTlsAuthenticationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DomainName.MutualTlsAuthentication",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TruststoreUri" Prelude.<$> truststoreUri,
+                            (JSON..=) "TruststoreVersion" Prelude.<$> truststoreVersion])}
+instance JSON.ToJSON MutualTlsAuthenticationProperty where
+  toJSON MutualTlsAuthenticationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TruststoreUri" Prelude.<$> truststoreUri,
+               (JSON..=) "TruststoreVersion" Prelude.<$> truststoreVersion]))
+instance Property "TruststoreUri" MutualTlsAuthenticationProperty where
+  type PropertyType "TruststoreUri" MutualTlsAuthenticationProperty = Value Prelude.Text
+  set newValue MutualTlsAuthenticationProperty {..}
+    = MutualTlsAuthenticationProperty
+        {truststoreUri = Prelude.pure newValue, ..}
+instance Property "TruststoreVersion" MutualTlsAuthenticationProperty where
+  type PropertyType "TruststoreVersion" MutualTlsAuthenticationProperty = Value Prelude.Text
+  set newValue MutualTlsAuthenticationProperty {..}
+    = MutualTlsAuthenticationProperty
+        {truststoreVersion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DomainName/MutualTlsAuthenticationProperty.hs-boot b/gen/Stratosphere/ApiGateway/DomainName/MutualTlsAuthenticationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainName/MutualTlsAuthenticationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.DomainName.MutualTlsAuthenticationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MutualTlsAuthenticationProperty :: Prelude.Type
+instance ToResourceProperties MutualTlsAuthenticationProperty
+instance Prelude.Eq MutualTlsAuthenticationProperty
+instance Prelude.Show MutualTlsAuthenticationProperty
+instance JSON.ToJSON MutualTlsAuthenticationProperty
diff --git a/gen/Stratosphere/ApiGateway/DomainNameAccessAssociation.hs b/gen/Stratosphere/ApiGateway/DomainNameAccessAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainNameAccessAssociation.hs
@@ -0,0 +1,72 @@
+module Stratosphere.ApiGateway.DomainNameAccessAssociation (
+        DomainNameAccessAssociation(..), mkDomainNameAccessAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data DomainNameAccessAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnameaccessassociation.html>
+    DomainNameAccessAssociation {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnameaccessassociation.html#cfn-apigateway-domainnameaccessassociation-accessassociationsource>
+                                 accessAssociationSource :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnameaccessassociation.html#cfn-apigateway-domainnameaccessassociation-accessassociationsourcetype>
+                                 accessAssociationSourceType :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnameaccessassociation.html#cfn-apigateway-domainnameaccessassociation-domainnamearn>
+                                 domainNameArn :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnameaccessassociation.html#cfn-apigateway-domainnameaccessassociation-tags>
+                                 tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDomainNameAccessAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> DomainNameAccessAssociation
+mkDomainNameAccessAssociation
+  accessAssociationSource
+  accessAssociationSourceType
+  domainNameArn
+  = DomainNameAccessAssociation
+      {haddock_workaround_ = (),
+       accessAssociationSource = accessAssociationSource,
+       accessAssociationSourceType = accessAssociationSourceType,
+       domainNameArn = domainNameArn, tags = Prelude.Nothing}
+instance ToResourceProperties DomainNameAccessAssociation where
+  toResourceProperties DomainNameAccessAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DomainNameAccessAssociation",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AccessAssociationSource" JSON..= accessAssociationSource,
+                            "AccessAssociationSourceType" JSON..= accessAssociationSourceType,
+                            "DomainNameArn" JSON..= domainNameArn]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON DomainNameAccessAssociation where
+  toJSON DomainNameAccessAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AccessAssociationSource" JSON..= accessAssociationSource,
+               "AccessAssociationSourceType" JSON..= accessAssociationSourceType,
+               "DomainNameArn" JSON..= domainNameArn]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AccessAssociationSource" DomainNameAccessAssociation where
+  type PropertyType "AccessAssociationSource" DomainNameAccessAssociation = Value Prelude.Text
+  set newValue DomainNameAccessAssociation {..}
+    = DomainNameAccessAssociation
+        {accessAssociationSource = newValue, ..}
+instance Property "AccessAssociationSourceType" DomainNameAccessAssociation where
+  type PropertyType "AccessAssociationSourceType" DomainNameAccessAssociation = Value Prelude.Text
+  set newValue DomainNameAccessAssociation {..}
+    = DomainNameAccessAssociation
+        {accessAssociationSourceType = newValue, ..}
+instance Property "DomainNameArn" DomainNameAccessAssociation where
+  type PropertyType "DomainNameArn" DomainNameAccessAssociation = Value Prelude.Text
+  set newValue DomainNameAccessAssociation {..}
+    = DomainNameAccessAssociation {domainNameArn = newValue, ..}
+instance Property "Tags" DomainNameAccessAssociation where
+  type PropertyType "Tags" DomainNameAccessAssociation = [Tag]
+  set newValue DomainNameAccessAssociation {..}
+    = DomainNameAccessAssociation {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DomainNameV2.hs b/gen/Stratosphere/ApiGateway/DomainNameV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainNameV2.hs
@@ -0,0 +1,92 @@
+module Stratosphere.ApiGateway.DomainNameV2 (
+        module Exports, DomainNameV2(..), mkDomainNameV2
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.DomainNameV2.EndpointConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data DomainNameV2
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html>
+    DomainNameV2 {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html#cfn-apigateway-domainnamev2-certificatearn>
+                  certificateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html#cfn-apigateway-domainnamev2-domainname>
+                  domainName :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html#cfn-apigateway-domainnamev2-endpointconfiguration>
+                  endpointConfiguration :: (Prelude.Maybe EndpointConfigurationProperty),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html#cfn-apigateway-domainnamev2-policy>
+                  policy :: (Prelude.Maybe JSON.Object),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html#cfn-apigateway-domainnamev2-routingmode>
+                  routingMode :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html#cfn-apigateway-domainnamev2-securitypolicy>
+                  securityPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html#cfn-apigateway-domainnamev2-tags>
+                  tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDomainNameV2 :: DomainNameV2
+mkDomainNameV2
+  = DomainNameV2
+      {haddock_workaround_ = (), certificateArn = Prelude.Nothing,
+       domainName = Prelude.Nothing,
+       endpointConfiguration = Prelude.Nothing, policy = Prelude.Nothing,
+       routingMode = Prelude.Nothing, securityPolicy = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties DomainNameV2 where
+  toResourceProperties DomainNameV2 {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DomainNameV2",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CertificateArn" Prelude.<$> certificateArn,
+                            (JSON..=) "DomainName" Prelude.<$> domainName,
+                            (JSON..=) "EndpointConfiguration"
+                              Prelude.<$> endpointConfiguration,
+                            (JSON..=) "Policy" Prelude.<$> policy,
+                            (JSON..=) "RoutingMode" Prelude.<$> routingMode,
+                            (JSON..=) "SecurityPolicy" Prelude.<$> securityPolicy,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON DomainNameV2 where
+  toJSON DomainNameV2 {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CertificateArn" Prelude.<$> certificateArn,
+               (JSON..=) "DomainName" Prelude.<$> domainName,
+               (JSON..=) "EndpointConfiguration"
+                 Prelude.<$> endpointConfiguration,
+               (JSON..=) "Policy" Prelude.<$> policy,
+               (JSON..=) "RoutingMode" Prelude.<$> routingMode,
+               (JSON..=) "SecurityPolicy" Prelude.<$> securityPolicy,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "CertificateArn" DomainNameV2 where
+  type PropertyType "CertificateArn" DomainNameV2 = Value Prelude.Text
+  set newValue DomainNameV2 {..}
+    = DomainNameV2 {certificateArn = Prelude.pure newValue, ..}
+instance Property "DomainName" DomainNameV2 where
+  type PropertyType "DomainName" DomainNameV2 = Value Prelude.Text
+  set newValue DomainNameV2 {..}
+    = DomainNameV2 {domainName = Prelude.pure newValue, ..}
+instance Property "EndpointConfiguration" DomainNameV2 where
+  type PropertyType "EndpointConfiguration" DomainNameV2 = EndpointConfigurationProperty
+  set newValue DomainNameV2 {..}
+    = DomainNameV2 {endpointConfiguration = Prelude.pure newValue, ..}
+instance Property "Policy" DomainNameV2 where
+  type PropertyType "Policy" DomainNameV2 = JSON.Object
+  set newValue DomainNameV2 {..}
+    = DomainNameV2 {policy = Prelude.pure newValue, ..}
+instance Property "RoutingMode" DomainNameV2 where
+  type PropertyType "RoutingMode" DomainNameV2 = Value Prelude.Text
+  set newValue DomainNameV2 {..}
+    = DomainNameV2 {routingMode = Prelude.pure newValue, ..}
+instance Property "SecurityPolicy" DomainNameV2 where
+  type PropertyType "SecurityPolicy" DomainNameV2 = Value Prelude.Text
+  set newValue DomainNameV2 {..}
+    = DomainNameV2 {securityPolicy = Prelude.pure newValue, ..}
+instance Property "Tags" DomainNameV2 where
+  type PropertyType "Tags" DomainNameV2 = [Tag]
+  set newValue DomainNameV2 {..}
+    = DomainNameV2 {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DomainNameV2/EndpointConfigurationProperty.hs b/gen/Stratosphere/ApiGateway/DomainNameV2/EndpointConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainNameV2/EndpointConfigurationProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ApiGateway.DomainNameV2.EndpointConfigurationProperty (
+        EndpointConfigurationProperty(..), mkEndpointConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EndpointConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainnamev2-endpointconfiguration.html>
+    EndpointConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainnamev2-endpointconfiguration.html#cfn-apigateway-domainnamev2-endpointconfiguration-ipaddresstype>
+                                   ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainnamev2-endpointconfiguration.html#cfn-apigateway-domainnamev2-endpointconfiguration-types>
+                                   types :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEndpointConfigurationProperty :: EndpointConfigurationProperty
+mkEndpointConfigurationProperty
+  = EndpointConfigurationProperty
+      {haddock_workaround_ = (), ipAddressType = Prelude.Nothing,
+       types = Prelude.Nothing}
+instance ToResourceProperties EndpointConfigurationProperty where
+  toResourceProperties EndpointConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::DomainNameV2.EndpointConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                            (JSON..=) "Types" Prelude.<$> types])}
+instance JSON.ToJSON EndpointConfigurationProperty where
+  toJSON EndpointConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+               (JSON..=) "Types" Prelude.<$> types]))
+instance Property "IpAddressType" EndpointConfigurationProperty where
+  type PropertyType "IpAddressType" EndpointConfigurationProperty = Value Prelude.Text
+  set newValue EndpointConfigurationProperty {..}
+    = EndpointConfigurationProperty
+        {ipAddressType = Prelude.pure newValue, ..}
+instance Property "Types" EndpointConfigurationProperty where
+  type PropertyType "Types" EndpointConfigurationProperty = ValueList Prelude.Text
+  set newValue EndpointConfigurationProperty {..}
+    = EndpointConfigurationProperty {types = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/DomainNameV2/EndpointConfigurationProperty.hs-boot b/gen/Stratosphere/ApiGateway/DomainNameV2/EndpointConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/DomainNameV2/EndpointConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.DomainNameV2.EndpointConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EndpointConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EndpointConfigurationProperty
+instance Prelude.Eq EndpointConfigurationProperty
+instance Prelude.Show EndpointConfigurationProperty
+instance JSON.ToJSON EndpointConfigurationProperty
diff --git a/gen/Stratosphere/ApiGateway/GatewayResponse.hs b/gen/Stratosphere/ApiGateway/GatewayResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/GatewayResponse.hs
@@ -0,0 +1,73 @@
+module Stratosphere.ApiGateway.GatewayResponse (
+        GatewayResponse(..), mkGatewayResponse
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GatewayResponse
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-gatewayresponse.html>
+    GatewayResponse {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-gatewayresponse.html#cfn-apigateway-gatewayresponse-responseparameters>
+                     responseParameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-gatewayresponse.html#cfn-apigateway-gatewayresponse-responsetemplates>
+                     responseTemplates :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-gatewayresponse.html#cfn-apigateway-gatewayresponse-responsetype>
+                     responseType :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-gatewayresponse.html#cfn-apigateway-gatewayresponse-restapiid>
+                     restApiId :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-gatewayresponse.html#cfn-apigateway-gatewayresponse-statuscode>
+                     statusCode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGatewayResponse ::
+  Value Prelude.Text -> Value Prelude.Text -> GatewayResponse
+mkGatewayResponse responseType restApiId
+  = GatewayResponse
+      {haddock_workaround_ = (), responseType = responseType,
+       restApiId = restApiId, responseParameters = Prelude.Nothing,
+       responseTemplates = Prelude.Nothing, statusCode = Prelude.Nothing}
+instance ToResourceProperties GatewayResponse where
+  toResourceProperties GatewayResponse {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::GatewayResponse",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ResponseType" JSON..= responseType,
+                            "RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ResponseParameters" Prelude.<$> responseParameters,
+                               (JSON..=) "ResponseTemplates" Prelude.<$> responseTemplates,
+                               (JSON..=) "StatusCode" Prelude.<$> statusCode]))}
+instance JSON.ToJSON GatewayResponse where
+  toJSON GatewayResponse {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ResponseType" JSON..= responseType,
+               "RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ResponseParameters" Prelude.<$> responseParameters,
+                  (JSON..=) "ResponseTemplates" Prelude.<$> responseTemplates,
+                  (JSON..=) "StatusCode" Prelude.<$> statusCode])))
+instance Property "ResponseParameters" GatewayResponse where
+  type PropertyType "ResponseParameters" GatewayResponse = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue GatewayResponse {..}
+    = GatewayResponse {responseParameters = Prelude.pure newValue, ..}
+instance Property "ResponseTemplates" GatewayResponse where
+  type PropertyType "ResponseTemplates" GatewayResponse = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue GatewayResponse {..}
+    = GatewayResponse {responseTemplates = Prelude.pure newValue, ..}
+instance Property "ResponseType" GatewayResponse where
+  type PropertyType "ResponseType" GatewayResponse = Value Prelude.Text
+  set newValue GatewayResponse {..}
+    = GatewayResponse {responseType = newValue, ..}
+instance Property "RestApiId" GatewayResponse where
+  type PropertyType "RestApiId" GatewayResponse = Value Prelude.Text
+  set newValue GatewayResponse {..}
+    = GatewayResponse {restApiId = newValue, ..}
+instance Property "StatusCode" GatewayResponse where
+  type PropertyType "StatusCode" GatewayResponse = Value Prelude.Text
+  set newValue GatewayResponse {..}
+    = GatewayResponse {statusCode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Method.hs b/gen/Stratosphere/ApiGateway/Method.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Method.hs
@@ -0,0 +1,141 @@
+module Stratosphere.ApiGateway.Method (
+        module Exports, Method(..), mkMethod
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.Method.IntegrationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.Method.MethodResponseProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Method
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html>
+    Method {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-apikeyrequired>
+            apiKeyRequired :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-authorizationscopes>
+            authorizationScopes :: (Prelude.Maybe (ValueList Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-authorizationtype>
+            authorizationType :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-authorizerid>
+            authorizerId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-httpmethod>
+            httpMethod :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-integration>
+            integration :: (Prelude.Maybe IntegrationProperty),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-methodresponses>
+            methodResponses :: (Prelude.Maybe [MethodResponseProperty]),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-operationname>
+            operationName :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-requestmodels>
+            requestModels :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-requestparameters>
+            requestParameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-requestvalidatorid>
+            requestValidatorId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-resourceid>
+            resourceId :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-method.html#cfn-apigateway-method-restapiid>
+            restApiId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMethod ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> Method
+mkMethod httpMethod resourceId restApiId
+  = Method
+      {haddock_workaround_ = (), httpMethod = httpMethod,
+       resourceId = resourceId, restApiId = restApiId,
+       apiKeyRequired = Prelude.Nothing,
+       authorizationScopes = Prelude.Nothing,
+       authorizationType = Prelude.Nothing,
+       authorizerId = Prelude.Nothing, integration = Prelude.Nothing,
+       methodResponses = Prelude.Nothing, operationName = Prelude.Nothing,
+       requestModels = Prelude.Nothing,
+       requestParameters = Prelude.Nothing,
+       requestValidatorId = Prelude.Nothing}
+instance ToResourceProperties Method where
+  toResourceProperties Method {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Method", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["HttpMethod" JSON..= httpMethod, "ResourceId" JSON..= resourceId,
+                            "RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ApiKeyRequired" Prelude.<$> apiKeyRequired,
+                               (JSON..=) "AuthorizationScopes" Prelude.<$> authorizationScopes,
+                               (JSON..=) "AuthorizationType" Prelude.<$> authorizationType,
+                               (JSON..=) "AuthorizerId" Prelude.<$> authorizerId,
+                               (JSON..=) "Integration" Prelude.<$> integration,
+                               (JSON..=) "MethodResponses" Prelude.<$> methodResponses,
+                               (JSON..=) "OperationName" Prelude.<$> operationName,
+                               (JSON..=) "RequestModels" Prelude.<$> requestModels,
+                               (JSON..=) "RequestParameters" Prelude.<$> requestParameters,
+                               (JSON..=) "RequestValidatorId" Prelude.<$> requestValidatorId]))}
+instance JSON.ToJSON Method where
+  toJSON Method {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["HttpMethod" JSON..= httpMethod, "ResourceId" JSON..= resourceId,
+               "RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ApiKeyRequired" Prelude.<$> apiKeyRequired,
+                  (JSON..=) "AuthorizationScopes" Prelude.<$> authorizationScopes,
+                  (JSON..=) "AuthorizationType" Prelude.<$> authorizationType,
+                  (JSON..=) "AuthorizerId" Prelude.<$> authorizerId,
+                  (JSON..=) "Integration" Prelude.<$> integration,
+                  (JSON..=) "MethodResponses" Prelude.<$> methodResponses,
+                  (JSON..=) "OperationName" Prelude.<$> operationName,
+                  (JSON..=) "RequestModels" Prelude.<$> requestModels,
+                  (JSON..=) "RequestParameters" Prelude.<$> requestParameters,
+                  (JSON..=) "RequestValidatorId" Prelude.<$> requestValidatorId])))
+instance Property "ApiKeyRequired" Method where
+  type PropertyType "ApiKeyRequired" Method = Value Prelude.Bool
+  set newValue Method {..}
+    = Method {apiKeyRequired = Prelude.pure newValue, ..}
+instance Property "AuthorizationScopes" Method where
+  type PropertyType "AuthorizationScopes" Method = ValueList Prelude.Text
+  set newValue Method {..}
+    = Method {authorizationScopes = Prelude.pure newValue, ..}
+instance Property "AuthorizationType" Method where
+  type PropertyType "AuthorizationType" Method = Value Prelude.Text
+  set newValue Method {..}
+    = Method {authorizationType = Prelude.pure newValue, ..}
+instance Property "AuthorizerId" Method where
+  type PropertyType "AuthorizerId" Method = Value Prelude.Text
+  set newValue Method {..}
+    = Method {authorizerId = Prelude.pure newValue, ..}
+instance Property "HttpMethod" Method where
+  type PropertyType "HttpMethod" Method = Value Prelude.Text
+  set newValue Method {..} = Method {httpMethod = newValue, ..}
+instance Property "Integration" Method where
+  type PropertyType "Integration" Method = IntegrationProperty
+  set newValue Method {..}
+    = Method {integration = Prelude.pure newValue, ..}
+instance Property "MethodResponses" Method where
+  type PropertyType "MethodResponses" Method = [MethodResponseProperty]
+  set newValue Method {..}
+    = Method {methodResponses = Prelude.pure newValue, ..}
+instance Property "OperationName" Method where
+  type PropertyType "OperationName" Method = Value Prelude.Text
+  set newValue Method {..}
+    = Method {operationName = Prelude.pure newValue, ..}
+instance Property "RequestModels" Method where
+  type PropertyType "RequestModels" Method = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue Method {..}
+    = Method {requestModels = Prelude.pure newValue, ..}
+instance Property "RequestParameters" Method where
+  type PropertyType "RequestParameters" Method = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue Method {..}
+    = Method {requestParameters = Prelude.pure newValue, ..}
+instance Property "RequestValidatorId" Method where
+  type PropertyType "RequestValidatorId" Method = Value Prelude.Text
+  set newValue Method {..}
+    = Method {requestValidatorId = Prelude.pure newValue, ..}
+instance Property "ResourceId" Method where
+  type PropertyType "ResourceId" Method = Value Prelude.Text
+  set newValue Method {..} = Method {resourceId = newValue, ..}
+instance Property "RestApiId" Method where
+  type PropertyType "RestApiId" Method = Value Prelude.Text
+  set newValue Method {..} = Method {restApiId = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Method/IntegrationProperty.hs b/gen/Stratosphere/ApiGateway/Method/IntegrationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Method/IntegrationProperty.hs
@@ -0,0 +1,161 @@
+module Stratosphere.ApiGateway.Method.IntegrationProperty (
+        module Exports, IntegrationProperty(..), mkIntegrationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.Method.IntegrationResponseProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IntegrationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html>
+    IntegrationProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-cachekeyparameters>
+                         cacheKeyParameters :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-cachenamespace>
+                         cacheNamespace :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-connectionid>
+                         connectionId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-connectiontype>
+                         connectionType :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-contenthandling>
+                         contentHandling :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-credentials>
+                         credentials :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-integrationhttpmethod>
+                         integrationHttpMethod :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-integrationresponses>
+                         integrationResponses :: (Prelude.Maybe [IntegrationResponseProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-passthroughbehavior>
+                         passthroughBehavior :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-requestparameters>
+                         requestParameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-requesttemplates>
+                         requestTemplates :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-timeoutinmillis>
+                         timeoutInMillis :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-type>
+                         type' :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html#cfn-apigateway-method-integration-uri>
+                         uri :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIntegrationProperty :: Value Prelude.Text -> IntegrationProperty
+mkIntegrationProperty type'
+  = IntegrationProperty
+      {haddock_workaround_ = (), type' = type',
+       cacheKeyParameters = Prelude.Nothing,
+       cacheNamespace = Prelude.Nothing, connectionId = Prelude.Nothing,
+       connectionType = Prelude.Nothing,
+       contentHandling = Prelude.Nothing, credentials = Prelude.Nothing,
+       integrationHttpMethod = Prelude.Nothing,
+       integrationResponses = Prelude.Nothing,
+       passthroughBehavior = Prelude.Nothing,
+       requestParameters = Prelude.Nothing,
+       requestTemplates = Prelude.Nothing,
+       timeoutInMillis = Prelude.Nothing, uri = Prelude.Nothing}
+instance ToResourceProperties IntegrationProperty where
+  toResourceProperties IntegrationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Method.Integration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "CacheKeyParameters" Prelude.<$> cacheKeyParameters,
+                               (JSON..=) "CacheNamespace" Prelude.<$> cacheNamespace,
+                               (JSON..=) "ConnectionId" Prelude.<$> connectionId,
+                               (JSON..=) "ConnectionType" Prelude.<$> connectionType,
+                               (JSON..=) "ContentHandling" Prelude.<$> contentHandling,
+                               (JSON..=) "Credentials" Prelude.<$> credentials,
+                               (JSON..=) "IntegrationHttpMethod"
+                                 Prelude.<$> integrationHttpMethod,
+                               (JSON..=) "IntegrationResponses" Prelude.<$> integrationResponses,
+                               (JSON..=) "PassthroughBehavior" Prelude.<$> passthroughBehavior,
+                               (JSON..=) "RequestParameters" Prelude.<$> requestParameters,
+                               (JSON..=) "RequestTemplates" Prelude.<$> requestTemplates,
+                               (JSON..=) "TimeoutInMillis" Prelude.<$> timeoutInMillis,
+                               (JSON..=) "Uri" Prelude.<$> uri]))}
+instance JSON.ToJSON IntegrationProperty where
+  toJSON IntegrationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "CacheKeyParameters" Prelude.<$> cacheKeyParameters,
+                  (JSON..=) "CacheNamespace" Prelude.<$> cacheNamespace,
+                  (JSON..=) "ConnectionId" Prelude.<$> connectionId,
+                  (JSON..=) "ConnectionType" Prelude.<$> connectionType,
+                  (JSON..=) "ContentHandling" Prelude.<$> contentHandling,
+                  (JSON..=) "Credentials" Prelude.<$> credentials,
+                  (JSON..=) "IntegrationHttpMethod"
+                    Prelude.<$> integrationHttpMethod,
+                  (JSON..=) "IntegrationResponses" Prelude.<$> integrationResponses,
+                  (JSON..=) "PassthroughBehavior" Prelude.<$> passthroughBehavior,
+                  (JSON..=) "RequestParameters" Prelude.<$> requestParameters,
+                  (JSON..=) "RequestTemplates" Prelude.<$> requestTemplates,
+                  (JSON..=) "TimeoutInMillis" Prelude.<$> timeoutInMillis,
+                  (JSON..=) "Uri" Prelude.<$> uri])))
+instance Property "CacheKeyParameters" IntegrationProperty where
+  type PropertyType "CacheKeyParameters" IntegrationProperty = ValueList Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty
+        {cacheKeyParameters = Prelude.pure newValue, ..}
+instance Property "CacheNamespace" IntegrationProperty where
+  type PropertyType "CacheNamespace" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {cacheNamespace = Prelude.pure newValue, ..}
+instance Property "ConnectionId" IntegrationProperty where
+  type PropertyType "ConnectionId" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {connectionId = Prelude.pure newValue, ..}
+instance Property "ConnectionType" IntegrationProperty where
+  type PropertyType "ConnectionType" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {connectionType = Prelude.pure newValue, ..}
+instance Property "ContentHandling" IntegrationProperty where
+  type PropertyType "ContentHandling" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {contentHandling = Prelude.pure newValue, ..}
+instance Property "Credentials" IntegrationProperty where
+  type PropertyType "Credentials" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {credentials = Prelude.pure newValue, ..}
+instance Property "IntegrationHttpMethod" IntegrationProperty where
+  type PropertyType "IntegrationHttpMethod" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty
+        {integrationHttpMethod = Prelude.pure newValue, ..}
+instance Property "IntegrationResponses" IntegrationProperty where
+  type PropertyType "IntegrationResponses" IntegrationProperty = [IntegrationResponseProperty]
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty
+        {integrationResponses = Prelude.pure newValue, ..}
+instance Property "PassthroughBehavior" IntegrationProperty where
+  type PropertyType "PassthroughBehavior" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty
+        {passthroughBehavior = Prelude.pure newValue, ..}
+instance Property "RequestParameters" IntegrationProperty where
+  type PropertyType "RequestParameters" IntegrationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty
+        {requestParameters = Prelude.pure newValue, ..}
+instance Property "RequestTemplates" IntegrationProperty where
+  type PropertyType "RequestTemplates" IntegrationProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty
+        {requestTemplates = Prelude.pure newValue, ..}
+instance Property "TimeoutInMillis" IntegrationProperty where
+  type PropertyType "TimeoutInMillis" IntegrationProperty = Value Prelude.Integer
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {timeoutInMillis = Prelude.pure newValue, ..}
+instance Property "Type" IntegrationProperty where
+  type PropertyType "Type" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {type' = newValue, ..}
+instance Property "Uri" IntegrationProperty where
+  type PropertyType "Uri" IntegrationProperty = Value Prelude.Text
+  set newValue IntegrationProperty {..}
+    = IntegrationProperty {uri = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Method/IntegrationProperty.hs-boot b/gen/Stratosphere/ApiGateway/Method/IntegrationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Method/IntegrationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Method.IntegrationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IntegrationProperty :: Prelude.Type
+instance ToResourceProperties IntegrationProperty
+instance Prelude.Eq IntegrationProperty
+instance Prelude.Show IntegrationProperty
+instance JSON.ToJSON IntegrationProperty
diff --git a/gen/Stratosphere/ApiGateway/Method/IntegrationResponseProperty.hs b/gen/Stratosphere/ApiGateway/Method/IntegrationResponseProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Method/IntegrationResponseProperty.hs
@@ -0,0 +1,79 @@
+module Stratosphere.ApiGateway.Method.IntegrationResponseProperty (
+        IntegrationResponseProperty(..), mkIntegrationResponseProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IntegrationResponseProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integrationresponse.html>
+    IntegrationResponseProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integrationresponse.html#cfn-apigateway-method-integrationresponse-contenthandling>
+                                 contentHandling :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integrationresponse.html#cfn-apigateway-method-integrationresponse-responseparameters>
+                                 responseParameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integrationresponse.html#cfn-apigateway-method-integrationresponse-responsetemplates>
+                                 responseTemplates :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integrationresponse.html#cfn-apigateway-method-integrationresponse-selectionpattern>
+                                 selectionPattern :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integrationresponse.html#cfn-apigateway-method-integrationresponse-statuscode>
+                                 statusCode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIntegrationResponseProperty ::
+  Value Prelude.Text -> IntegrationResponseProperty
+mkIntegrationResponseProperty statusCode
+  = IntegrationResponseProperty
+      {haddock_workaround_ = (), statusCode = statusCode,
+       contentHandling = Prelude.Nothing,
+       responseParameters = Prelude.Nothing,
+       responseTemplates = Prelude.Nothing,
+       selectionPattern = Prelude.Nothing}
+instance ToResourceProperties IntegrationResponseProperty where
+  toResourceProperties IntegrationResponseProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Method.IntegrationResponse",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StatusCode" JSON..= statusCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContentHandling" Prelude.<$> contentHandling,
+                               (JSON..=) "ResponseParameters" Prelude.<$> responseParameters,
+                               (JSON..=) "ResponseTemplates" Prelude.<$> responseTemplates,
+                               (JSON..=) "SelectionPattern" Prelude.<$> selectionPattern]))}
+instance JSON.ToJSON IntegrationResponseProperty where
+  toJSON IntegrationResponseProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StatusCode" JSON..= statusCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContentHandling" Prelude.<$> contentHandling,
+                  (JSON..=) "ResponseParameters" Prelude.<$> responseParameters,
+                  (JSON..=) "ResponseTemplates" Prelude.<$> responseTemplates,
+                  (JSON..=) "SelectionPattern" Prelude.<$> selectionPattern])))
+instance Property "ContentHandling" IntegrationResponseProperty where
+  type PropertyType "ContentHandling" IntegrationResponseProperty = Value Prelude.Text
+  set newValue IntegrationResponseProperty {..}
+    = IntegrationResponseProperty
+        {contentHandling = Prelude.pure newValue, ..}
+instance Property "ResponseParameters" IntegrationResponseProperty where
+  type PropertyType "ResponseParameters" IntegrationResponseProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue IntegrationResponseProperty {..}
+    = IntegrationResponseProperty
+        {responseParameters = Prelude.pure newValue, ..}
+instance Property "ResponseTemplates" IntegrationResponseProperty where
+  type PropertyType "ResponseTemplates" IntegrationResponseProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue IntegrationResponseProperty {..}
+    = IntegrationResponseProperty
+        {responseTemplates = Prelude.pure newValue, ..}
+instance Property "SelectionPattern" IntegrationResponseProperty where
+  type PropertyType "SelectionPattern" IntegrationResponseProperty = Value Prelude.Text
+  set newValue IntegrationResponseProperty {..}
+    = IntegrationResponseProperty
+        {selectionPattern = Prelude.pure newValue, ..}
+instance Property "StatusCode" IntegrationResponseProperty where
+  type PropertyType "StatusCode" IntegrationResponseProperty = Value Prelude.Text
+  set newValue IntegrationResponseProperty {..}
+    = IntegrationResponseProperty {statusCode = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Method/IntegrationResponseProperty.hs-boot b/gen/Stratosphere/ApiGateway/Method/IntegrationResponseProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Method/IntegrationResponseProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Method.IntegrationResponseProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IntegrationResponseProperty :: Prelude.Type
+instance ToResourceProperties IntegrationResponseProperty
+instance Prelude.Eq IntegrationResponseProperty
+instance Prelude.Show IntegrationResponseProperty
+instance JSON.ToJSON IntegrationResponseProperty
diff --git a/gen/Stratosphere/ApiGateway/Method/MethodResponseProperty.hs b/gen/Stratosphere/ApiGateway/Method/MethodResponseProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Method/MethodResponseProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.ApiGateway.Method.MethodResponseProperty (
+        MethodResponseProperty(..), mkMethodResponseProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MethodResponseProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-methodresponse.html>
+    MethodResponseProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-methodresponse.html#cfn-apigateway-method-methodresponse-responsemodels>
+                            responseModels :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-methodresponse.html#cfn-apigateway-method-methodresponse-responseparameters>
+                            responseParameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-methodresponse.html#cfn-apigateway-method-methodresponse-statuscode>
+                            statusCode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMethodResponseProperty ::
+  Value Prelude.Text -> MethodResponseProperty
+mkMethodResponseProperty statusCode
+  = MethodResponseProperty
+      {haddock_workaround_ = (), statusCode = statusCode,
+       responseModels = Prelude.Nothing,
+       responseParameters = Prelude.Nothing}
+instance ToResourceProperties MethodResponseProperty where
+  toResourceProperties MethodResponseProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Method.MethodResponse",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["StatusCode" JSON..= statusCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ResponseModels" Prelude.<$> responseModels,
+                               (JSON..=) "ResponseParameters" Prelude.<$> responseParameters]))}
+instance JSON.ToJSON MethodResponseProperty where
+  toJSON MethodResponseProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["StatusCode" JSON..= statusCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "ResponseModels" Prelude.<$> responseModels,
+                  (JSON..=) "ResponseParameters" Prelude.<$> responseParameters])))
+instance Property "ResponseModels" MethodResponseProperty where
+  type PropertyType "ResponseModels" MethodResponseProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue MethodResponseProperty {..}
+    = MethodResponseProperty
+        {responseModels = Prelude.pure newValue, ..}
+instance Property "ResponseParameters" MethodResponseProperty where
+  type PropertyType "ResponseParameters" MethodResponseProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue MethodResponseProperty {..}
+    = MethodResponseProperty
+        {responseParameters = Prelude.pure newValue, ..}
+instance Property "StatusCode" MethodResponseProperty where
+  type PropertyType "StatusCode" MethodResponseProperty = Value Prelude.Text
+  set newValue MethodResponseProperty {..}
+    = MethodResponseProperty {statusCode = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Method/MethodResponseProperty.hs-boot b/gen/Stratosphere/ApiGateway/Method/MethodResponseProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Method/MethodResponseProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Method.MethodResponseProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MethodResponseProperty :: Prelude.Type
+instance ToResourceProperties MethodResponseProperty
+instance Prelude.Eq MethodResponseProperty
+instance Prelude.Show MethodResponseProperty
+instance JSON.ToJSON MethodResponseProperty
diff --git a/gen/Stratosphere/ApiGateway/Model.hs b/gen/Stratosphere/ApiGateway/Model.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Model.hs
@@ -0,0 +1,69 @@
+module Stratosphere.ApiGateway.Model (
+        Model(..), mkModel
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Model
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html>
+    Model {haddock_workaround_ :: (),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-contenttype>
+           contentType :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-description>
+           description :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-name>
+           name :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-restapiid>
+           restApiId :: (Value Prelude.Text),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-model.html#cfn-apigateway-model-schema>
+           schema :: (Prelude.Maybe JSON.Object)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkModel :: Value Prelude.Text -> Model
+mkModel restApiId
+  = Model
+      {haddock_workaround_ = (), restApiId = restApiId,
+       contentType = Prelude.Nothing, description = Prelude.Nothing,
+       name = Prelude.Nothing, schema = Prelude.Nothing}
+instance ToResourceProperties Model where
+  toResourceProperties Model {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Model", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContentType" Prelude.<$> contentType,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Name" Prelude.<$> name,
+                               (JSON..=) "Schema" Prelude.<$> schema]))}
+instance JSON.ToJSON Model where
+  toJSON Model {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContentType" Prelude.<$> contentType,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Name" Prelude.<$> name,
+                  (JSON..=) "Schema" Prelude.<$> schema])))
+instance Property "ContentType" Model where
+  type PropertyType "ContentType" Model = Value Prelude.Text
+  set newValue Model {..}
+    = Model {contentType = Prelude.pure newValue, ..}
+instance Property "Description" Model where
+  type PropertyType "Description" Model = Value Prelude.Text
+  set newValue Model {..}
+    = Model {description = Prelude.pure newValue, ..}
+instance Property "Name" Model where
+  type PropertyType "Name" Model = Value Prelude.Text
+  set newValue Model {..} = Model {name = Prelude.pure newValue, ..}
+instance Property "RestApiId" Model where
+  type PropertyType "RestApiId" Model = Value Prelude.Text
+  set newValue Model {..} = Model {restApiId = newValue, ..}
+instance Property "Schema" Model where
+  type PropertyType "Schema" Model = JSON.Object
+  set newValue Model {..}
+    = Model {schema = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/RequestValidator.hs b/gen/Stratosphere/ApiGateway/RequestValidator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/RequestValidator.hs
@@ -0,0 +1,68 @@
+module Stratosphere.ApiGateway.RequestValidator (
+        RequestValidator(..), mkRequestValidator
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RequestValidator
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-requestvalidator.html>
+    RequestValidator {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-requestvalidator.html#cfn-apigateway-requestvalidator-name>
+                      name :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-requestvalidator.html#cfn-apigateway-requestvalidator-restapiid>
+                      restApiId :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-requestvalidator.html#cfn-apigateway-requestvalidator-validaterequestbody>
+                      validateRequestBody :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-requestvalidator.html#cfn-apigateway-requestvalidator-validaterequestparameters>
+                      validateRequestParameters :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRequestValidator :: Value Prelude.Text -> RequestValidator
+mkRequestValidator restApiId
+  = RequestValidator
+      {haddock_workaround_ = (), restApiId = restApiId,
+       name = Prelude.Nothing, validateRequestBody = Prelude.Nothing,
+       validateRequestParameters = Prelude.Nothing}
+instance ToResourceProperties RequestValidator where
+  toResourceProperties RequestValidator {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::RequestValidator",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Name" Prelude.<$> name,
+                               (JSON..=) "ValidateRequestBody" Prelude.<$> validateRequestBody,
+                               (JSON..=) "ValidateRequestParameters"
+                                 Prelude.<$> validateRequestParameters]))}
+instance JSON.ToJSON RequestValidator where
+  toJSON RequestValidator {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Name" Prelude.<$> name,
+                  (JSON..=) "ValidateRequestBody" Prelude.<$> validateRequestBody,
+                  (JSON..=) "ValidateRequestParameters"
+                    Prelude.<$> validateRequestParameters])))
+instance Property "Name" RequestValidator where
+  type PropertyType "Name" RequestValidator = Value Prelude.Text
+  set newValue RequestValidator {..}
+    = RequestValidator {name = Prelude.pure newValue, ..}
+instance Property "RestApiId" RequestValidator where
+  type PropertyType "RestApiId" RequestValidator = Value Prelude.Text
+  set newValue RequestValidator {..}
+    = RequestValidator {restApiId = newValue, ..}
+instance Property "ValidateRequestBody" RequestValidator where
+  type PropertyType "ValidateRequestBody" RequestValidator = Value Prelude.Bool
+  set newValue RequestValidator {..}
+    = RequestValidator
+        {validateRequestBody = Prelude.pure newValue, ..}
+instance Property "ValidateRequestParameters" RequestValidator where
+  type PropertyType "ValidateRequestParameters" RequestValidator = Value Prelude.Bool
+  set newValue RequestValidator {..}
+    = RequestValidator
+        {validateRequestParameters = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Resource.hs b/gen/Stratosphere/ApiGateway/Resource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Resource.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ApiGateway.Resource (
+        Resource(..), mkResource
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Resource
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html>
+    Resource {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html#cfn-apigateway-resource-parentid>
+              parentId :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html#cfn-apigateway-resource-pathpart>
+              pathPart :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-resource.html#cfn-apigateway-resource-restapiid>
+              restApiId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResource ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> Resource
+mkResource parentId pathPart restApiId
+  = Resource
+      {haddock_workaround_ = (), parentId = parentId,
+       pathPart = pathPart, restApiId = restApiId}
+instance ToResourceProperties Resource where
+  toResourceProperties Resource {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Resource",
+         supportsTags = Prelude.False,
+         properties = ["ParentId" JSON..= parentId,
+                       "PathPart" JSON..= pathPart, "RestApiId" JSON..= restApiId]}
+instance JSON.ToJSON Resource where
+  toJSON Resource {..}
+    = JSON.object
+        ["ParentId" JSON..= parentId, "PathPart" JSON..= pathPart,
+         "RestApiId" JSON..= restApiId]
+instance Property "ParentId" Resource where
+  type PropertyType "ParentId" Resource = Value Prelude.Text
+  set newValue Resource {..} = Resource {parentId = newValue, ..}
+instance Property "PathPart" Resource where
+  type PropertyType "PathPart" Resource = Value Prelude.Text
+  set newValue Resource {..} = Resource {pathPart = newValue, ..}
+instance Property "RestApiId" Resource where
+  type PropertyType "RestApiId" Resource = Value Prelude.Text
+  set newValue Resource {..} = Resource {restApiId = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/RestApi.hs b/gen/Stratosphere/ApiGateway/RestApi.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/RestApi.hs
@@ -0,0 +1,165 @@
+module Stratosphere.ApiGateway.RestApi (
+        module Exports, RestApi(..), mkRestApi
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.RestApi.EndpointConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.RestApi.S3LocationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data RestApi
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html>
+    RestApi {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-apikeysourcetype>
+             apiKeySourceType :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-binarymediatypes>
+             binaryMediaTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body>
+             body :: (Prelude.Maybe JSON.Object),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-bodys3location>
+             bodyS3Location :: (Prelude.Maybe S3LocationProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-clonefrom>
+             cloneFrom :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-description>
+             description :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-disableexecuteapiendpoint>
+             disableExecuteApiEndpoint :: (Prelude.Maybe (Value Prelude.Bool)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-endpointconfiguration>
+             endpointConfiguration :: (Prelude.Maybe EndpointConfigurationProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-failonwarnings>
+             failOnWarnings :: (Prelude.Maybe (Value Prelude.Bool)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-minimumcompressionsize>
+             minimumCompressionSize :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-mode>
+             mode :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-name>
+             name :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-parameters>
+             parameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-policy>
+             policy :: (Prelude.Maybe JSON.Object),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-tags>
+             tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestApi :: RestApi
+mkRestApi
+  = RestApi
+      {haddock_workaround_ = (), apiKeySourceType = Prelude.Nothing,
+       binaryMediaTypes = Prelude.Nothing, body = Prelude.Nothing,
+       bodyS3Location = Prelude.Nothing, cloneFrom = Prelude.Nothing,
+       description = Prelude.Nothing,
+       disableExecuteApiEndpoint = Prelude.Nothing,
+       endpointConfiguration = Prelude.Nothing,
+       failOnWarnings = Prelude.Nothing,
+       minimumCompressionSize = Prelude.Nothing, mode = Prelude.Nothing,
+       name = Prelude.Nothing, parameters = Prelude.Nothing,
+       policy = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties RestApi where
+  toResourceProperties RestApi {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::RestApi", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ApiKeySourceType" Prelude.<$> apiKeySourceType,
+                            (JSON..=) "BinaryMediaTypes" Prelude.<$> binaryMediaTypes,
+                            (JSON..=) "Body" Prelude.<$> body,
+                            (JSON..=) "BodyS3Location" Prelude.<$> bodyS3Location,
+                            (JSON..=) "CloneFrom" Prelude.<$> cloneFrom,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "DisableExecuteApiEndpoint"
+                              Prelude.<$> disableExecuteApiEndpoint,
+                            (JSON..=) "EndpointConfiguration"
+                              Prelude.<$> endpointConfiguration,
+                            (JSON..=) "FailOnWarnings" Prelude.<$> failOnWarnings,
+                            (JSON..=) "MinimumCompressionSize"
+                              Prelude.<$> minimumCompressionSize,
+                            (JSON..=) "Mode" Prelude.<$> mode,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Parameters" Prelude.<$> parameters,
+                            (JSON..=) "Policy" Prelude.<$> policy,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON RestApi where
+  toJSON RestApi {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ApiKeySourceType" Prelude.<$> apiKeySourceType,
+               (JSON..=) "BinaryMediaTypes" Prelude.<$> binaryMediaTypes,
+               (JSON..=) "Body" Prelude.<$> body,
+               (JSON..=) "BodyS3Location" Prelude.<$> bodyS3Location,
+               (JSON..=) "CloneFrom" Prelude.<$> cloneFrom,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "DisableExecuteApiEndpoint"
+                 Prelude.<$> disableExecuteApiEndpoint,
+               (JSON..=) "EndpointConfiguration"
+                 Prelude.<$> endpointConfiguration,
+               (JSON..=) "FailOnWarnings" Prelude.<$> failOnWarnings,
+               (JSON..=) "MinimumCompressionSize"
+                 Prelude.<$> minimumCompressionSize,
+               (JSON..=) "Mode" Prelude.<$> mode,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Parameters" Prelude.<$> parameters,
+               (JSON..=) "Policy" Prelude.<$> policy,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ApiKeySourceType" RestApi where
+  type PropertyType "ApiKeySourceType" RestApi = Value Prelude.Text
+  set newValue RestApi {..}
+    = RestApi {apiKeySourceType = Prelude.pure newValue, ..}
+instance Property "BinaryMediaTypes" RestApi where
+  type PropertyType "BinaryMediaTypes" RestApi = ValueList Prelude.Text
+  set newValue RestApi {..}
+    = RestApi {binaryMediaTypes = Prelude.pure newValue, ..}
+instance Property "Body" RestApi where
+  type PropertyType "Body" RestApi = JSON.Object
+  set newValue RestApi {..}
+    = RestApi {body = Prelude.pure newValue, ..}
+instance Property "BodyS3Location" RestApi where
+  type PropertyType "BodyS3Location" RestApi = S3LocationProperty
+  set newValue RestApi {..}
+    = RestApi {bodyS3Location = Prelude.pure newValue, ..}
+instance Property "CloneFrom" RestApi where
+  type PropertyType "CloneFrom" RestApi = Value Prelude.Text
+  set newValue RestApi {..}
+    = RestApi {cloneFrom = Prelude.pure newValue, ..}
+instance Property "Description" RestApi where
+  type PropertyType "Description" RestApi = Value Prelude.Text
+  set newValue RestApi {..}
+    = RestApi {description = Prelude.pure newValue, ..}
+instance Property "DisableExecuteApiEndpoint" RestApi where
+  type PropertyType "DisableExecuteApiEndpoint" RestApi = Value Prelude.Bool
+  set newValue RestApi {..}
+    = RestApi {disableExecuteApiEndpoint = Prelude.pure newValue, ..}
+instance Property "EndpointConfiguration" RestApi where
+  type PropertyType "EndpointConfiguration" RestApi = EndpointConfigurationProperty
+  set newValue RestApi {..}
+    = RestApi {endpointConfiguration = Prelude.pure newValue, ..}
+instance Property "FailOnWarnings" RestApi where
+  type PropertyType "FailOnWarnings" RestApi = Value Prelude.Bool
+  set newValue RestApi {..}
+    = RestApi {failOnWarnings = Prelude.pure newValue, ..}
+instance Property "MinimumCompressionSize" RestApi where
+  type PropertyType "MinimumCompressionSize" RestApi = Value Prelude.Integer
+  set newValue RestApi {..}
+    = RestApi {minimumCompressionSize = Prelude.pure newValue, ..}
+instance Property "Mode" RestApi where
+  type PropertyType "Mode" RestApi = Value Prelude.Text
+  set newValue RestApi {..}
+    = RestApi {mode = Prelude.pure newValue, ..}
+instance Property "Name" RestApi where
+  type PropertyType "Name" RestApi = Value Prelude.Text
+  set newValue RestApi {..}
+    = RestApi {name = Prelude.pure newValue, ..}
+instance Property "Parameters" RestApi where
+  type PropertyType "Parameters" RestApi = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue RestApi {..}
+    = RestApi {parameters = Prelude.pure newValue, ..}
+instance Property "Policy" RestApi where
+  type PropertyType "Policy" RestApi = JSON.Object
+  set newValue RestApi {..}
+    = RestApi {policy = Prelude.pure newValue, ..}
+instance Property "Tags" RestApi where
+  type PropertyType "Tags" RestApi = [Tag]
+  set newValue RestApi {..}
+    = RestApi {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/RestApi/EndpointConfigurationProperty.hs b/gen/Stratosphere/ApiGateway/RestApi/EndpointConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/RestApi/EndpointConfigurationProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.ApiGateway.RestApi.EndpointConfigurationProperty (
+        EndpointConfigurationProperty(..), mkEndpointConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EndpointConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-endpointconfiguration.html>
+    EndpointConfigurationProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-endpointconfiguration.html#cfn-apigateway-restapi-endpointconfiguration-ipaddresstype>
+                                   ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-endpointconfiguration.html#cfn-apigateway-restapi-endpointconfiguration-types>
+                                   types :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-endpointconfiguration.html#cfn-apigateway-restapi-endpointconfiguration-vpcendpointids>
+                                   vpcEndpointIds :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEndpointConfigurationProperty :: EndpointConfigurationProperty
+mkEndpointConfigurationProperty
+  = EndpointConfigurationProperty
+      {haddock_workaround_ = (), ipAddressType = Prelude.Nothing,
+       types = Prelude.Nothing, vpcEndpointIds = Prelude.Nothing}
+instance ToResourceProperties EndpointConfigurationProperty where
+  toResourceProperties EndpointConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::RestApi.EndpointConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                            (JSON..=) "Types" Prelude.<$> types,
+                            (JSON..=) "VpcEndpointIds" Prelude.<$> vpcEndpointIds])}
+instance JSON.ToJSON EndpointConfigurationProperty where
+  toJSON EndpointConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+               (JSON..=) "Types" Prelude.<$> types,
+               (JSON..=) "VpcEndpointIds" Prelude.<$> vpcEndpointIds]))
+instance Property "IpAddressType" EndpointConfigurationProperty where
+  type PropertyType "IpAddressType" EndpointConfigurationProperty = Value Prelude.Text
+  set newValue EndpointConfigurationProperty {..}
+    = EndpointConfigurationProperty
+        {ipAddressType = Prelude.pure newValue, ..}
+instance Property "Types" EndpointConfigurationProperty where
+  type PropertyType "Types" EndpointConfigurationProperty = ValueList Prelude.Text
+  set newValue EndpointConfigurationProperty {..}
+    = EndpointConfigurationProperty {types = Prelude.pure newValue, ..}
+instance Property "VpcEndpointIds" EndpointConfigurationProperty where
+  type PropertyType "VpcEndpointIds" EndpointConfigurationProperty = ValueList Prelude.Text
+  set newValue EndpointConfigurationProperty {..}
+    = EndpointConfigurationProperty
+        {vpcEndpointIds = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/RestApi/EndpointConfigurationProperty.hs-boot b/gen/Stratosphere/ApiGateway/RestApi/EndpointConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/RestApi/EndpointConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.RestApi.EndpointConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EndpointConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EndpointConfigurationProperty
+instance Prelude.Eq EndpointConfigurationProperty
+instance Prelude.Show EndpointConfigurationProperty
+instance JSON.ToJSON EndpointConfigurationProperty
diff --git a/gen/Stratosphere/ApiGateway/RestApi/S3LocationProperty.hs b/gen/Stratosphere/ApiGateway/RestApi/S3LocationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/RestApi/S3LocationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.ApiGateway.RestApi.S3LocationProperty (
+        S3LocationProperty(..), mkS3LocationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3LocationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-s3location.html>
+    S3LocationProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-s3location.html#cfn-apigateway-restapi-s3location-bucket>
+                        bucket :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-s3location.html#cfn-apigateway-restapi-s3location-etag>
+                        eTag :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-s3location.html#cfn-apigateway-restapi-s3location-key>
+                        key :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-restapi-s3location.html#cfn-apigateway-restapi-s3location-version>
+                        version :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3LocationProperty :: S3LocationProperty
+mkS3LocationProperty
+  = S3LocationProperty
+      {haddock_workaround_ = (), bucket = Prelude.Nothing,
+       eTag = Prelude.Nothing, key = Prelude.Nothing,
+       version = Prelude.Nothing}
+instance ToResourceProperties S3LocationProperty where
+  toResourceProperties S3LocationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::RestApi.S3Location",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Bucket" Prelude.<$> bucket,
+                            (JSON..=) "ETag" Prelude.<$> eTag, (JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "Version" Prelude.<$> version])}
+instance JSON.ToJSON S3LocationProperty where
+  toJSON S3LocationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Bucket" Prelude.<$> bucket,
+               (JSON..=) "ETag" Prelude.<$> eTag, (JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "Version" Prelude.<$> version]))
+instance Property "Bucket" S3LocationProperty where
+  type PropertyType "Bucket" S3LocationProperty = Value Prelude.Text
+  set newValue S3LocationProperty {..}
+    = S3LocationProperty {bucket = Prelude.pure newValue, ..}
+instance Property "ETag" S3LocationProperty where
+  type PropertyType "ETag" S3LocationProperty = Value Prelude.Text
+  set newValue S3LocationProperty {..}
+    = S3LocationProperty {eTag = Prelude.pure newValue, ..}
+instance Property "Key" S3LocationProperty where
+  type PropertyType "Key" S3LocationProperty = Value Prelude.Text
+  set newValue S3LocationProperty {..}
+    = S3LocationProperty {key = Prelude.pure newValue, ..}
+instance Property "Version" S3LocationProperty where
+  type PropertyType "Version" S3LocationProperty = Value Prelude.Text
+  set newValue S3LocationProperty {..}
+    = S3LocationProperty {version = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/RestApi/S3LocationProperty.hs-boot b/gen/Stratosphere/ApiGateway/RestApi/S3LocationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/RestApi/S3LocationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.RestApi.S3LocationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3LocationProperty :: Prelude.Type
+instance ToResourceProperties S3LocationProperty
+instance Prelude.Eq S3LocationProperty
+instance Prelude.Show S3LocationProperty
+instance JSON.ToJSON S3LocationProperty
diff --git a/gen/Stratosphere/ApiGateway/Stage.hs b/gen/Stratosphere/ApiGateway/Stage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Stage.hs
@@ -0,0 +1,153 @@
+module Stratosphere.ApiGateway.Stage (
+        module Exports, Stage(..), mkStage
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.Stage.AccessLogSettingProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.Stage.CanarySettingProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.Stage.MethodSettingProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Stage
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html>
+    Stage {haddock_workaround_ :: (),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-accesslogsetting>
+           accessLogSetting :: (Prelude.Maybe AccessLogSettingProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-cacheclusterenabled>
+           cacheClusterEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-cacheclustersize>
+           cacheClusterSize :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-canarysetting>
+           canarySetting :: (Prelude.Maybe CanarySettingProperty),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-clientcertificateid>
+           clientCertificateId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-deploymentid>
+           deploymentId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-description>
+           description :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-documentationversion>
+           documentationVersion :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-methodsettings>
+           methodSettings :: (Prelude.Maybe [MethodSettingProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-restapiid>
+           restApiId :: (Value Prelude.Text),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-stagename>
+           stageName :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-tags>
+           tags :: (Prelude.Maybe [Tag]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-tracingenabled>
+           tracingEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-stage.html#cfn-apigateway-stage-variables>
+           variables :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text)))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStage :: Value Prelude.Text -> Stage
+mkStage restApiId
+  = Stage
+      {haddock_workaround_ = (), restApiId = restApiId,
+       accessLogSetting = Prelude.Nothing,
+       cacheClusterEnabled = Prelude.Nothing,
+       cacheClusterSize = Prelude.Nothing,
+       canarySetting = Prelude.Nothing,
+       clientCertificateId = Prelude.Nothing,
+       deploymentId = Prelude.Nothing, description = Prelude.Nothing,
+       documentationVersion = Prelude.Nothing,
+       methodSettings = Prelude.Nothing, stageName = Prelude.Nothing,
+       tags = Prelude.Nothing, tracingEnabled = Prelude.Nothing,
+       variables = Prelude.Nothing}
+instance ToResourceProperties Stage where
+  toResourceProperties Stage {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Stage", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RestApiId" JSON..= restApiId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessLogSetting" Prelude.<$> accessLogSetting,
+                               (JSON..=) "CacheClusterEnabled" Prelude.<$> cacheClusterEnabled,
+                               (JSON..=) "CacheClusterSize" Prelude.<$> cacheClusterSize,
+                               (JSON..=) "CanarySetting" Prelude.<$> canarySetting,
+                               (JSON..=) "ClientCertificateId" Prelude.<$> clientCertificateId,
+                               (JSON..=) "DeploymentId" Prelude.<$> deploymentId,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DocumentationVersion" Prelude.<$> documentationVersion,
+                               (JSON..=) "MethodSettings" Prelude.<$> methodSettings,
+                               (JSON..=) "StageName" Prelude.<$> stageName,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TracingEnabled" Prelude.<$> tracingEnabled,
+                               (JSON..=) "Variables" Prelude.<$> variables]))}
+instance JSON.ToJSON Stage where
+  toJSON Stage {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RestApiId" JSON..= restApiId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessLogSetting" Prelude.<$> accessLogSetting,
+                  (JSON..=) "CacheClusterEnabled" Prelude.<$> cacheClusterEnabled,
+                  (JSON..=) "CacheClusterSize" Prelude.<$> cacheClusterSize,
+                  (JSON..=) "CanarySetting" Prelude.<$> canarySetting,
+                  (JSON..=) "ClientCertificateId" Prelude.<$> clientCertificateId,
+                  (JSON..=) "DeploymentId" Prelude.<$> deploymentId,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DocumentationVersion" Prelude.<$> documentationVersion,
+                  (JSON..=) "MethodSettings" Prelude.<$> methodSettings,
+                  (JSON..=) "StageName" Prelude.<$> stageName,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TracingEnabled" Prelude.<$> tracingEnabled,
+                  (JSON..=) "Variables" Prelude.<$> variables])))
+instance Property "AccessLogSetting" Stage where
+  type PropertyType "AccessLogSetting" Stage = AccessLogSettingProperty
+  set newValue Stage {..}
+    = Stage {accessLogSetting = Prelude.pure newValue, ..}
+instance Property "CacheClusterEnabled" Stage where
+  type PropertyType "CacheClusterEnabled" Stage = Value Prelude.Bool
+  set newValue Stage {..}
+    = Stage {cacheClusterEnabled = Prelude.pure newValue, ..}
+instance Property "CacheClusterSize" Stage where
+  type PropertyType "CacheClusterSize" Stage = Value Prelude.Text
+  set newValue Stage {..}
+    = Stage {cacheClusterSize = Prelude.pure newValue, ..}
+instance Property "CanarySetting" Stage where
+  type PropertyType "CanarySetting" Stage = CanarySettingProperty
+  set newValue Stage {..}
+    = Stage {canarySetting = Prelude.pure newValue, ..}
+instance Property "ClientCertificateId" Stage where
+  type PropertyType "ClientCertificateId" Stage = Value Prelude.Text
+  set newValue Stage {..}
+    = Stage {clientCertificateId = Prelude.pure newValue, ..}
+instance Property "DeploymentId" Stage where
+  type PropertyType "DeploymentId" Stage = Value Prelude.Text
+  set newValue Stage {..}
+    = Stage {deploymentId = Prelude.pure newValue, ..}
+instance Property "Description" Stage where
+  type PropertyType "Description" Stage = Value Prelude.Text
+  set newValue Stage {..}
+    = Stage {description = Prelude.pure newValue, ..}
+instance Property "DocumentationVersion" Stage where
+  type PropertyType "DocumentationVersion" Stage = Value Prelude.Text
+  set newValue Stage {..}
+    = Stage {documentationVersion = Prelude.pure newValue, ..}
+instance Property "MethodSettings" Stage where
+  type PropertyType "MethodSettings" Stage = [MethodSettingProperty]
+  set newValue Stage {..}
+    = Stage {methodSettings = Prelude.pure newValue, ..}
+instance Property "RestApiId" Stage where
+  type PropertyType "RestApiId" Stage = Value Prelude.Text
+  set newValue Stage {..} = Stage {restApiId = newValue, ..}
+instance Property "StageName" Stage where
+  type PropertyType "StageName" Stage = Value Prelude.Text
+  set newValue Stage {..}
+    = Stage {stageName = Prelude.pure newValue, ..}
+instance Property "Tags" Stage where
+  type PropertyType "Tags" Stage = [Tag]
+  set newValue Stage {..} = Stage {tags = Prelude.pure newValue, ..}
+instance Property "TracingEnabled" Stage where
+  type PropertyType "TracingEnabled" Stage = Value Prelude.Bool
+  set newValue Stage {..}
+    = Stage {tracingEnabled = Prelude.pure newValue, ..}
+instance Property "Variables" Stage where
+  type PropertyType "Variables" Stage = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue Stage {..}
+    = Stage {variables = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Stage/AccessLogSettingProperty.hs b/gen/Stratosphere/ApiGateway/Stage/AccessLogSettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Stage/AccessLogSettingProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.ApiGateway.Stage.AccessLogSettingProperty (
+        AccessLogSettingProperty(..), mkAccessLogSettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AccessLogSettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html>
+    AccessLogSettingProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html#cfn-apigateway-stage-accesslogsetting-destinationarn>
+                              destinationArn :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-accesslogsetting.html#cfn-apigateway-stage-accesslogsetting-format>
+                              format :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessLogSettingProperty :: AccessLogSettingProperty
+mkAccessLogSettingProperty
+  = AccessLogSettingProperty
+      {haddock_workaround_ = (), destinationArn = Prelude.Nothing,
+       format = Prelude.Nothing}
+instance ToResourceProperties AccessLogSettingProperty where
+  toResourceProperties AccessLogSettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Stage.AccessLogSetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DestinationArn" Prelude.<$> destinationArn,
+                            (JSON..=) "Format" Prelude.<$> format])}
+instance JSON.ToJSON AccessLogSettingProperty where
+  toJSON AccessLogSettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DestinationArn" Prelude.<$> destinationArn,
+               (JSON..=) "Format" Prelude.<$> format]))
+instance Property "DestinationArn" AccessLogSettingProperty where
+  type PropertyType "DestinationArn" AccessLogSettingProperty = Value Prelude.Text
+  set newValue AccessLogSettingProperty {..}
+    = AccessLogSettingProperty
+        {destinationArn = Prelude.pure newValue, ..}
+instance Property "Format" AccessLogSettingProperty where
+  type PropertyType "Format" AccessLogSettingProperty = Value Prelude.Text
+  set newValue AccessLogSettingProperty {..}
+    = AccessLogSettingProperty {format = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Stage/AccessLogSettingProperty.hs-boot b/gen/Stratosphere/ApiGateway/Stage/AccessLogSettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Stage/AccessLogSettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Stage.AccessLogSettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessLogSettingProperty :: Prelude.Type
+instance ToResourceProperties AccessLogSettingProperty
+instance Prelude.Eq AccessLogSettingProperty
+instance Prelude.Show AccessLogSettingProperty
+instance JSON.ToJSON AccessLogSettingProperty
diff --git a/gen/Stratosphere/ApiGateway/Stage/CanarySettingProperty.hs b/gen/Stratosphere/ApiGateway/Stage/CanarySettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Stage/CanarySettingProperty.hs
@@ -0,0 +1,67 @@
+module Stratosphere.ApiGateway.Stage.CanarySettingProperty (
+        CanarySettingProperty(..), mkCanarySettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CanarySettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html>
+    CanarySettingProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-deploymentid>
+                           deploymentId :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-percenttraffic>
+                           percentTraffic :: (Prelude.Maybe (Value Prelude.Double)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-stagevariableoverrides>
+                           stageVariableOverrides :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-canarysetting.html#cfn-apigateway-stage-canarysetting-usestagecache>
+                           useStageCache :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCanarySettingProperty :: CanarySettingProperty
+mkCanarySettingProperty
+  = CanarySettingProperty
+      {haddock_workaround_ = (), deploymentId = Prelude.Nothing,
+       percentTraffic = Prelude.Nothing,
+       stageVariableOverrides = Prelude.Nothing,
+       useStageCache = Prelude.Nothing}
+instance ToResourceProperties CanarySettingProperty where
+  toResourceProperties CanarySettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Stage.CanarySetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeploymentId" Prelude.<$> deploymentId,
+                            (JSON..=) "PercentTraffic" Prelude.<$> percentTraffic,
+                            (JSON..=) "StageVariableOverrides"
+                              Prelude.<$> stageVariableOverrides,
+                            (JSON..=) "UseStageCache" Prelude.<$> useStageCache])}
+instance JSON.ToJSON CanarySettingProperty where
+  toJSON CanarySettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeploymentId" Prelude.<$> deploymentId,
+               (JSON..=) "PercentTraffic" Prelude.<$> percentTraffic,
+               (JSON..=) "StageVariableOverrides"
+                 Prelude.<$> stageVariableOverrides,
+               (JSON..=) "UseStageCache" Prelude.<$> useStageCache]))
+instance Property "DeploymentId" CanarySettingProperty where
+  type PropertyType "DeploymentId" CanarySettingProperty = Value Prelude.Text
+  set newValue CanarySettingProperty {..}
+    = CanarySettingProperty {deploymentId = Prelude.pure newValue, ..}
+instance Property "PercentTraffic" CanarySettingProperty where
+  type PropertyType "PercentTraffic" CanarySettingProperty = Value Prelude.Double
+  set newValue CanarySettingProperty {..}
+    = CanarySettingProperty
+        {percentTraffic = Prelude.pure newValue, ..}
+instance Property "StageVariableOverrides" CanarySettingProperty where
+  type PropertyType "StageVariableOverrides" CanarySettingProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue CanarySettingProperty {..}
+    = CanarySettingProperty
+        {stageVariableOverrides = Prelude.pure newValue, ..}
+instance Property "UseStageCache" CanarySettingProperty where
+  type PropertyType "UseStageCache" CanarySettingProperty = Value Prelude.Bool
+  set newValue CanarySettingProperty {..}
+    = CanarySettingProperty {useStageCache = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Stage/CanarySettingProperty.hs-boot b/gen/Stratosphere/ApiGateway/Stage/CanarySettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Stage/CanarySettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Stage.CanarySettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CanarySettingProperty :: Prelude.Type
+instance ToResourceProperties CanarySettingProperty
+instance Prelude.Eq CanarySettingProperty
+instance Prelude.Show CanarySettingProperty
+instance JSON.ToJSON CanarySettingProperty
diff --git a/gen/Stratosphere/ApiGateway/Stage/MethodSettingProperty.hs b/gen/Stratosphere/ApiGateway/Stage/MethodSettingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Stage/MethodSettingProperty.hs
@@ -0,0 +1,122 @@
+module Stratosphere.ApiGateway.Stage.MethodSettingProperty (
+        MethodSettingProperty(..), mkMethodSettingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MethodSettingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html>
+    MethodSettingProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-cachedataencrypted>
+                           cacheDataEncrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-cachettlinseconds>
+                           cacheTtlInSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-cachingenabled>
+                           cachingEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-datatraceenabled>
+                           dataTraceEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-httpmethod>
+                           httpMethod :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-logginglevel>
+                           loggingLevel :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-metricsenabled>
+                           metricsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-resourcepath>
+                           resourcePath :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-throttlingburstlimit>
+                           throttlingBurstLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html#cfn-apigateway-stage-methodsetting-throttlingratelimit>
+                           throttlingRateLimit :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMethodSettingProperty :: MethodSettingProperty
+mkMethodSettingProperty
+  = MethodSettingProperty
+      {haddock_workaround_ = (), cacheDataEncrypted = Prelude.Nothing,
+       cacheTtlInSeconds = Prelude.Nothing,
+       cachingEnabled = Prelude.Nothing,
+       dataTraceEnabled = Prelude.Nothing, httpMethod = Prelude.Nothing,
+       loggingLevel = Prelude.Nothing, metricsEnabled = Prelude.Nothing,
+       resourcePath = Prelude.Nothing,
+       throttlingBurstLimit = Prelude.Nothing,
+       throttlingRateLimit = Prelude.Nothing}
+instance ToResourceProperties MethodSettingProperty where
+  toResourceProperties MethodSettingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::Stage.MethodSetting",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CacheDataEncrypted" Prelude.<$> cacheDataEncrypted,
+                            (JSON..=) "CacheTtlInSeconds" Prelude.<$> cacheTtlInSeconds,
+                            (JSON..=) "CachingEnabled" Prelude.<$> cachingEnabled,
+                            (JSON..=) "DataTraceEnabled" Prelude.<$> dataTraceEnabled,
+                            (JSON..=) "HttpMethod" Prelude.<$> httpMethod,
+                            (JSON..=) "LoggingLevel" Prelude.<$> loggingLevel,
+                            (JSON..=) "MetricsEnabled" Prelude.<$> metricsEnabled,
+                            (JSON..=) "ResourcePath" Prelude.<$> resourcePath,
+                            (JSON..=) "ThrottlingBurstLimit" Prelude.<$> throttlingBurstLimit,
+                            (JSON..=) "ThrottlingRateLimit" Prelude.<$> throttlingRateLimit])}
+instance JSON.ToJSON MethodSettingProperty where
+  toJSON MethodSettingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CacheDataEncrypted" Prelude.<$> cacheDataEncrypted,
+               (JSON..=) "CacheTtlInSeconds" Prelude.<$> cacheTtlInSeconds,
+               (JSON..=) "CachingEnabled" Prelude.<$> cachingEnabled,
+               (JSON..=) "DataTraceEnabled" Prelude.<$> dataTraceEnabled,
+               (JSON..=) "HttpMethod" Prelude.<$> httpMethod,
+               (JSON..=) "LoggingLevel" Prelude.<$> loggingLevel,
+               (JSON..=) "MetricsEnabled" Prelude.<$> metricsEnabled,
+               (JSON..=) "ResourcePath" Prelude.<$> resourcePath,
+               (JSON..=) "ThrottlingBurstLimit" Prelude.<$> throttlingBurstLimit,
+               (JSON..=) "ThrottlingRateLimit" Prelude.<$> throttlingRateLimit]))
+instance Property "CacheDataEncrypted" MethodSettingProperty where
+  type PropertyType "CacheDataEncrypted" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {cacheDataEncrypted = Prelude.pure newValue, ..}
+instance Property "CacheTtlInSeconds" MethodSettingProperty where
+  type PropertyType "CacheTtlInSeconds" MethodSettingProperty = Value Prelude.Integer
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {cacheTtlInSeconds = Prelude.pure newValue, ..}
+instance Property "CachingEnabled" MethodSettingProperty where
+  type PropertyType "CachingEnabled" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {cachingEnabled = Prelude.pure newValue, ..}
+instance Property "DataTraceEnabled" MethodSettingProperty where
+  type PropertyType "DataTraceEnabled" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {dataTraceEnabled = Prelude.pure newValue, ..}
+instance Property "HttpMethod" MethodSettingProperty where
+  type PropertyType "HttpMethod" MethodSettingProperty = Value Prelude.Text
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty {httpMethod = Prelude.pure newValue, ..}
+instance Property "LoggingLevel" MethodSettingProperty where
+  type PropertyType "LoggingLevel" MethodSettingProperty = Value Prelude.Text
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty {loggingLevel = Prelude.pure newValue, ..}
+instance Property "MetricsEnabled" MethodSettingProperty where
+  type PropertyType "MetricsEnabled" MethodSettingProperty = Value Prelude.Bool
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {metricsEnabled = Prelude.pure newValue, ..}
+instance Property "ResourcePath" MethodSettingProperty where
+  type PropertyType "ResourcePath" MethodSettingProperty = Value Prelude.Text
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty {resourcePath = Prelude.pure newValue, ..}
+instance Property "ThrottlingBurstLimit" MethodSettingProperty where
+  type PropertyType "ThrottlingBurstLimit" MethodSettingProperty = Value Prelude.Integer
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {throttlingBurstLimit = Prelude.pure newValue, ..}
+instance Property "ThrottlingRateLimit" MethodSettingProperty where
+  type PropertyType "ThrottlingRateLimit" MethodSettingProperty = Value Prelude.Double
+  set newValue MethodSettingProperty {..}
+    = MethodSettingProperty
+        {throttlingRateLimit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/Stage/MethodSettingProperty.hs-boot b/gen/Stratosphere/ApiGateway/Stage/MethodSettingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/Stage/MethodSettingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.Stage.MethodSettingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MethodSettingProperty :: Prelude.Type
+instance ToResourceProperties MethodSettingProperty
+instance Prelude.Eq MethodSettingProperty
+instance Prelude.Show MethodSettingProperty
+instance JSON.ToJSON MethodSettingProperty
diff --git a/gen/Stratosphere/ApiGateway/UsagePlan.hs b/gen/Stratosphere/ApiGateway/UsagePlan.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlan.hs
@@ -0,0 +1,83 @@
+module Stratosphere.ApiGateway.UsagePlan (
+        module Exports, UsagePlan(..), mkUsagePlan
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.UsagePlan.ApiStageProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.UsagePlan.QuotaSettingsProperty as Exports
+import {-# SOURCE #-} Stratosphere.ApiGateway.UsagePlan.ThrottleSettingsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data UsagePlan
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html>
+    UsagePlan {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-apistages>
+               apiStages :: (Prelude.Maybe [ApiStageProperty]),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-description>
+               description :: (Prelude.Maybe (Value Prelude.Text)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-quota>
+               quota :: (Prelude.Maybe QuotaSettingsProperty),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-tags>
+               tags :: (Prelude.Maybe [Tag]),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-throttle>
+               throttle :: (Prelude.Maybe ThrottleSettingsProperty),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplan.html#cfn-apigateway-usageplan-usageplanname>
+               usagePlanName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUsagePlan :: UsagePlan
+mkUsagePlan
+  = UsagePlan
+      {haddock_workaround_ = (), apiStages = Prelude.Nothing,
+       description = Prelude.Nothing, quota = Prelude.Nothing,
+       tags = Prelude.Nothing, throttle = Prelude.Nothing,
+       usagePlanName = Prelude.Nothing}
+instance ToResourceProperties UsagePlan where
+  toResourceProperties UsagePlan {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::UsagePlan",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ApiStages" Prelude.<$> apiStages,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "Quota" Prelude.<$> quota,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "Throttle" Prelude.<$> throttle,
+                            (JSON..=) "UsagePlanName" Prelude.<$> usagePlanName])}
+instance JSON.ToJSON UsagePlan where
+  toJSON UsagePlan {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ApiStages" Prelude.<$> apiStages,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "Quota" Prelude.<$> quota,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "Throttle" Prelude.<$> throttle,
+               (JSON..=) "UsagePlanName" Prelude.<$> usagePlanName]))
+instance Property "ApiStages" UsagePlan where
+  type PropertyType "ApiStages" UsagePlan = [ApiStageProperty]
+  set newValue UsagePlan {..}
+    = UsagePlan {apiStages = Prelude.pure newValue, ..}
+instance Property "Description" UsagePlan where
+  type PropertyType "Description" UsagePlan = Value Prelude.Text
+  set newValue UsagePlan {..}
+    = UsagePlan {description = Prelude.pure newValue, ..}
+instance Property "Quota" UsagePlan where
+  type PropertyType "Quota" UsagePlan = QuotaSettingsProperty
+  set newValue UsagePlan {..}
+    = UsagePlan {quota = Prelude.pure newValue, ..}
+instance Property "Tags" UsagePlan where
+  type PropertyType "Tags" UsagePlan = [Tag]
+  set newValue UsagePlan {..}
+    = UsagePlan {tags = Prelude.pure newValue, ..}
+instance Property "Throttle" UsagePlan where
+  type PropertyType "Throttle" UsagePlan = ThrottleSettingsProperty
+  set newValue UsagePlan {..}
+    = UsagePlan {throttle = Prelude.pure newValue, ..}
+instance Property "UsagePlanName" UsagePlan where
+  type PropertyType "UsagePlanName" UsagePlan = Value Prelude.Text
+  set newValue UsagePlan {..}
+    = UsagePlan {usagePlanName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/UsagePlan/ApiStageProperty.hs b/gen/Stratosphere/ApiGateway/UsagePlan/ApiStageProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlan/ApiStageProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.ApiGateway.UsagePlan.ApiStageProperty (
+        module Exports, ApiStageProperty(..), mkApiStageProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.ApiGateway.UsagePlan.ThrottleSettingsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ApiStageProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html>
+    ApiStageProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html#cfn-apigateway-usageplan-apistage-apiid>
+                      apiId :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html#cfn-apigateway-usageplan-apistage-stage>
+                      stage :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-apistage.html#cfn-apigateway-usageplan-apistage-throttle>
+                      throttle :: (Prelude.Maybe (Prelude.Map Prelude.Text ThrottleSettingsProperty))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkApiStageProperty :: ApiStageProperty
+mkApiStageProperty
+  = ApiStageProperty
+      {haddock_workaround_ = (), apiId = Prelude.Nothing,
+       stage = Prelude.Nothing, throttle = Prelude.Nothing}
+instance ToResourceProperties ApiStageProperty where
+  toResourceProperties ApiStageProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::UsagePlan.ApiStage",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ApiId" Prelude.<$> apiId,
+                            (JSON..=) "Stage" Prelude.<$> stage,
+                            (JSON..=) "Throttle" Prelude.<$> throttle])}
+instance JSON.ToJSON ApiStageProperty where
+  toJSON ApiStageProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ApiId" Prelude.<$> apiId,
+               (JSON..=) "Stage" Prelude.<$> stage,
+               (JSON..=) "Throttle" Prelude.<$> throttle]))
+instance Property "ApiId" ApiStageProperty where
+  type PropertyType "ApiId" ApiStageProperty = Value Prelude.Text
+  set newValue ApiStageProperty {..}
+    = ApiStageProperty {apiId = Prelude.pure newValue, ..}
+instance Property "Stage" ApiStageProperty where
+  type PropertyType "Stage" ApiStageProperty = Value Prelude.Text
+  set newValue ApiStageProperty {..}
+    = ApiStageProperty {stage = Prelude.pure newValue, ..}
+instance Property "Throttle" ApiStageProperty where
+  type PropertyType "Throttle" ApiStageProperty = Prelude.Map Prelude.Text ThrottleSettingsProperty
+  set newValue ApiStageProperty {..}
+    = ApiStageProperty {throttle = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/UsagePlan/ApiStageProperty.hs-boot b/gen/Stratosphere/ApiGateway/UsagePlan/ApiStageProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlan/ApiStageProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.UsagePlan.ApiStageProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ApiStageProperty :: Prelude.Type
+instance ToResourceProperties ApiStageProperty
+instance Prelude.Eq ApiStageProperty
+instance Prelude.Show ApiStageProperty
+instance JSON.ToJSON ApiStageProperty
diff --git a/gen/Stratosphere/ApiGateway/UsagePlan/QuotaSettingsProperty.hs b/gen/Stratosphere/ApiGateway/UsagePlan/QuotaSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlan/QuotaSettingsProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.ApiGateway.UsagePlan.QuotaSettingsProperty (
+        QuotaSettingsProperty(..), mkQuotaSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data QuotaSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html>
+    QuotaSettingsProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html#cfn-apigateway-usageplan-quotasettings-limit>
+                           limit :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html#cfn-apigateway-usageplan-quotasettings-offset>
+                           offset :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-quotasettings.html#cfn-apigateway-usageplan-quotasettings-period>
+                           period :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQuotaSettingsProperty :: QuotaSettingsProperty
+mkQuotaSettingsProperty
+  = QuotaSettingsProperty
+      {haddock_workaround_ = (), limit = Prelude.Nothing,
+       offset = Prelude.Nothing, period = Prelude.Nothing}
+instance ToResourceProperties QuotaSettingsProperty where
+  toResourceProperties QuotaSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::UsagePlan.QuotaSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Limit" Prelude.<$> limit,
+                            (JSON..=) "Offset" Prelude.<$> offset,
+                            (JSON..=) "Period" Prelude.<$> period])}
+instance JSON.ToJSON QuotaSettingsProperty where
+  toJSON QuotaSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Limit" Prelude.<$> limit,
+               (JSON..=) "Offset" Prelude.<$> offset,
+               (JSON..=) "Period" Prelude.<$> period]))
+instance Property "Limit" QuotaSettingsProperty where
+  type PropertyType "Limit" QuotaSettingsProperty = Value Prelude.Integer
+  set newValue QuotaSettingsProperty {..}
+    = QuotaSettingsProperty {limit = Prelude.pure newValue, ..}
+instance Property "Offset" QuotaSettingsProperty where
+  type PropertyType "Offset" QuotaSettingsProperty = Value Prelude.Integer
+  set newValue QuotaSettingsProperty {..}
+    = QuotaSettingsProperty {offset = Prelude.pure newValue, ..}
+instance Property "Period" QuotaSettingsProperty where
+  type PropertyType "Period" QuotaSettingsProperty = Value Prelude.Text
+  set newValue QuotaSettingsProperty {..}
+    = QuotaSettingsProperty {period = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/UsagePlan/QuotaSettingsProperty.hs-boot b/gen/Stratosphere/ApiGateway/UsagePlan/QuotaSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlan/QuotaSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.UsagePlan.QuotaSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QuotaSettingsProperty :: Prelude.Type
+instance ToResourceProperties QuotaSettingsProperty
+instance Prelude.Eq QuotaSettingsProperty
+instance Prelude.Show QuotaSettingsProperty
+instance JSON.ToJSON QuotaSettingsProperty
diff --git a/gen/Stratosphere/ApiGateway/UsagePlan/ThrottleSettingsProperty.hs b/gen/Stratosphere/ApiGateway/UsagePlan/ThrottleSettingsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlan/ThrottleSettingsProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.ApiGateway.UsagePlan.ThrottleSettingsProperty (
+        ThrottleSettingsProperty(..), mkThrottleSettingsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ThrottleSettingsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-throttlesettings.html>
+    ThrottleSettingsProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-throttlesettings.html#cfn-apigateway-usageplan-throttlesettings-burstlimit>
+                              burstLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-usageplan-throttlesettings.html#cfn-apigateway-usageplan-throttlesettings-ratelimit>
+                              rateLimit :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkThrottleSettingsProperty :: ThrottleSettingsProperty
+mkThrottleSettingsProperty
+  = ThrottleSettingsProperty
+      {haddock_workaround_ = (), burstLimit = Prelude.Nothing,
+       rateLimit = Prelude.Nothing}
+instance ToResourceProperties ThrottleSettingsProperty where
+  toResourceProperties ThrottleSettingsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::UsagePlan.ThrottleSettings",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BurstLimit" Prelude.<$> burstLimit,
+                            (JSON..=) "RateLimit" Prelude.<$> rateLimit])}
+instance JSON.ToJSON ThrottleSettingsProperty where
+  toJSON ThrottleSettingsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BurstLimit" Prelude.<$> burstLimit,
+               (JSON..=) "RateLimit" Prelude.<$> rateLimit]))
+instance Property "BurstLimit" ThrottleSettingsProperty where
+  type PropertyType "BurstLimit" ThrottleSettingsProperty = Value Prelude.Integer
+  set newValue ThrottleSettingsProperty {..}
+    = ThrottleSettingsProperty {burstLimit = Prelude.pure newValue, ..}
+instance Property "RateLimit" ThrottleSettingsProperty where
+  type PropertyType "RateLimit" ThrottleSettingsProperty = Value Prelude.Double
+  set newValue ThrottleSettingsProperty {..}
+    = ThrottleSettingsProperty {rateLimit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/UsagePlan/ThrottleSettingsProperty.hs-boot b/gen/Stratosphere/ApiGateway/UsagePlan/ThrottleSettingsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlan/ThrottleSettingsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.ApiGateway.UsagePlan.ThrottleSettingsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ThrottleSettingsProperty :: Prelude.Type
+instance ToResourceProperties ThrottleSettingsProperty
+instance Prelude.Eq ThrottleSettingsProperty
+instance Prelude.Show ThrottleSettingsProperty
+instance JSON.ToJSON ThrottleSettingsProperty
diff --git a/gen/Stratosphere/ApiGateway/UsagePlanKey.hs b/gen/Stratosphere/ApiGateway/UsagePlanKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/UsagePlanKey.hs
@@ -0,0 +1,49 @@
+module Stratosphere.ApiGateway.UsagePlanKey (
+        UsagePlanKey(..), mkUsagePlanKey
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data UsagePlanKey
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html>
+    UsagePlanKey {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html#cfn-apigateway-usageplankey-keyid>
+                  keyId :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html#cfn-apigateway-usageplankey-keytype>
+                  keyType :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-usageplankey.html#cfn-apigateway-usageplankey-usageplanid>
+                  usagePlanId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkUsagePlanKey ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> UsagePlanKey
+mkUsagePlanKey keyId keyType usagePlanId
+  = UsagePlanKey
+      {haddock_workaround_ = (), keyId = keyId, keyType = keyType,
+       usagePlanId = usagePlanId}
+instance ToResourceProperties UsagePlanKey where
+  toResourceProperties UsagePlanKey {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::UsagePlanKey",
+         supportsTags = Prelude.False,
+         properties = ["KeyId" JSON..= keyId, "KeyType" JSON..= keyType,
+                       "UsagePlanId" JSON..= usagePlanId]}
+instance JSON.ToJSON UsagePlanKey where
+  toJSON UsagePlanKey {..}
+    = JSON.object
+        ["KeyId" JSON..= keyId, "KeyType" JSON..= keyType,
+         "UsagePlanId" JSON..= usagePlanId]
+instance Property "KeyId" UsagePlanKey where
+  type PropertyType "KeyId" UsagePlanKey = Value Prelude.Text
+  set newValue UsagePlanKey {..}
+    = UsagePlanKey {keyId = newValue, ..}
+instance Property "KeyType" UsagePlanKey where
+  type PropertyType "KeyType" UsagePlanKey = Value Prelude.Text
+  set newValue UsagePlanKey {..}
+    = UsagePlanKey {keyType = newValue, ..}
+instance Property "UsagePlanId" UsagePlanKey where
+  type PropertyType "UsagePlanId" UsagePlanKey = Value Prelude.Text
+  set newValue UsagePlanKey {..}
+    = UsagePlanKey {usagePlanId = newValue, ..}
diff --git a/gen/Stratosphere/ApiGateway/VpcLink.hs b/gen/Stratosphere/ApiGateway/VpcLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/ApiGateway/VpcLink.hs
@@ -0,0 +1,60 @@
+module Stratosphere.ApiGateway.VpcLink (
+        VpcLink(..), mkVpcLink
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VpcLink
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-vpclink.html>
+    VpcLink {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-vpclink.html#cfn-apigateway-vpclink-description>
+             description :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-vpclink.html#cfn-apigateway-vpclink-name>
+             name :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-vpclink.html#cfn-apigateway-vpclink-tags>
+             tags :: (Prelude.Maybe [Tag]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-vpclink.html#cfn-apigateway-vpclink-targetarns>
+             targetArns :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpcLink ::
+  Value Prelude.Text -> ValueList Prelude.Text -> VpcLink
+mkVpcLink name targetArns
+  = VpcLink
+      {haddock_workaround_ = (), name = name, targetArns = targetArns,
+       description = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties VpcLink where
+  toResourceProperties VpcLink {..}
+    = ResourceProperties
+        {awsType = "AWS::ApiGateway::VpcLink", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name, "TargetArns" JSON..= targetArns]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON VpcLink where
+  toJSON VpcLink {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name, "TargetArns" JSON..= targetArns]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Description" VpcLink where
+  type PropertyType "Description" VpcLink = Value Prelude.Text
+  set newValue VpcLink {..}
+    = VpcLink {description = Prelude.pure newValue, ..}
+instance Property "Name" VpcLink where
+  type PropertyType "Name" VpcLink = Value Prelude.Text
+  set newValue VpcLink {..} = VpcLink {name = newValue, ..}
+instance Property "Tags" VpcLink where
+  type PropertyType "Tags" VpcLink = [Tag]
+  set newValue VpcLink {..}
+    = VpcLink {tags = Prelude.pure newValue, ..}
+instance Property "TargetArns" VpcLink where
+  type PropertyType "TargetArns" VpcLink = ValueList Prelude.Text
+  set newValue VpcLink {..} = VpcLink {targetArns = newValue, ..}
diff --git a/stratosphere-apigateway.cabal b/stratosphere-apigateway.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-apigateway.cabal
@@ -0,0 +1,115 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-apigateway
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS ApiGateway.
+description:    Integration into stratosphere to generate resources and properties for AWS ApiGateway
+category:       AWS, Cloud, ApiGateway
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.ApiGateway.Account
+      Stratosphere.ApiGateway.ApiKey
+      Stratosphere.ApiGateway.ApiKey.StageKeyProperty
+      Stratosphere.ApiGateway.Authorizer
+      Stratosphere.ApiGateway.BasePathMapping
+      Stratosphere.ApiGateway.BasePathMappingV2
+      Stratosphere.ApiGateway.ClientCertificate
+      Stratosphere.ApiGateway.Deployment
+      Stratosphere.ApiGateway.Deployment.AccessLogSettingProperty
+      Stratosphere.ApiGateway.Deployment.CanarySettingProperty
+      Stratosphere.ApiGateway.Deployment.DeploymentCanarySettingsProperty
+      Stratosphere.ApiGateway.Deployment.MethodSettingProperty
+      Stratosphere.ApiGateway.Deployment.StageDescriptionProperty
+      Stratosphere.ApiGateway.DocumentationPart
+      Stratosphere.ApiGateway.DocumentationPart.LocationProperty
+      Stratosphere.ApiGateway.DocumentationVersion
+      Stratosphere.ApiGateway.DomainName
+      Stratosphere.ApiGateway.DomainName.EndpointConfigurationProperty
+      Stratosphere.ApiGateway.DomainName.MutualTlsAuthenticationProperty
+      Stratosphere.ApiGateway.DomainNameAccessAssociation
+      Stratosphere.ApiGateway.DomainNameV2
+      Stratosphere.ApiGateway.DomainNameV2.EndpointConfigurationProperty
+      Stratosphere.ApiGateway.GatewayResponse
+      Stratosphere.ApiGateway.Method
+      Stratosphere.ApiGateway.Method.IntegrationProperty
+      Stratosphere.ApiGateway.Method.IntegrationResponseProperty
+      Stratosphere.ApiGateway.Method.MethodResponseProperty
+      Stratosphere.ApiGateway.Model
+      Stratosphere.ApiGateway.RequestValidator
+      Stratosphere.ApiGateway.Resource
+      Stratosphere.ApiGateway.RestApi
+      Stratosphere.ApiGateway.RestApi.EndpointConfigurationProperty
+      Stratosphere.ApiGateway.RestApi.S3LocationProperty
+      Stratosphere.ApiGateway.Stage
+      Stratosphere.ApiGateway.Stage.AccessLogSettingProperty
+      Stratosphere.ApiGateway.Stage.CanarySettingProperty
+      Stratosphere.ApiGateway.Stage.MethodSettingProperty
+      Stratosphere.ApiGateway.UsagePlan
+      Stratosphere.ApiGateway.UsagePlan.ApiStageProperty
+      Stratosphere.ApiGateway.UsagePlan.QuotaSettingsProperty
+      Stratosphere.ApiGateway.UsagePlan.ThrottleSettingsProperty
+      Stratosphere.ApiGateway.UsagePlanKey
+      Stratosphere.ApiGateway.VpcLink
+  other-modules:
+      Paths_stratosphere_apigateway
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
