diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,45 @@
+# Amazon AppSync SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.6.0`
+
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-appsync)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Network.AWS.AppSync](http://hackage.haskell.org/package/amazonka-appsync/docs/Network-AWS-AppSync.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-appsync` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/amazonka-appsync.cabal b/amazonka-appsync.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-appsync.cabal
@@ -0,0 +1,112 @@
+name:                  amazonka-appsync
+version:               1.6.0
+synopsis:              Amazon AppSync SDK.
+homepage:              https://github.com/brendanhay/amazonka
+bug-reports:           https://github.com/brendanhay/amazonka/issues
+license:               MPL-2.0
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2018 Brendan Hay
+category:              Network, AWS, Cloud, Distributed Computing
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+description:
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information, sending requests,
+    and receiving responses.
+    .
+    Lenses are used for constructing and manipulating types,
+    due to the depth of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.AppSync" or <https://aws.amazon.com/documentation/ the AWS documentation>
+    to get started.
+
+source-repository head
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-appsync
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
+
+    exposed-modules:
+          Network.AWS.AppSync
+        , Network.AWS.AppSync.CreateAPIKey
+        , Network.AWS.AppSync.CreateDataSource
+        , Network.AWS.AppSync.CreateGraphqlAPI
+        , Network.AWS.AppSync.CreateResolver
+        , Network.AWS.AppSync.CreateType
+        , Network.AWS.AppSync.DeleteAPIKey
+        , Network.AWS.AppSync.DeleteDataSource
+        , Network.AWS.AppSync.DeleteGraphqlAPI
+        , Network.AWS.AppSync.DeleteResolver
+        , Network.AWS.AppSync.DeleteType
+        , Network.AWS.AppSync.GetDataSource
+        , Network.AWS.AppSync.GetGraphqlAPI
+        , Network.AWS.AppSync.GetIntrospectionSchema
+        , Network.AWS.AppSync.GetResolver
+        , Network.AWS.AppSync.GetSchemaCreationStatus
+        , Network.AWS.AppSync.GetType
+        , Network.AWS.AppSync.ListAPIKeys
+        , Network.AWS.AppSync.ListDataSources
+        , Network.AWS.AppSync.ListGraphqlAPIs
+        , Network.AWS.AppSync.ListResolvers
+        , Network.AWS.AppSync.ListTypes
+        , Network.AWS.AppSync.StartSchemaCreation
+        , Network.AWS.AppSync.Types
+        , Network.AWS.AppSync.UpdateAPIKey
+        , Network.AWS.AppSync.UpdateDataSource
+        , Network.AWS.AppSync.UpdateGraphqlAPI
+        , Network.AWS.AppSync.UpdateResolver
+        , Network.AWS.AppSync.UpdateType
+        , Network.AWS.AppSync.Waiters
+
+    other-modules:
+          Network.AWS.AppSync.Types.Product
+        , Network.AWS.AppSync.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.6.0.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-appsync-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This section is encoded by the template and any modules added by
+    -- hand outside these namespaces will not correctly be added to the
+    -- distribution package.
+    other-modules:
+          Test.AWS.AppSync
+        , Test.AWS.Gen.AppSync
+        , Test.AWS.AppSync.Internal
+
+    build-depends:
+          amazonka-core == 1.6.0.*
+        , amazonka-test == 1.6.0.*
+        , amazonka-appsync
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/CreateAPIKey.yaml b/fixture/CreateAPIKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAPIKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateAPIKeyResponse.proto b/fixture/CreateAPIKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAPIKeyResponse.proto
diff --git a/fixture/CreateDataSource.yaml b/fixture/CreateDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDataSourceResponse.proto b/fixture/CreateDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSourceResponse.proto
diff --git a/fixture/CreateGraphqlAPI.yaml b/fixture/CreateGraphqlAPI.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGraphqlAPI.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateGraphqlAPIResponse.proto b/fixture/CreateGraphqlAPIResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGraphqlAPIResponse.proto
diff --git a/fixture/CreateResolver.yaml b/fixture/CreateResolver.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResolver.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateResolverResponse.proto b/fixture/CreateResolverResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResolverResponse.proto
diff --git a/fixture/CreateType.yaml b/fixture/CreateType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTypeResponse.proto b/fixture/CreateTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTypeResponse.proto
diff --git a/fixture/DeleteAPIKey.yaml b/fixture/DeleteAPIKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAPIKey.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteAPIKeyResponse.proto b/fixture/DeleteAPIKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAPIKeyResponse.proto
diff --git a/fixture/DeleteDataSource.yaml b/fixture/DeleteDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDataSourceResponse.proto b/fixture/DeleteDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataSourceResponse.proto
diff --git a/fixture/DeleteGraphqlAPI.yaml b/fixture/DeleteGraphqlAPI.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGraphqlAPI.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteGraphqlAPIResponse.proto b/fixture/DeleteGraphqlAPIResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGraphqlAPIResponse.proto
diff --git a/fixture/DeleteResolver.yaml b/fixture/DeleteResolver.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResolver.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteResolverResponse.proto b/fixture/DeleteResolverResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResolverResponse.proto
diff --git a/fixture/DeleteType.yaml b/fixture/DeleteType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteType.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTypeResponse.proto b/fixture/DeleteTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTypeResponse.proto
diff --git a/fixture/GetDataSource.yaml b/fixture/GetDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDataSourceResponse.proto b/fixture/GetDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSourceResponse.proto
diff --git a/fixture/GetGraphqlAPI.yaml b/fixture/GetGraphqlAPI.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGraphqlAPI.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetGraphqlAPIResponse.proto b/fixture/GetGraphqlAPIResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGraphqlAPIResponse.proto
diff --git a/fixture/GetIntrospectionSchema.yaml b/fixture/GetIntrospectionSchema.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntrospectionSchema.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetIntrospectionSchemaResponse.proto b/fixture/GetIntrospectionSchemaResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntrospectionSchemaResponse.proto
diff --git a/fixture/GetResolver.yaml b/fixture/GetResolver.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetResolver.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetResolverResponse.proto b/fixture/GetResolverResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetResolverResponse.proto
diff --git a/fixture/GetSchemaCreationStatus.yaml b/fixture/GetSchemaCreationStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSchemaCreationStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetSchemaCreationStatusResponse.proto b/fixture/GetSchemaCreationStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSchemaCreationStatusResponse.proto
diff --git a/fixture/GetType.yaml b/fixture/GetType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetType.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTypeResponse.proto b/fixture/GetTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTypeResponse.proto
diff --git a/fixture/ListAPIKeys.yaml b/fixture/ListAPIKeys.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAPIKeys.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAPIKeysResponse.proto b/fixture/ListAPIKeysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAPIKeysResponse.proto
diff --git a/fixture/ListDataSources.yaml b/fixture/ListDataSources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSources.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDataSourcesResponse.proto b/fixture/ListDataSourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSourcesResponse.proto
diff --git a/fixture/ListGraphqlAPIs.yaml b/fixture/ListGraphqlAPIs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGraphqlAPIs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListGraphqlAPIsResponse.proto b/fixture/ListGraphqlAPIsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGraphqlAPIsResponse.proto
diff --git a/fixture/ListResolvers.yaml b/fixture/ListResolvers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListResolvers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListResolversResponse.proto b/fixture/ListResolversResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListResolversResponse.proto
diff --git a/fixture/ListTypes.yaml b/fixture/ListTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTypesResponse.proto b/fixture/ListTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTypesResponse.proto
diff --git a/fixture/StartSchemaCreation.yaml b/fixture/StartSchemaCreation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartSchemaCreation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartSchemaCreationResponse.proto b/fixture/StartSchemaCreationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartSchemaCreationResponse.proto
diff --git a/fixture/UpdateAPIKey.yaml b/fixture/UpdateAPIKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAPIKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateAPIKeyResponse.proto b/fixture/UpdateAPIKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAPIKeyResponse.proto
diff --git a/fixture/UpdateDataSource.yaml b/fixture/UpdateDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDataSourceResponse.proto b/fixture/UpdateDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataSourceResponse.proto
diff --git a/fixture/UpdateGraphqlAPI.yaml b/fixture/UpdateGraphqlAPI.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGraphqlAPI.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateGraphqlAPIResponse.proto b/fixture/UpdateGraphqlAPIResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGraphqlAPIResponse.proto
diff --git a/fixture/UpdateResolver.yaml b/fixture/UpdateResolver.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResolver.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateResolverResponse.proto b/fixture/UpdateResolverResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResolverResponse.proto
diff --git a/fixture/UpdateType.yaml b/fixture/UpdateType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appsync/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appsync.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateTypeResponse.proto b/fixture/UpdateTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTypeResponse.proto
diff --git a/gen/Network/AWS/AppSync.hs b/gen/Network/AWS/AppSync.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync.hs
@@ -0,0 +1,314 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- AWS AppSync provides API actions for creating and interacting with data sources using GraphQL from your application.
+--
+--
+module Network.AWS.AppSync
+    (
+    -- * Service Configuration
+      appSync
+
+    -- * Errors
+    -- $errors
+
+    -- ** APIKeyValidityOutOfBoundsException
+    , _APIKeyValidityOutOfBoundsException
+
+    -- ** APIKeyLimitExceededException
+    , _APIKeyLimitExceededException
+
+    -- ** APILimitExceededException
+    , _APILimitExceededException
+
+    -- ** NotFoundException
+    , _NotFoundException
+
+    -- ** GraphQLSchemaException
+    , _GraphQLSchemaException
+
+    -- ** ConcurrentModificationException
+    , _ConcurrentModificationException
+
+    -- ** InternalFailureException
+    , _InternalFailureException
+
+    -- ** UnauthorizedException
+    , _UnauthorizedException
+
+    -- ** BadRequestException
+    , _BadRequestException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** UpdateDataSource
+    , module Network.AWS.AppSync.UpdateDataSource
+
+    -- ** DeleteDataSource
+    , module Network.AWS.AppSync.DeleteDataSource
+
+    -- ** CreateType
+    , module Network.AWS.AppSync.CreateType
+
+    -- ** GetGraphqlAPI
+    , module Network.AWS.AppSync.GetGraphqlAPI
+
+    -- ** CreateGraphqlAPI
+    , module Network.AWS.AppSync.CreateGraphqlAPI
+
+    -- ** StartSchemaCreation
+    , module Network.AWS.AppSync.StartSchemaCreation
+
+    -- ** DeleteGraphqlAPI
+    , module Network.AWS.AppSync.DeleteGraphqlAPI
+
+    -- ** UpdateGraphqlAPI
+    , module Network.AWS.AppSync.UpdateGraphqlAPI
+
+    -- ** GetIntrospectionSchema
+    , module Network.AWS.AppSync.GetIntrospectionSchema
+
+    -- ** GetDataSource
+    , module Network.AWS.AppSync.GetDataSource
+
+    -- ** DeleteAPIKey
+    , module Network.AWS.AppSync.DeleteAPIKey
+
+    -- ** UpdateAPIKey
+    , module Network.AWS.AppSync.UpdateAPIKey
+
+    -- ** UpdateType
+    , module Network.AWS.AppSync.UpdateType
+
+    -- ** DeleteType
+    , module Network.AWS.AppSync.DeleteType
+
+    -- ** CreateDataSource
+    , module Network.AWS.AppSync.CreateDataSource
+
+    -- ** ListTypes
+    , module Network.AWS.AppSync.ListTypes
+
+    -- ** ListDataSources
+    , module Network.AWS.AppSync.ListDataSources
+
+    -- ** UpdateResolver
+    , module Network.AWS.AppSync.UpdateResolver
+
+    -- ** DeleteResolver
+    , module Network.AWS.AppSync.DeleteResolver
+
+    -- ** ListResolvers
+    , module Network.AWS.AppSync.ListResolvers
+
+    -- ** CreateResolver
+    , module Network.AWS.AppSync.CreateResolver
+
+    -- ** GetSchemaCreationStatus
+    , module Network.AWS.AppSync.GetSchemaCreationStatus
+
+    -- ** ListGraphqlAPIs
+    , module Network.AWS.AppSync.ListGraphqlAPIs
+
+    -- ** GetResolver
+    , module Network.AWS.AppSync.GetResolver
+
+    -- ** CreateAPIKey
+    , module Network.AWS.AppSync.CreateAPIKey
+
+    -- ** ListAPIKeys
+    , module Network.AWS.AppSync.ListAPIKeys
+
+    -- ** GetType
+    , module Network.AWS.AppSync.GetType
+
+    -- * Types
+
+    -- ** AuthenticationType
+    , AuthenticationType (..)
+
+    -- ** DataSourceType
+    , DataSourceType (..)
+
+    -- ** DefaultAction
+    , DefaultAction (..)
+
+    -- ** FieldLogLevel
+    , FieldLogLevel (..)
+
+    -- ** OutputType
+    , OutputType (..)
+
+    -- ** SchemaStatus
+    , SchemaStatus (..)
+
+    -- ** TypeDefinitionFormat
+    , TypeDefinitionFormat (..)
+
+    -- ** APIKey
+    , APIKey
+    , apiKey
+    , akExpires
+    , akId
+    , akDescription
+
+    -- ** DataSource
+    , DataSource
+    , dataSource
+    , dsServiceRoleARN
+    , dsDataSourceARN
+    , dsDynamodbConfig
+    , dsName
+    , dsLambdaConfig
+    , dsType
+    , dsDescription
+    , dsElasticsearchConfig
+
+    -- ** DynamodbDataSourceConfig
+    , DynamodbDataSourceConfig
+    , dynamodbDataSourceConfig
+    , ddscUseCallerCredentials
+    , ddscTableName
+    , ddscAwsRegion
+
+    -- ** ElasticsearchDataSourceConfig
+    , ElasticsearchDataSourceConfig
+    , elasticsearchDataSourceConfig
+    , edscEndpoint
+    , edscAwsRegion
+
+    -- ** GraphqlAPI
+    , GraphqlAPI
+    , graphqlAPI
+    , gaArn
+    , gaApiId
+    , gaUris
+    , gaOpenIdConnectConfig
+    , gaName
+    , gaUserPoolConfig
+    , gaAuthenticationType
+    , gaLogConfig
+
+    -- ** LambdaDataSourceConfig
+    , LambdaDataSourceConfig
+    , lambdaDataSourceConfig
+    , ldscLambdaFunctionARN
+
+    -- ** LogConfig
+    , LogConfig
+    , logConfig
+    , lcFieldLogLevel
+    , lcCloudWatchLogsRoleARN
+
+    -- ** OpenIdConnectConfig
+    , OpenIdConnectConfig
+    , openIdConnectConfig
+    , oiccAuthTTL
+    , oiccClientId
+    , oiccIatTTL
+    , oiccIssuer
+
+    -- ** Resolver
+    , Resolver
+    , resolver
+    , rTypeName
+    , rDataSourceName
+    , rRequestMappingTemplate
+    , rResolverARN
+    , rResponseMappingTemplate
+    , rFieldName
+
+    -- ** Type
+    , Type
+    , type'
+    , tArn
+    , tDefinition
+    , tFormat
+    , tName
+    , tDescription
+
+    -- ** UserPoolConfig
+    , UserPoolConfig
+    , userPoolConfig
+    , upcAppIdClientRegex
+    , upcUserPoolId
+    , upcAwsRegion
+    , upcDefaultAction
+    ) where
+
+import Network.AWS.AppSync.CreateAPIKey
+import Network.AWS.AppSync.CreateDataSource
+import Network.AWS.AppSync.CreateGraphqlAPI
+import Network.AWS.AppSync.CreateResolver
+import Network.AWS.AppSync.CreateType
+import Network.AWS.AppSync.DeleteAPIKey
+import Network.AWS.AppSync.DeleteDataSource
+import Network.AWS.AppSync.DeleteGraphqlAPI
+import Network.AWS.AppSync.DeleteResolver
+import Network.AWS.AppSync.DeleteType
+import Network.AWS.AppSync.GetDataSource
+import Network.AWS.AppSync.GetGraphqlAPI
+import Network.AWS.AppSync.GetIntrospectionSchema
+import Network.AWS.AppSync.GetResolver
+import Network.AWS.AppSync.GetSchemaCreationStatus
+import Network.AWS.AppSync.GetType
+import Network.AWS.AppSync.ListAPIKeys
+import Network.AWS.AppSync.ListDataSources
+import Network.AWS.AppSync.ListGraphqlAPIs
+import Network.AWS.AppSync.ListResolvers
+import Network.AWS.AppSync.ListTypes
+import Network.AWS.AppSync.StartSchemaCreation
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.UpdateAPIKey
+import Network.AWS.AppSync.UpdateDataSource
+import Network.AWS.AppSync.UpdateGraphqlAPI
+import Network.AWS.AppSync.UpdateResolver
+import Network.AWS.AppSync.UpdateType
+import Network.AWS.AppSync.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'AppSync'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/AppSync/CreateAPIKey.hs b/gen/Network/AWS/AppSync/CreateAPIKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/CreateAPIKey.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.CreateAPIKey
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a unique key that you can distribute to clients who are executing your API.
+--
+--
+module Network.AWS.AppSync.CreateAPIKey
+    (
+    -- * Creating a Request
+      createAPIKey
+    , CreateAPIKey
+    -- * Request Lenses
+    , cakExpires
+    , cakDescription
+    , cakApiId
+
+    -- * Destructuring the Response
+    , createAPIKeyResponse
+    , CreateAPIKeyResponse
+    -- * Response Lenses
+    , cakrsApiKey
+    , cakrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createAPIKey' smart constructor.
+data CreateAPIKey = CreateAPIKey'
+  { _cakExpires     :: !(Maybe Integer)
+  , _cakDescription :: !(Maybe Text)
+  , _cakApiId       :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateAPIKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cakExpires' - The time from creation time after which the API key expires. The date is represented as seconds since the epoch, rounded down to the nearest hour. The default value for this parameter is 7 days from creation time. For more information, see .
+--
+-- * 'cakDescription' - A description of the purpose of the API key.
+--
+-- * 'cakApiId' - The ID for your GraphQL API.
+createAPIKey
+    :: Text -- ^ 'cakApiId'
+    -> CreateAPIKey
+createAPIKey pApiId_ =
+  CreateAPIKey'
+    {_cakExpires = Nothing, _cakDescription = Nothing, _cakApiId = pApiId_}
+
+
+-- | The time from creation time after which the API key expires. The date is represented as seconds since the epoch, rounded down to the nearest hour. The default value for this parameter is 7 days from creation time. For more information, see .
+cakExpires :: Lens' CreateAPIKey (Maybe Integer)
+cakExpires = lens _cakExpires (\ s a -> s{_cakExpires = a})
+
+-- | A description of the purpose of the API key.
+cakDescription :: Lens' CreateAPIKey (Maybe Text)
+cakDescription = lens _cakDescription (\ s a -> s{_cakDescription = a})
+
+-- | The ID for your GraphQL API.
+cakApiId :: Lens' CreateAPIKey Text
+cakApiId = lens _cakApiId (\ s a -> s{_cakApiId = a})
+
+instance AWSRequest CreateAPIKey where
+        type Rs CreateAPIKey = CreateAPIKeyResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateAPIKeyResponse' <$>
+                   (x .?> "apiKey") <*> (pure (fromEnum s)))
+
+instance Hashable CreateAPIKey where
+
+instance NFData CreateAPIKey where
+
+instance ToHeaders CreateAPIKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateAPIKey where
+        toJSON CreateAPIKey'{..}
+          = object
+              (catMaybes
+                 [("expires" .=) <$> _cakExpires,
+                  ("description" .=) <$> _cakDescription])
+
+instance ToPath CreateAPIKey where
+        toPath CreateAPIKey'{..}
+          = mconcat ["/v1/apis/", toBS _cakApiId, "/apikeys"]
+
+instance ToQuery CreateAPIKey where
+        toQuery = const mempty
+
+-- | /See:/ 'createAPIKeyResponse' smart constructor.
+data CreateAPIKeyResponse = CreateAPIKeyResponse'
+  { _cakrsApiKey         :: !(Maybe APIKey)
+  , _cakrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateAPIKeyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cakrsApiKey' - The API key.
+--
+-- * 'cakrsResponseStatus' - -- | The response status code.
+createAPIKeyResponse
+    :: Int -- ^ 'cakrsResponseStatus'
+    -> CreateAPIKeyResponse
+createAPIKeyResponse pResponseStatus_ =
+  CreateAPIKeyResponse'
+    {_cakrsApiKey = Nothing, _cakrsResponseStatus = pResponseStatus_}
+
+
+-- | The API key.
+cakrsApiKey :: Lens' CreateAPIKeyResponse (Maybe APIKey)
+cakrsApiKey = lens _cakrsApiKey (\ s a -> s{_cakrsApiKey = a})
+
+-- | -- | The response status code.
+cakrsResponseStatus :: Lens' CreateAPIKeyResponse Int
+cakrsResponseStatus = lens _cakrsResponseStatus (\ s a -> s{_cakrsResponseStatus = a})
+
+instance NFData CreateAPIKeyResponse where
diff --git a/gen/Network/AWS/AppSync/CreateDataSource.hs b/gen/Network/AWS/AppSync/CreateDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/CreateDataSource.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.CreateDataSource
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a @DataSource@ object.
+--
+--
+module Network.AWS.AppSync.CreateDataSource
+    (
+    -- * Creating a Request
+      createDataSource
+    , CreateDataSource
+    -- * Request Lenses
+    , cdsServiceRoleARN
+    , cdsDynamodbConfig
+    , cdsLambdaConfig
+    , cdsDescription
+    , cdsElasticsearchConfig
+    , cdsApiId
+    , cdsName
+    , cdsType
+
+    -- * Destructuring the Response
+    , createDataSourceResponse
+    , CreateDataSourceResponse
+    -- * Response Lenses
+    , cdsrsDataSource
+    , cdsrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createDataSource' smart constructor.
+data CreateDataSource = CreateDataSource'
+  { _cdsServiceRoleARN      :: !(Maybe Text)
+  , _cdsDynamodbConfig      :: !(Maybe DynamodbDataSourceConfig)
+  , _cdsLambdaConfig        :: !(Maybe LambdaDataSourceConfig)
+  , _cdsDescription         :: !(Maybe Text)
+  , _cdsElasticsearchConfig :: !(Maybe ElasticsearchDataSourceConfig)
+  , _cdsApiId               :: !Text
+  , _cdsName                :: !Text
+  , _cdsType                :: !DataSourceType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateDataSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdsServiceRoleARN' - The IAM service role ARN for the data source. The system assumes this role when accessing the data source.
+--
+-- * 'cdsDynamodbConfig' - DynamoDB settings.
+--
+-- * 'cdsLambdaConfig' - AWS Lambda settings.
+--
+-- * 'cdsDescription' - A description of the @DataSource@ .
+--
+-- * 'cdsElasticsearchConfig' - Amazon Elasticsearch settings.
+--
+-- * 'cdsApiId' - The API ID for the GraphQL API for the @DataSource@ .
+--
+-- * 'cdsName' - A user-supplied name for the @DataSource@ .
+--
+-- * 'cdsType' - The type of the @DataSource@ .
+createDataSource
+    :: Text -- ^ 'cdsApiId'
+    -> Text -- ^ 'cdsName'
+    -> DataSourceType -- ^ 'cdsType'
+    -> CreateDataSource
+createDataSource pApiId_ pName_ pType_ =
+  CreateDataSource'
+    { _cdsServiceRoleARN = Nothing
+    , _cdsDynamodbConfig = Nothing
+    , _cdsLambdaConfig = Nothing
+    , _cdsDescription = Nothing
+    , _cdsElasticsearchConfig = Nothing
+    , _cdsApiId = pApiId_
+    , _cdsName = pName_
+    , _cdsType = pType_
+    }
+
+
+-- | The IAM service role ARN for the data source. The system assumes this role when accessing the data source.
+cdsServiceRoleARN :: Lens' CreateDataSource (Maybe Text)
+cdsServiceRoleARN = lens _cdsServiceRoleARN (\ s a -> s{_cdsServiceRoleARN = a})
+
+-- | DynamoDB settings.
+cdsDynamodbConfig :: Lens' CreateDataSource (Maybe DynamodbDataSourceConfig)
+cdsDynamodbConfig = lens _cdsDynamodbConfig (\ s a -> s{_cdsDynamodbConfig = a})
+
+-- | AWS Lambda settings.
+cdsLambdaConfig :: Lens' CreateDataSource (Maybe LambdaDataSourceConfig)
+cdsLambdaConfig = lens _cdsLambdaConfig (\ s a -> s{_cdsLambdaConfig = a})
+
+-- | A description of the @DataSource@ .
+cdsDescription :: Lens' CreateDataSource (Maybe Text)
+cdsDescription = lens _cdsDescription (\ s a -> s{_cdsDescription = a})
+
+-- | Amazon Elasticsearch settings.
+cdsElasticsearchConfig :: Lens' CreateDataSource (Maybe ElasticsearchDataSourceConfig)
+cdsElasticsearchConfig = lens _cdsElasticsearchConfig (\ s a -> s{_cdsElasticsearchConfig = a})
+
+-- | The API ID for the GraphQL API for the @DataSource@ .
+cdsApiId :: Lens' CreateDataSource Text
+cdsApiId = lens _cdsApiId (\ s a -> s{_cdsApiId = a})
+
+-- | A user-supplied name for the @DataSource@ .
+cdsName :: Lens' CreateDataSource Text
+cdsName = lens _cdsName (\ s a -> s{_cdsName = a})
+
+-- | The type of the @DataSource@ .
+cdsType :: Lens' CreateDataSource DataSourceType
+cdsType = lens _cdsType (\ s a -> s{_cdsType = a})
+
+instance AWSRequest CreateDataSource where
+        type Rs CreateDataSource = CreateDataSourceResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateDataSourceResponse' <$>
+                   (x .?> "dataSource") <*> (pure (fromEnum s)))
+
+instance Hashable CreateDataSource where
+
+instance NFData CreateDataSource where
+
+instance ToHeaders CreateDataSource where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateDataSource where
+        toJSON CreateDataSource'{..}
+          = object
+              (catMaybes
+                 [("serviceRoleArn" .=) <$> _cdsServiceRoleARN,
+                  ("dynamodbConfig" .=) <$> _cdsDynamodbConfig,
+                  ("lambdaConfig" .=) <$> _cdsLambdaConfig,
+                  ("description" .=) <$> _cdsDescription,
+                  ("elasticsearchConfig" .=) <$>
+                    _cdsElasticsearchConfig,
+                  Just ("name" .= _cdsName),
+                  Just ("type" .= _cdsType)])
+
+instance ToPath CreateDataSource where
+        toPath CreateDataSource'{..}
+          = mconcat
+              ["/v1/apis/", toBS _cdsApiId, "/datasources"]
+
+instance ToQuery CreateDataSource where
+        toQuery = const mempty
+
+-- | /See:/ 'createDataSourceResponse' smart constructor.
+data CreateDataSourceResponse = CreateDataSourceResponse'
+  { _cdsrsDataSource     :: !(Maybe DataSource)
+  , _cdsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateDataSourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdsrsDataSource' - The @DataSource@ object.
+--
+-- * 'cdsrsResponseStatus' - -- | The response status code.
+createDataSourceResponse
+    :: Int -- ^ 'cdsrsResponseStatus'
+    -> CreateDataSourceResponse
+createDataSourceResponse pResponseStatus_ =
+  CreateDataSourceResponse'
+    {_cdsrsDataSource = Nothing, _cdsrsResponseStatus = pResponseStatus_}
+
+
+-- | The @DataSource@ object.
+cdsrsDataSource :: Lens' CreateDataSourceResponse (Maybe DataSource)
+cdsrsDataSource = lens _cdsrsDataSource (\ s a -> s{_cdsrsDataSource = a})
+
+-- | -- | The response status code.
+cdsrsResponseStatus :: Lens' CreateDataSourceResponse Int
+cdsrsResponseStatus = lens _cdsrsResponseStatus (\ s a -> s{_cdsrsResponseStatus = a})
+
+instance NFData CreateDataSourceResponse where
diff --git a/gen/Network/AWS/AppSync/CreateGraphqlAPI.hs b/gen/Network/AWS/AppSync/CreateGraphqlAPI.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/CreateGraphqlAPI.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.CreateGraphqlAPI
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a @GraphqlApi@ object.
+--
+--
+module Network.AWS.AppSync.CreateGraphqlAPI
+    (
+    -- * Creating a Request
+      createGraphqlAPI
+    , CreateGraphqlAPI
+    -- * Request Lenses
+    , cgaOpenIdConnectConfig
+    , cgaUserPoolConfig
+    , cgaLogConfig
+    , cgaName
+    , cgaAuthenticationType
+
+    -- * Destructuring the Response
+    , createGraphqlAPIResponse
+    , CreateGraphqlAPIResponse
+    -- * Response Lenses
+    , cgarsGraphqlAPI
+    , cgarsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createGraphqlAPI' smart constructor.
+data CreateGraphqlAPI = CreateGraphqlAPI'
+  { _cgaOpenIdConnectConfig :: !(Maybe OpenIdConnectConfig)
+  , _cgaUserPoolConfig      :: !(Maybe UserPoolConfig)
+  , _cgaLogConfig           :: !(Maybe LogConfig)
+  , _cgaName                :: !Text
+  , _cgaAuthenticationType  :: !AuthenticationType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateGraphqlAPI' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgaOpenIdConnectConfig' - The Open Id Connect configuration configuration.
+--
+-- * 'cgaUserPoolConfig' - The Amazon Cognito User Pool configuration.
+--
+-- * 'cgaLogConfig' - The Amazon CloudWatch logs configuration.
+--
+-- * 'cgaName' - A user-supplied name for the @GraphqlApi@ .
+--
+-- * 'cgaAuthenticationType' - The authentication type: API key, IAM, or Amazon Cognito User Pools.
+createGraphqlAPI
+    :: Text -- ^ 'cgaName'
+    -> AuthenticationType -- ^ 'cgaAuthenticationType'
+    -> CreateGraphqlAPI
+createGraphqlAPI pName_ pAuthenticationType_ =
+  CreateGraphqlAPI'
+    { _cgaOpenIdConnectConfig = Nothing
+    , _cgaUserPoolConfig = Nothing
+    , _cgaLogConfig = Nothing
+    , _cgaName = pName_
+    , _cgaAuthenticationType = pAuthenticationType_
+    }
+
+
+-- | The Open Id Connect configuration configuration.
+cgaOpenIdConnectConfig :: Lens' CreateGraphqlAPI (Maybe OpenIdConnectConfig)
+cgaOpenIdConnectConfig = lens _cgaOpenIdConnectConfig (\ s a -> s{_cgaOpenIdConnectConfig = a})
+
+-- | The Amazon Cognito User Pool configuration.
+cgaUserPoolConfig :: Lens' CreateGraphqlAPI (Maybe UserPoolConfig)
+cgaUserPoolConfig = lens _cgaUserPoolConfig (\ s a -> s{_cgaUserPoolConfig = a})
+
+-- | The Amazon CloudWatch logs configuration.
+cgaLogConfig :: Lens' CreateGraphqlAPI (Maybe LogConfig)
+cgaLogConfig = lens _cgaLogConfig (\ s a -> s{_cgaLogConfig = a})
+
+-- | A user-supplied name for the @GraphqlApi@ .
+cgaName :: Lens' CreateGraphqlAPI Text
+cgaName = lens _cgaName (\ s a -> s{_cgaName = a})
+
+-- | The authentication type: API key, IAM, or Amazon Cognito User Pools.
+cgaAuthenticationType :: Lens' CreateGraphqlAPI AuthenticationType
+cgaAuthenticationType = lens _cgaAuthenticationType (\ s a -> s{_cgaAuthenticationType = a})
+
+instance AWSRequest CreateGraphqlAPI where
+        type Rs CreateGraphqlAPI = CreateGraphqlAPIResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateGraphqlAPIResponse' <$>
+                   (x .?> "graphqlApi") <*> (pure (fromEnum s)))
+
+instance Hashable CreateGraphqlAPI where
+
+instance NFData CreateGraphqlAPI where
+
+instance ToHeaders CreateGraphqlAPI where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateGraphqlAPI where
+        toJSON CreateGraphqlAPI'{..}
+          = object
+              (catMaybes
+                 [("openIDConnectConfig" .=) <$>
+                    _cgaOpenIdConnectConfig,
+                  ("userPoolConfig" .=) <$> _cgaUserPoolConfig,
+                  ("logConfig" .=) <$> _cgaLogConfig,
+                  Just ("name" .= _cgaName),
+                  Just
+                    ("authenticationType" .= _cgaAuthenticationType)])
+
+instance ToPath CreateGraphqlAPI where
+        toPath = const "/v1/apis"
+
+instance ToQuery CreateGraphqlAPI where
+        toQuery = const mempty
+
+-- | /See:/ 'createGraphqlAPIResponse' smart constructor.
+data CreateGraphqlAPIResponse = CreateGraphqlAPIResponse'
+  { _cgarsGraphqlAPI     :: !(Maybe GraphqlAPI)
+  , _cgarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateGraphqlAPIResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgarsGraphqlAPI' - The @GraphqlApi@ .
+--
+-- * 'cgarsResponseStatus' - -- | The response status code.
+createGraphqlAPIResponse
+    :: Int -- ^ 'cgarsResponseStatus'
+    -> CreateGraphqlAPIResponse
+createGraphqlAPIResponse pResponseStatus_ =
+  CreateGraphqlAPIResponse'
+    {_cgarsGraphqlAPI = Nothing, _cgarsResponseStatus = pResponseStatus_}
+
+
+-- | The @GraphqlApi@ .
+cgarsGraphqlAPI :: Lens' CreateGraphqlAPIResponse (Maybe GraphqlAPI)
+cgarsGraphqlAPI = lens _cgarsGraphqlAPI (\ s a -> s{_cgarsGraphqlAPI = a})
+
+-- | -- | The response status code.
+cgarsResponseStatus :: Lens' CreateGraphqlAPIResponse Int
+cgarsResponseStatus = lens _cgarsResponseStatus (\ s a -> s{_cgarsResponseStatus = a})
+
+instance NFData CreateGraphqlAPIResponse where
diff --git a/gen/Network/AWS/AppSync/CreateResolver.hs b/gen/Network/AWS/AppSync/CreateResolver.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/CreateResolver.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.CreateResolver
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a @Resolver@ object.
+--
+--
+-- A resolver converts incoming requests into a format that a data source can understand and converts the data source's responses into GraphQL.
+--
+module Network.AWS.AppSync.CreateResolver
+    (
+    -- * Creating a Request
+      createResolver
+    , CreateResolver
+    -- * Request Lenses
+    , crResponseMappingTemplate
+    , crApiId
+    , crTypeName
+    , crFieldName
+    , crDataSourceName
+    , crRequestMappingTemplate
+
+    -- * Destructuring the Response
+    , createResolverResponse
+    , CreateResolverResponse
+    -- * Response Lenses
+    , crrsResolver
+    , crrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createResolver' smart constructor.
+data CreateResolver = CreateResolver'
+  { _crResponseMappingTemplate :: !(Maybe Text)
+  , _crApiId                   :: !Text
+  , _crTypeName                :: !Text
+  , _crFieldName               :: !Text
+  , _crDataSourceName          :: !Text
+  , _crRequestMappingTemplate  :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateResolver' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crResponseMappingTemplate' - The mapping template to be used for responses from the data source.
+--
+-- * 'crApiId' - The ID for the GraphQL API for which the resolver is being created.
+--
+-- * 'crTypeName' - The name of the @Type@ .
+--
+-- * 'crFieldName' - The name of the field to attach the resolver to.
+--
+-- * 'crDataSourceName' - The name of the data source for which the resolver is being created.
+--
+-- * 'crRequestMappingTemplate' - The mapping template to be used for requests. A resolver uses a request mapping template to convert a GraphQL expression into a format that a data source can understand. Mapping templates are written in Apache Velocity Template Language (VTL).
+createResolver
+    :: Text -- ^ 'crApiId'
+    -> Text -- ^ 'crTypeName'
+    -> Text -- ^ 'crFieldName'
+    -> Text -- ^ 'crDataSourceName'
+    -> Text -- ^ 'crRequestMappingTemplate'
+    -> CreateResolver
+createResolver pApiId_ pTypeName_ pFieldName_ pDataSourceName_ pRequestMappingTemplate_ =
+  CreateResolver'
+    { _crResponseMappingTemplate = Nothing
+    , _crApiId = pApiId_
+    , _crTypeName = pTypeName_
+    , _crFieldName = pFieldName_
+    , _crDataSourceName = pDataSourceName_
+    , _crRequestMappingTemplate = pRequestMappingTemplate_
+    }
+
+
+-- | The mapping template to be used for responses from the data source.
+crResponseMappingTemplate :: Lens' CreateResolver (Maybe Text)
+crResponseMappingTemplate = lens _crResponseMappingTemplate (\ s a -> s{_crResponseMappingTemplate = a})
+
+-- | The ID for the GraphQL API for which the resolver is being created.
+crApiId :: Lens' CreateResolver Text
+crApiId = lens _crApiId (\ s a -> s{_crApiId = a})
+
+-- | The name of the @Type@ .
+crTypeName :: Lens' CreateResolver Text
+crTypeName = lens _crTypeName (\ s a -> s{_crTypeName = a})
+
+-- | The name of the field to attach the resolver to.
+crFieldName :: Lens' CreateResolver Text
+crFieldName = lens _crFieldName (\ s a -> s{_crFieldName = a})
+
+-- | The name of the data source for which the resolver is being created.
+crDataSourceName :: Lens' CreateResolver Text
+crDataSourceName = lens _crDataSourceName (\ s a -> s{_crDataSourceName = a})
+
+-- | The mapping template to be used for requests. A resolver uses a request mapping template to convert a GraphQL expression into a format that a data source can understand. Mapping templates are written in Apache Velocity Template Language (VTL).
+crRequestMappingTemplate :: Lens' CreateResolver Text
+crRequestMappingTemplate = lens _crRequestMappingTemplate (\ s a -> s{_crRequestMappingTemplate = a})
+
+instance AWSRequest CreateResolver where
+        type Rs CreateResolver = CreateResolverResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateResolverResponse' <$>
+                   (x .?> "resolver") <*> (pure (fromEnum s)))
+
+instance Hashable CreateResolver where
+
+instance NFData CreateResolver where
+
+instance ToHeaders CreateResolver where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateResolver where
+        toJSON CreateResolver'{..}
+          = object
+              (catMaybes
+                 [("responseMappingTemplate" .=) <$>
+                    _crResponseMappingTemplate,
+                  Just ("fieldName" .= _crFieldName),
+                  Just ("dataSourceName" .= _crDataSourceName),
+                  Just
+                    ("requestMappingTemplate" .=
+                       _crRequestMappingTemplate)])
+
+instance ToPath CreateResolver where
+        toPath CreateResolver'{..}
+          = mconcat
+              ["/v1/apis/", toBS _crApiId, "/types/",
+               toBS _crTypeName, "/resolvers"]
+
+instance ToQuery CreateResolver where
+        toQuery = const mempty
+
+-- | /See:/ 'createResolverResponse' smart constructor.
+data CreateResolverResponse = CreateResolverResponse'
+  { _crrsResolver       :: !(Maybe Resolver)
+  , _crrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateResolverResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crrsResolver' - The @Resolver@ object.
+--
+-- * 'crrsResponseStatus' - -- | The response status code.
+createResolverResponse
+    :: Int -- ^ 'crrsResponseStatus'
+    -> CreateResolverResponse
+createResolverResponse pResponseStatus_ =
+  CreateResolverResponse'
+    {_crrsResolver = Nothing, _crrsResponseStatus = pResponseStatus_}
+
+
+-- | The @Resolver@ object.
+crrsResolver :: Lens' CreateResolverResponse (Maybe Resolver)
+crrsResolver = lens _crrsResolver (\ s a -> s{_crrsResolver = a})
+
+-- | -- | The response status code.
+crrsResponseStatus :: Lens' CreateResolverResponse Int
+crrsResponseStatus = lens _crrsResponseStatus (\ s a -> s{_crrsResponseStatus = a})
+
+instance NFData CreateResolverResponse where
diff --git a/gen/Network/AWS/AppSync/CreateType.hs b/gen/Network/AWS/AppSync/CreateType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/CreateType.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.CreateType
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a @Type@ object.
+--
+--
+module Network.AWS.AppSync.CreateType
+    (
+    -- * Creating a Request
+      createType
+    , CreateType
+    -- * Request Lenses
+    , ctApiId
+    , ctDefinition
+    , ctFormat
+
+    -- * Destructuring the Response
+    , createTypeResponse
+    , CreateTypeResponse
+    -- * Response Lenses
+    , ctrsType
+    , ctrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createType' smart constructor.
+data CreateType = CreateType'
+  { _ctApiId      :: !Text
+  , _ctDefinition :: !Text
+  , _ctFormat     :: !TypeDefinitionFormat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctApiId' - The API ID.
+--
+-- * 'ctDefinition' - The type definition, in GraphQL Schema Definition Language (SDL) format. For more information, see the <http://graphql.org/learn/schema/ GraphQL SDL documentation> .
+--
+-- * 'ctFormat' - The type format: SDL or JSON.
+createType
+    :: Text -- ^ 'ctApiId'
+    -> Text -- ^ 'ctDefinition'
+    -> TypeDefinitionFormat -- ^ 'ctFormat'
+    -> CreateType
+createType pApiId_ pDefinition_ pFormat_ =
+  CreateType'
+    {_ctApiId = pApiId_, _ctDefinition = pDefinition_, _ctFormat = pFormat_}
+
+
+-- | The API ID.
+ctApiId :: Lens' CreateType Text
+ctApiId = lens _ctApiId (\ s a -> s{_ctApiId = a})
+
+-- | The type definition, in GraphQL Schema Definition Language (SDL) format. For more information, see the <http://graphql.org/learn/schema/ GraphQL SDL documentation> .
+ctDefinition :: Lens' CreateType Text
+ctDefinition = lens _ctDefinition (\ s a -> s{_ctDefinition = a})
+
+-- | The type format: SDL or JSON.
+ctFormat :: Lens' CreateType TypeDefinitionFormat
+ctFormat = lens _ctFormat (\ s a -> s{_ctFormat = a})
+
+instance AWSRequest CreateType where
+        type Rs CreateType = CreateTypeResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateTypeResponse' <$>
+                   (x .?> "type") <*> (pure (fromEnum s)))
+
+instance Hashable CreateType where
+
+instance NFData CreateType where
+
+instance ToHeaders CreateType where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateType where
+        toJSON CreateType'{..}
+          = object
+              (catMaybes
+                 [Just ("definition" .= _ctDefinition),
+                  Just ("format" .= _ctFormat)])
+
+instance ToPath CreateType where
+        toPath CreateType'{..}
+          = mconcat ["/v1/apis/", toBS _ctApiId, "/types"]
+
+instance ToQuery CreateType where
+        toQuery = const mempty
+
+-- | /See:/ 'createTypeResponse' smart constructor.
+data CreateTypeResponse = CreateTypeResponse'
+  { _ctrsType           :: !(Maybe Type)
+  , _ctrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctrsType' - The @Type@ object.
+--
+-- * 'ctrsResponseStatus' - -- | The response status code.
+createTypeResponse
+    :: Int -- ^ 'ctrsResponseStatus'
+    -> CreateTypeResponse
+createTypeResponse pResponseStatus_ =
+  CreateTypeResponse'
+    {_ctrsType = Nothing, _ctrsResponseStatus = pResponseStatus_}
+
+
+-- | The @Type@ object.
+ctrsType :: Lens' CreateTypeResponse (Maybe Type)
+ctrsType = lens _ctrsType (\ s a -> s{_ctrsType = a})
+
+-- | -- | The response status code.
+ctrsResponseStatus :: Lens' CreateTypeResponse Int
+ctrsResponseStatus = lens _ctrsResponseStatus (\ s a -> s{_ctrsResponseStatus = a})
+
+instance NFData CreateTypeResponse where
diff --git a/gen/Network/AWS/AppSync/DeleteAPIKey.hs b/gen/Network/AWS/AppSync/DeleteAPIKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/DeleteAPIKey.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.DeleteAPIKey
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an API key.
+--
+--
+module Network.AWS.AppSync.DeleteAPIKey
+    (
+    -- * Creating a Request
+      deleteAPIKey
+    , DeleteAPIKey
+    -- * Request Lenses
+    , dakApiId
+    , dakId
+
+    -- * Destructuring the Response
+    , deleteAPIKeyResponse
+    , DeleteAPIKeyResponse
+    -- * Response Lenses
+    , dakrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteAPIKey' smart constructor.
+data DeleteAPIKey = DeleteAPIKey'
+  { _dakApiId :: !Text
+  , _dakId    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteAPIKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dakApiId' - The API ID.
+--
+-- * 'dakId' - The ID for the API key.
+deleteAPIKey
+    :: Text -- ^ 'dakApiId'
+    -> Text -- ^ 'dakId'
+    -> DeleteAPIKey
+deleteAPIKey pApiId_ pId_ = DeleteAPIKey' {_dakApiId = pApiId_, _dakId = pId_}
+
+
+-- | The API ID.
+dakApiId :: Lens' DeleteAPIKey Text
+dakApiId = lens _dakApiId (\ s a -> s{_dakApiId = a})
+
+-- | The ID for the API key.
+dakId :: Lens' DeleteAPIKey Text
+dakId = lens _dakId (\ s a -> s{_dakId = a})
+
+instance AWSRequest DeleteAPIKey where
+        type Rs DeleteAPIKey = DeleteAPIKeyResponse
+        request = delete appSync
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteAPIKeyResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteAPIKey where
+
+instance NFData DeleteAPIKey where
+
+instance ToHeaders DeleteAPIKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteAPIKey where
+        toPath DeleteAPIKey'{..}
+          = mconcat
+              ["/v1/apis/", toBS _dakApiId, "/apikeys/",
+               toBS _dakId]
+
+instance ToQuery DeleteAPIKey where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteAPIKeyResponse' smart constructor.
+newtype DeleteAPIKeyResponse = DeleteAPIKeyResponse'
+  { _dakrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteAPIKeyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dakrsResponseStatus' - -- | The response status code.
+deleteAPIKeyResponse
+    :: Int -- ^ 'dakrsResponseStatus'
+    -> DeleteAPIKeyResponse
+deleteAPIKeyResponse pResponseStatus_ =
+  DeleteAPIKeyResponse' {_dakrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dakrsResponseStatus :: Lens' DeleteAPIKeyResponse Int
+dakrsResponseStatus = lens _dakrsResponseStatus (\ s a -> s{_dakrsResponseStatus = a})
+
+instance NFData DeleteAPIKeyResponse where
diff --git a/gen/Network/AWS/AppSync/DeleteDataSource.hs b/gen/Network/AWS/AppSync/DeleteDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/DeleteDataSource.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.DeleteDataSource
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a @DataSource@ object.
+--
+--
+module Network.AWS.AppSync.DeleteDataSource
+    (
+    -- * Creating a Request
+      deleteDataSource
+    , DeleteDataSource
+    -- * Request Lenses
+    , ddsApiId
+    , ddsName
+
+    -- * Destructuring the Response
+    , deleteDataSourceResponse
+    , DeleteDataSourceResponse
+    -- * Response Lenses
+    , ddsrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteDataSource' smart constructor.
+data DeleteDataSource = DeleteDataSource'
+  { _ddsApiId :: !Text
+  , _ddsName  :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDataSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddsApiId' - The API ID.
+--
+-- * 'ddsName' - The name of the data source.
+deleteDataSource
+    :: Text -- ^ 'ddsApiId'
+    -> Text -- ^ 'ddsName'
+    -> DeleteDataSource
+deleteDataSource pApiId_ pName_ =
+  DeleteDataSource' {_ddsApiId = pApiId_, _ddsName = pName_}
+
+
+-- | The API ID.
+ddsApiId :: Lens' DeleteDataSource Text
+ddsApiId = lens _ddsApiId (\ s a -> s{_ddsApiId = a})
+
+-- | The name of the data source.
+ddsName :: Lens' DeleteDataSource Text
+ddsName = lens _ddsName (\ s a -> s{_ddsName = a})
+
+instance AWSRequest DeleteDataSource where
+        type Rs DeleteDataSource = DeleteDataSourceResponse
+        request = delete appSync
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteDataSourceResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteDataSource where
+
+instance NFData DeleteDataSource where
+
+instance ToHeaders DeleteDataSource where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteDataSource where
+        toPath DeleteDataSource'{..}
+          = mconcat
+              ["/v1/apis/", toBS _ddsApiId, "/datasources/",
+               toBS _ddsName]
+
+instance ToQuery DeleteDataSource where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteDataSourceResponse' smart constructor.
+newtype DeleteDataSourceResponse = DeleteDataSourceResponse'
+  { _ddsrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDataSourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddsrsResponseStatus' - -- | The response status code.
+deleteDataSourceResponse
+    :: Int -- ^ 'ddsrsResponseStatus'
+    -> DeleteDataSourceResponse
+deleteDataSourceResponse pResponseStatus_ =
+  DeleteDataSourceResponse' {_ddsrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ddsrsResponseStatus :: Lens' DeleteDataSourceResponse Int
+ddsrsResponseStatus = lens _ddsrsResponseStatus (\ s a -> s{_ddsrsResponseStatus = a})
+
+instance NFData DeleteDataSourceResponse where
diff --git a/gen/Network/AWS/AppSync/DeleteGraphqlAPI.hs b/gen/Network/AWS/AppSync/DeleteGraphqlAPI.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/DeleteGraphqlAPI.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.DeleteGraphqlAPI
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a @GraphqlApi@ object.
+--
+--
+module Network.AWS.AppSync.DeleteGraphqlAPI
+    (
+    -- * Creating a Request
+      deleteGraphqlAPI
+    , DeleteGraphqlAPI
+    -- * Request Lenses
+    , dgaApiId
+
+    -- * Destructuring the Response
+    , deleteGraphqlAPIResponse
+    , DeleteGraphqlAPIResponse
+    -- * Response Lenses
+    , dgarsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteGraphqlAPI' smart constructor.
+newtype DeleteGraphqlAPI = DeleteGraphqlAPI'
+  { _dgaApiId :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteGraphqlAPI' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgaApiId' - The API ID.
+deleteGraphqlAPI
+    :: Text -- ^ 'dgaApiId'
+    -> DeleteGraphqlAPI
+deleteGraphqlAPI pApiId_ = DeleteGraphqlAPI' {_dgaApiId = pApiId_}
+
+
+-- | The API ID.
+dgaApiId :: Lens' DeleteGraphqlAPI Text
+dgaApiId = lens _dgaApiId (\ s a -> s{_dgaApiId = a})
+
+instance AWSRequest DeleteGraphqlAPI where
+        type Rs DeleteGraphqlAPI = DeleteGraphqlAPIResponse
+        request = delete appSync
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteGraphqlAPIResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteGraphqlAPI where
+
+instance NFData DeleteGraphqlAPI where
+
+instance ToHeaders DeleteGraphqlAPI where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteGraphqlAPI where
+        toPath DeleteGraphqlAPI'{..}
+          = mconcat ["/v1/apis/", toBS _dgaApiId]
+
+instance ToQuery DeleteGraphqlAPI where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteGraphqlAPIResponse' smart constructor.
+newtype DeleteGraphqlAPIResponse = DeleteGraphqlAPIResponse'
+  { _dgarsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteGraphqlAPIResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgarsResponseStatus' - -- | The response status code.
+deleteGraphqlAPIResponse
+    :: Int -- ^ 'dgarsResponseStatus'
+    -> DeleteGraphqlAPIResponse
+deleteGraphqlAPIResponse pResponseStatus_ =
+  DeleteGraphqlAPIResponse' {_dgarsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dgarsResponseStatus :: Lens' DeleteGraphqlAPIResponse Int
+dgarsResponseStatus = lens _dgarsResponseStatus (\ s a -> s{_dgarsResponseStatus = a})
+
+instance NFData DeleteGraphqlAPIResponse where
diff --git a/gen/Network/AWS/AppSync/DeleteResolver.hs b/gen/Network/AWS/AppSync/DeleteResolver.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/DeleteResolver.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.DeleteResolver
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a @Resolver@ object.
+--
+--
+module Network.AWS.AppSync.DeleteResolver
+    (
+    -- * Creating a Request
+      deleteResolver
+    , DeleteResolver
+    -- * Request Lenses
+    , drApiId
+    , drTypeName
+    , drFieldName
+
+    -- * Destructuring the Response
+    , deleteResolverResponse
+    , DeleteResolverResponse
+    -- * Response Lenses
+    , drrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteResolver' smart constructor.
+data DeleteResolver = DeleteResolver'
+  { _drApiId     :: !Text
+  , _drTypeName  :: !Text
+  , _drFieldName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteResolver' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drApiId' - The API ID.
+--
+-- * 'drTypeName' - The name of the resolver type.
+--
+-- * 'drFieldName' - The resolver field name.
+deleteResolver
+    :: Text -- ^ 'drApiId'
+    -> Text -- ^ 'drTypeName'
+    -> Text -- ^ 'drFieldName'
+    -> DeleteResolver
+deleteResolver pApiId_ pTypeName_ pFieldName_ =
+  DeleteResolver'
+    {_drApiId = pApiId_, _drTypeName = pTypeName_, _drFieldName = pFieldName_}
+
+
+-- | The API ID.
+drApiId :: Lens' DeleteResolver Text
+drApiId = lens _drApiId (\ s a -> s{_drApiId = a})
+
+-- | The name of the resolver type.
+drTypeName :: Lens' DeleteResolver Text
+drTypeName = lens _drTypeName (\ s a -> s{_drTypeName = a})
+
+-- | The resolver field name.
+drFieldName :: Lens' DeleteResolver Text
+drFieldName = lens _drFieldName (\ s a -> s{_drFieldName = a})
+
+instance AWSRequest DeleteResolver where
+        type Rs DeleteResolver = DeleteResolverResponse
+        request = delete appSync
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteResolverResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteResolver where
+
+instance NFData DeleteResolver where
+
+instance ToHeaders DeleteResolver where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteResolver where
+        toPath DeleteResolver'{..}
+          = mconcat
+              ["/v1/apis/", toBS _drApiId, "/types/",
+               toBS _drTypeName, "/resolvers/", toBS _drFieldName]
+
+instance ToQuery DeleteResolver where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteResolverResponse' smart constructor.
+newtype DeleteResolverResponse = DeleteResolverResponse'
+  { _drrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteResolverResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drrsResponseStatus' - -- | The response status code.
+deleteResolverResponse
+    :: Int -- ^ 'drrsResponseStatus'
+    -> DeleteResolverResponse
+deleteResolverResponse pResponseStatus_ =
+  DeleteResolverResponse' {_drrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+drrsResponseStatus :: Lens' DeleteResolverResponse Int
+drrsResponseStatus = lens _drrsResponseStatus (\ s a -> s{_drrsResponseStatus = a})
+
+instance NFData DeleteResolverResponse where
diff --git a/gen/Network/AWS/AppSync/DeleteType.hs b/gen/Network/AWS/AppSync/DeleteType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/DeleteType.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.DeleteType
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a @Type@ object.
+--
+--
+module Network.AWS.AppSync.DeleteType
+    (
+    -- * Creating a Request
+      deleteType
+    , DeleteType
+    -- * Request Lenses
+    , dtApiId
+    , dtTypeName
+
+    -- * Destructuring the Response
+    , deleteTypeResponse
+    , DeleteTypeResponse
+    -- * Response Lenses
+    , dtrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteType' smart constructor.
+data DeleteType = DeleteType'
+  { _dtApiId    :: !Text
+  , _dtTypeName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtApiId' - The API ID.
+--
+-- * 'dtTypeName' - The type name.
+deleteType
+    :: Text -- ^ 'dtApiId'
+    -> Text -- ^ 'dtTypeName'
+    -> DeleteType
+deleteType pApiId_ pTypeName_ =
+  DeleteType' {_dtApiId = pApiId_, _dtTypeName = pTypeName_}
+
+
+-- | The API ID.
+dtApiId :: Lens' DeleteType Text
+dtApiId = lens _dtApiId (\ s a -> s{_dtApiId = a})
+
+-- | The type name.
+dtTypeName :: Lens' DeleteType Text
+dtTypeName = lens _dtTypeName (\ s a -> s{_dtTypeName = a})
+
+instance AWSRequest DeleteType where
+        type Rs DeleteType = DeleteTypeResponse
+        request = delete appSync
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteTypeResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteType where
+
+instance NFData DeleteType where
+
+instance ToHeaders DeleteType where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteType where
+        toPath DeleteType'{..}
+          = mconcat
+              ["/v1/apis/", toBS _dtApiId, "/types/",
+               toBS _dtTypeName]
+
+instance ToQuery DeleteType where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteTypeResponse' smart constructor.
+newtype DeleteTypeResponse = DeleteTypeResponse'
+  { _dtrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtrsResponseStatus' - -- | The response status code.
+deleteTypeResponse
+    :: Int -- ^ 'dtrsResponseStatus'
+    -> DeleteTypeResponse
+deleteTypeResponse pResponseStatus_ =
+  DeleteTypeResponse' {_dtrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dtrsResponseStatus :: Lens' DeleteTypeResponse Int
+dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a})
+
+instance NFData DeleteTypeResponse where
diff --git a/gen/Network/AWS/AppSync/GetDataSource.hs b/gen/Network/AWS/AppSync/GetDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/GetDataSource.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.GetDataSource
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a @DataSource@ object.
+--
+--
+module Network.AWS.AppSync.GetDataSource
+    (
+    -- * Creating a Request
+      getDataSource
+    , GetDataSource
+    -- * Request Lenses
+    , gdsApiId
+    , gdsName
+
+    -- * Destructuring the Response
+    , getDataSourceResponse
+    , GetDataSourceResponse
+    -- * Response Lenses
+    , gdsrsDataSource
+    , gdsrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getDataSource' smart constructor.
+data GetDataSource = GetDataSource'
+  { _gdsApiId :: !Text
+  , _gdsName  :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDataSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdsApiId' - The API ID.
+--
+-- * 'gdsName' - The name of the data source.
+getDataSource
+    :: Text -- ^ 'gdsApiId'
+    -> Text -- ^ 'gdsName'
+    -> GetDataSource
+getDataSource pApiId_ pName_ =
+  GetDataSource' {_gdsApiId = pApiId_, _gdsName = pName_}
+
+
+-- | The API ID.
+gdsApiId :: Lens' GetDataSource Text
+gdsApiId = lens _gdsApiId (\ s a -> s{_gdsApiId = a})
+
+-- | The name of the data source.
+gdsName :: Lens' GetDataSource Text
+gdsName = lens _gdsName (\ s a -> s{_gdsName = a})
+
+instance AWSRequest GetDataSource where
+        type Rs GetDataSource = GetDataSourceResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDataSourceResponse' <$>
+                   (x .?> "dataSource") <*> (pure (fromEnum s)))
+
+instance Hashable GetDataSource where
+
+instance NFData GetDataSource where
+
+instance ToHeaders GetDataSource where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetDataSource where
+        toPath GetDataSource'{..}
+          = mconcat
+              ["/v1/apis/", toBS _gdsApiId, "/datasources/",
+               toBS _gdsName]
+
+instance ToQuery GetDataSource where
+        toQuery = const mempty
+
+-- | /See:/ 'getDataSourceResponse' smart constructor.
+data GetDataSourceResponse = GetDataSourceResponse'
+  { _gdsrsDataSource     :: !(Maybe DataSource)
+  , _gdsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDataSourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdsrsDataSource' - The @DataSource@ object.
+--
+-- * 'gdsrsResponseStatus' - -- | The response status code.
+getDataSourceResponse
+    :: Int -- ^ 'gdsrsResponseStatus'
+    -> GetDataSourceResponse
+getDataSourceResponse pResponseStatus_ =
+  GetDataSourceResponse'
+    {_gdsrsDataSource = Nothing, _gdsrsResponseStatus = pResponseStatus_}
+
+
+-- | The @DataSource@ object.
+gdsrsDataSource :: Lens' GetDataSourceResponse (Maybe DataSource)
+gdsrsDataSource = lens _gdsrsDataSource (\ s a -> s{_gdsrsDataSource = a})
+
+-- | -- | The response status code.
+gdsrsResponseStatus :: Lens' GetDataSourceResponse Int
+gdsrsResponseStatus = lens _gdsrsResponseStatus (\ s a -> s{_gdsrsResponseStatus = a})
+
+instance NFData GetDataSourceResponse where
diff --git a/gen/Network/AWS/AppSync/GetGraphqlAPI.hs b/gen/Network/AWS/AppSync/GetGraphqlAPI.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/GetGraphqlAPI.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.GetGraphqlAPI
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a @GraphqlApi@ object.
+--
+--
+module Network.AWS.AppSync.GetGraphqlAPI
+    (
+    -- * Creating a Request
+      getGraphqlAPI
+    , GetGraphqlAPI
+    -- * Request Lenses
+    , ggaApiId
+
+    -- * Destructuring the Response
+    , getGraphqlAPIResponse
+    , GetGraphqlAPIResponse
+    -- * Response Lenses
+    , ggarsGraphqlAPI
+    , ggarsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getGraphqlAPI' smart constructor.
+newtype GetGraphqlAPI = GetGraphqlAPI'
+  { _ggaApiId :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetGraphqlAPI' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ggaApiId' - The API ID for the GraphQL API.
+getGraphqlAPI
+    :: Text -- ^ 'ggaApiId'
+    -> GetGraphqlAPI
+getGraphqlAPI pApiId_ = GetGraphqlAPI' {_ggaApiId = pApiId_}
+
+
+-- | The API ID for the GraphQL API.
+ggaApiId :: Lens' GetGraphqlAPI Text
+ggaApiId = lens _ggaApiId (\ s a -> s{_ggaApiId = a})
+
+instance AWSRequest GetGraphqlAPI where
+        type Rs GetGraphqlAPI = GetGraphqlAPIResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetGraphqlAPIResponse' <$>
+                   (x .?> "graphqlApi") <*> (pure (fromEnum s)))
+
+instance Hashable GetGraphqlAPI where
+
+instance NFData GetGraphqlAPI where
+
+instance ToHeaders GetGraphqlAPI where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetGraphqlAPI where
+        toPath GetGraphqlAPI'{..}
+          = mconcat ["/v1/apis/", toBS _ggaApiId]
+
+instance ToQuery GetGraphqlAPI where
+        toQuery = const mempty
+
+-- | /See:/ 'getGraphqlAPIResponse' smart constructor.
+data GetGraphqlAPIResponse = GetGraphqlAPIResponse'
+  { _ggarsGraphqlAPI     :: !(Maybe GraphqlAPI)
+  , _ggarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetGraphqlAPIResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ggarsGraphqlAPI' - The @GraphqlApi@ object.
+--
+-- * 'ggarsResponseStatus' - -- | The response status code.
+getGraphqlAPIResponse
+    :: Int -- ^ 'ggarsResponseStatus'
+    -> GetGraphqlAPIResponse
+getGraphqlAPIResponse pResponseStatus_ =
+  GetGraphqlAPIResponse'
+    {_ggarsGraphqlAPI = Nothing, _ggarsResponseStatus = pResponseStatus_}
+
+
+-- | The @GraphqlApi@ object.
+ggarsGraphqlAPI :: Lens' GetGraphqlAPIResponse (Maybe GraphqlAPI)
+ggarsGraphqlAPI = lens _ggarsGraphqlAPI (\ s a -> s{_ggarsGraphqlAPI = a})
+
+-- | -- | The response status code.
+ggarsResponseStatus :: Lens' GetGraphqlAPIResponse Int
+ggarsResponseStatus = lens _ggarsResponseStatus (\ s a -> s{_ggarsResponseStatus = a})
+
+instance NFData GetGraphqlAPIResponse where
diff --git a/gen/Network/AWS/AppSync/GetIntrospectionSchema.hs b/gen/Network/AWS/AppSync/GetIntrospectionSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/GetIntrospectionSchema.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.GetIntrospectionSchema
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the introspection schema for a GraphQL API.
+--
+--
+module Network.AWS.AppSync.GetIntrospectionSchema
+    (
+    -- * Creating a Request
+      getIntrospectionSchema
+    , GetIntrospectionSchema
+    -- * Request Lenses
+    , gisApiId
+    , gisFormat
+
+    -- * Destructuring the Response
+    , getIntrospectionSchemaResponse
+    , GetIntrospectionSchemaResponse
+    -- * Response Lenses
+    , gisrsSchema
+    , gisrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getIntrospectionSchema' smart constructor.
+data GetIntrospectionSchema = GetIntrospectionSchema'
+  { _gisApiId  :: !Text
+  , _gisFormat :: !OutputType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntrospectionSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gisApiId' - The API ID.
+--
+-- * 'gisFormat' - The schema format: SDL or JSON.
+getIntrospectionSchema
+    :: Text -- ^ 'gisApiId'
+    -> OutputType -- ^ 'gisFormat'
+    -> GetIntrospectionSchema
+getIntrospectionSchema pApiId_ pFormat_ =
+  GetIntrospectionSchema' {_gisApiId = pApiId_, _gisFormat = pFormat_}
+
+
+-- | The API ID.
+gisApiId :: Lens' GetIntrospectionSchema Text
+gisApiId = lens _gisApiId (\ s a -> s{_gisApiId = a})
+
+-- | The schema format: SDL or JSON.
+gisFormat :: Lens' GetIntrospectionSchema OutputType
+gisFormat = lens _gisFormat (\ s a -> s{_gisFormat = a})
+
+instance AWSRequest GetIntrospectionSchema where
+        type Rs GetIntrospectionSchema =
+             GetIntrospectionSchemaResponse
+        request = get appSync
+        response
+          = receiveBytes
+              (\ s h x ->
+                 GetIntrospectionSchemaResponse' <$>
+                   (pure (Just x)) <*> (pure (fromEnum s)))
+
+instance Hashable GetIntrospectionSchema where
+
+instance NFData GetIntrospectionSchema where
+
+instance ToHeaders GetIntrospectionSchema where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetIntrospectionSchema where
+        toPath GetIntrospectionSchema'{..}
+          = mconcat ["/v1/apis/", toBS _gisApiId, "/schema"]
+
+instance ToQuery GetIntrospectionSchema where
+        toQuery GetIntrospectionSchema'{..}
+          = mconcat ["format" =: _gisFormat]
+
+-- | /See:/ 'getIntrospectionSchemaResponse' smart constructor.
+data GetIntrospectionSchemaResponse = GetIntrospectionSchemaResponse'
+  { _gisrsSchema         :: !(Maybe ByteString)
+  , _gisrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntrospectionSchemaResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gisrsSchema' - The schema, in GraphQL Schema Definition Language (SDL) format. For more information, see the <http://graphql.org/learn/schema/ GraphQL SDL documentation> .
+--
+-- * 'gisrsResponseStatus' - -- | The response status code.
+getIntrospectionSchemaResponse
+    :: Int -- ^ 'gisrsResponseStatus'
+    -> GetIntrospectionSchemaResponse
+getIntrospectionSchemaResponse pResponseStatus_ =
+  GetIntrospectionSchemaResponse'
+    {_gisrsSchema = Nothing, _gisrsResponseStatus = pResponseStatus_}
+
+
+-- | The schema, in GraphQL Schema Definition Language (SDL) format. For more information, see the <http://graphql.org/learn/schema/ GraphQL SDL documentation> .
+gisrsSchema :: Lens' GetIntrospectionSchemaResponse (Maybe ByteString)
+gisrsSchema = lens _gisrsSchema (\ s a -> s{_gisrsSchema = a})
+
+-- | -- | The response status code.
+gisrsResponseStatus :: Lens' GetIntrospectionSchemaResponse Int
+gisrsResponseStatus = lens _gisrsResponseStatus (\ s a -> s{_gisrsResponseStatus = a})
+
+instance NFData GetIntrospectionSchemaResponse where
diff --git a/gen/Network/AWS/AppSync/GetResolver.hs b/gen/Network/AWS/AppSync/GetResolver.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/GetResolver.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.GetResolver
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a @Resolver@ object.
+--
+--
+module Network.AWS.AppSync.GetResolver
+    (
+    -- * Creating a Request
+      getResolver
+    , GetResolver
+    -- * Request Lenses
+    , grApiId
+    , grTypeName
+    , grFieldName
+
+    -- * Destructuring the Response
+    , getResolverResponse
+    , GetResolverResponse
+    -- * Response Lenses
+    , grrsResolver
+    , grrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getResolver' smart constructor.
+data GetResolver = GetResolver'
+  { _grApiId     :: !Text
+  , _grTypeName  :: !Text
+  , _grFieldName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetResolver' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grApiId' - The API ID.
+--
+-- * 'grTypeName' - The resolver type name.
+--
+-- * 'grFieldName' - The resolver field name.
+getResolver
+    :: Text -- ^ 'grApiId'
+    -> Text -- ^ 'grTypeName'
+    -> Text -- ^ 'grFieldName'
+    -> GetResolver
+getResolver pApiId_ pTypeName_ pFieldName_ =
+  GetResolver'
+    {_grApiId = pApiId_, _grTypeName = pTypeName_, _grFieldName = pFieldName_}
+
+
+-- | The API ID.
+grApiId :: Lens' GetResolver Text
+grApiId = lens _grApiId (\ s a -> s{_grApiId = a})
+
+-- | The resolver type name.
+grTypeName :: Lens' GetResolver Text
+grTypeName = lens _grTypeName (\ s a -> s{_grTypeName = a})
+
+-- | The resolver field name.
+grFieldName :: Lens' GetResolver Text
+grFieldName = lens _grFieldName (\ s a -> s{_grFieldName = a})
+
+instance AWSRequest GetResolver where
+        type Rs GetResolver = GetResolverResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetResolverResponse' <$>
+                   (x .?> "resolver") <*> (pure (fromEnum s)))
+
+instance Hashable GetResolver where
+
+instance NFData GetResolver where
+
+instance ToHeaders GetResolver where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetResolver where
+        toPath GetResolver'{..}
+          = mconcat
+              ["/v1/apis/", toBS _grApiId, "/types/",
+               toBS _grTypeName, "/resolvers/", toBS _grFieldName]
+
+instance ToQuery GetResolver where
+        toQuery = const mempty
+
+-- | /See:/ 'getResolverResponse' smart constructor.
+data GetResolverResponse = GetResolverResponse'
+  { _grrsResolver       :: !(Maybe Resolver)
+  , _grrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetResolverResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grrsResolver' - The @Resolver@ object.
+--
+-- * 'grrsResponseStatus' - -- | The response status code.
+getResolverResponse
+    :: Int -- ^ 'grrsResponseStatus'
+    -> GetResolverResponse
+getResolverResponse pResponseStatus_ =
+  GetResolverResponse'
+    {_grrsResolver = Nothing, _grrsResponseStatus = pResponseStatus_}
+
+
+-- | The @Resolver@ object.
+grrsResolver :: Lens' GetResolverResponse (Maybe Resolver)
+grrsResolver = lens _grrsResolver (\ s a -> s{_grrsResolver = a})
+
+-- | -- | The response status code.
+grrsResponseStatus :: Lens' GetResolverResponse Int
+grrsResponseStatus = lens _grrsResponseStatus (\ s a -> s{_grrsResponseStatus = a})
+
+instance NFData GetResolverResponse where
diff --git a/gen/Network/AWS/AppSync/GetSchemaCreationStatus.hs b/gen/Network/AWS/AppSync/GetSchemaCreationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/GetSchemaCreationStatus.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.GetSchemaCreationStatus
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the current status of a schema creation operation.
+--
+--
+module Network.AWS.AppSync.GetSchemaCreationStatus
+    (
+    -- * Creating a Request
+      getSchemaCreationStatus
+    , GetSchemaCreationStatus
+    -- * Request Lenses
+    , gscsApiId
+
+    -- * Destructuring the Response
+    , getSchemaCreationStatusResponse
+    , GetSchemaCreationStatusResponse
+    -- * Response Lenses
+    , gscsrsStatus
+    , gscsrsDetails
+    , gscsrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getSchemaCreationStatus' smart constructor.
+newtype GetSchemaCreationStatus = GetSchemaCreationStatus'
+  { _gscsApiId :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSchemaCreationStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gscsApiId' - The API ID.
+getSchemaCreationStatus
+    :: Text -- ^ 'gscsApiId'
+    -> GetSchemaCreationStatus
+getSchemaCreationStatus pApiId_ =
+  GetSchemaCreationStatus' {_gscsApiId = pApiId_}
+
+
+-- | The API ID.
+gscsApiId :: Lens' GetSchemaCreationStatus Text
+gscsApiId = lens _gscsApiId (\ s a -> s{_gscsApiId = a})
+
+instance AWSRequest GetSchemaCreationStatus where
+        type Rs GetSchemaCreationStatus =
+             GetSchemaCreationStatusResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetSchemaCreationStatusResponse' <$>
+                   (x .?> "status") <*> (x .?> "details") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable GetSchemaCreationStatus where
+
+instance NFData GetSchemaCreationStatus where
+
+instance ToHeaders GetSchemaCreationStatus where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetSchemaCreationStatus where
+        toPath GetSchemaCreationStatus'{..}
+          = mconcat
+              ["/v1/apis/", toBS _gscsApiId, "/schemacreation"]
+
+instance ToQuery GetSchemaCreationStatus where
+        toQuery = const mempty
+
+-- | /See:/ 'getSchemaCreationStatusResponse' smart constructor.
+data GetSchemaCreationStatusResponse = GetSchemaCreationStatusResponse'
+  { _gscsrsStatus         :: !(Maybe SchemaStatus)
+  , _gscsrsDetails        :: !(Maybe Text)
+  , _gscsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSchemaCreationStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gscsrsStatus' - The current state of the schema (PROCESSING, ACTIVE, or DELETING). Once the schema is in the ACTIVE state, you can add data.
+--
+-- * 'gscsrsDetails' - Detailed information about the status of the schema creation operation.
+--
+-- * 'gscsrsResponseStatus' - -- | The response status code.
+getSchemaCreationStatusResponse
+    :: Int -- ^ 'gscsrsResponseStatus'
+    -> GetSchemaCreationStatusResponse
+getSchemaCreationStatusResponse pResponseStatus_ =
+  GetSchemaCreationStatusResponse'
+    { _gscsrsStatus = Nothing
+    , _gscsrsDetails = Nothing
+    , _gscsrsResponseStatus = pResponseStatus_
+    }
+
+
+-- | The current state of the schema (PROCESSING, ACTIVE, or DELETING). Once the schema is in the ACTIVE state, you can add data.
+gscsrsStatus :: Lens' GetSchemaCreationStatusResponse (Maybe SchemaStatus)
+gscsrsStatus = lens _gscsrsStatus (\ s a -> s{_gscsrsStatus = a})
+
+-- | Detailed information about the status of the schema creation operation.
+gscsrsDetails :: Lens' GetSchemaCreationStatusResponse (Maybe Text)
+gscsrsDetails = lens _gscsrsDetails (\ s a -> s{_gscsrsDetails = a})
+
+-- | -- | The response status code.
+gscsrsResponseStatus :: Lens' GetSchemaCreationStatusResponse Int
+gscsrsResponseStatus = lens _gscsrsResponseStatus (\ s a -> s{_gscsrsResponseStatus = a})
+
+instance NFData GetSchemaCreationStatusResponse where
diff --git a/gen/Network/AWS/AppSync/GetType.hs b/gen/Network/AWS/AppSync/GetType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/GetType.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.GetType
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a @Type@ object.
+--
+--
+module Network.AWS.AppSync.GetType
+    (
+    -- * Creating a Request
+      getType
+    , GetType
+    -- * Request Lenses
+    , gtApiId
+    , gtTypeName
+    , gtFormat
+
+    -- * Destructuring the Response
+    , getTypeResponse
+    , GetTypeResponse
+    -- * Response Lenses
+    , gtrsType
+    , gtrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getType' smart constructor.
+data GetType = GetType'
+  { _gtApiId    :: !Text
+  , _gtTypeName :: !Text
+  , _gtFormat   :: !TypeDefinitionFormat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtApiId' - The API ID.
+--
+-- * 'gtTypeName' - The type name.
+--
+-- * 'gtFormat' - The type format: SDL or JSON.
+getType
+    :: Text -- ^ 'gtApiId'
+    -> Text -- ^ 'gtTypeName'
+    -> TypeDefinitionFormat -- ^ 'gtFormat'
+    -> GetType
+getType pApiId_ pTypeName_ pFormat_ =
+  GetType' {_gtApiId = pApiId_, _gtTypeName = pTypeName_, _gtFormat = pFormat_}
+
+
+-- | The API ID.
+gtApiId :: Lens' GetType Text
+gtApiId = lens _gtApiId (\ s a -> s{_gtApiId = a})
+
+-- | The type name.
+gtTypeName :: Lens' GetType Text
+gtTypeName = lens _gtTypeName (\ s a -> s{_gtTypeName = a})
+
+-- | The type format: SDL or JSON.
+gtFormat :: Lens' GetType TypeDefinitionFormat
+gtFormat = lens _gtFormat (\ s a -> s{_gtFormat = a})
+
+instance AWSRequest GetType where
+        type Rs GetType = GetTypeResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetTypeResponse' <$>
+                   (x .?> "type") <*> (pure (fromEnum s)))
+
+instance Hashable GetType where
+
+instance NFData GetType where
+
+instance ToHeaders GetType where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetType where
+        toPath GetType'{..}
+          = mconcat
+              ["/v1/apis/", toBS _gtApiId, "/types/",
+               toBS _gtTypeName]
+
+instance ToQuery GetType where
+        toQuery GetType'{..}
+          = mconcat ["format" =: _gtFormat]
+
+-- | /See:/ 'getTypeResponse' smart constructor.
+data GetTypeResponse = GetTypeResponse'
+  { _gtrsType           :: !(Maybe Type)
+  , _gtrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtrsType' - The @Type@ object.
+--
+-- * 'gtrsResponseStatus' - -- | The response status code.
+getTypeResponse
+    :: Int -- ^ 'gtrsResponseStatus'
+    -> GetTypeResponse
+getTypeResponse pResponseStatus_ =
+  GetTypeResponse' {_gtrsType = Nothing, _gtrsResponseStatus = pResponseStatus_}
+
+
+-- | The @Type@ object.
+gtrsType :: Lens' GetTypeResponse (Maybe Type)
+gtrsType = lens _gtrsType (\ s a -> s{_gtrsType = a})
+
+-- | -- | The response status code.
+gtrsResponseStatus :: Lens' GetTypeResponse Int
+gtrsResponseStatus = lens _gtrsResponseStatus (\ s a -> s{_gtrsResponseStatus = a})
+
+instance NFData GetTypeResponse where
diff --git a/gen/Network/AWS/AppSync/ListAPIKeys.hs b/gen/Network/AWS/AppSync/ListAPIKeys.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/ListAPIKeys.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.ListAPIKeys
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the API keys for a given API.
+--
+--
+module Network.AWS.AppSync.ListAPIKeys
+    (
+    -- * Creating a Request
+      listAPIKeys
+    , ListAPIKeys
+    -- * Request Lenses
+    , lakNextToken
+    , lakMaxResults
+    , lakApiId
+
+    -- * Destructuring the Response
+    , listAPIKeysResponse
+    , ListAPIKeysResponse
+    -- * Response Lenses
+    , lakrsApiKeys
+    , lakrsNextToken
+    , lakrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'listAPIKeys' smart constructor.
+data ListAPIKeys = ListAPIKeys'
+  { _lakNextToken  :: !(Maybe Text)
+  , _lakMaxResults :: !(Maybe Nat)
+  , _lakApiId      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListAPIKeys' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lakNextToken' - An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+--
+-- * 'lakMaxResults' - The maximum number of results you want the request to return.
+--
+-- * 'lakApiId' - The API ID.
+listAPIKeys
+    :: Text -- ^ 'lakApiId'
+    -> ListAPIKeys
+listAPIKeys pApiId_ =
+  ListAPIKeys'
+    {_lakNextToken = Nothing, _lakMaxResults = Nothing, _lakApiId = pApiId_}
+
+
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+lakNextToken :: Lens' ListAPIKeys (Maybe Text)
+lakNextToken = lens _lakNextToken (\ s a -> s{_lakNextToken = a})
+
+-- | The maximum number of results you want the request to return.
+lakMaxResults :: Lens' ListAPIKeys (Maybe Natural)
+lakMaxResults = lens _lakMaxResults (\ s a -> s{_lakMaxResults = a}) . mapping _Nat
+
+-- | The API ID.
+lakApiId :: Lens' ListAPIKeys Text
+lakApiId = lens _lakApiId (\ s a -> s{_lakApiId = a})
+
+instance AWSRequest ListAPIKeys where
+        type Rs ListAPIKeys = ListAPIKeysResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListAPIKeysResponse' <$>
+                   (x .?> "apiKeys" .!@ mempty) <*> (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListAPIKeys where
+
+instance NFData ListAPIKeys where
+
+instance ToHeaders ListAPIKeys where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath ListAPIKeys where
+        toPath ListAPIKeys'{..}
+          = mconcat ["/v1/apis/", toBS _lakApiId, "/apikeys"]
+
+instance ToQuery ListAPIKeys where
+        toQuery ListAPIKeys'{..}
+          = mconcat
+              ["nextToken" =: _lakNextToken,
+               "maxResults" =: _lakMaxResults]
+
+-- | /See:/ 'listAPIKeysResponse' smart constructor.
+data ListAPIKeysResponse = ListAPIKeysResponse'
+  { _lakrsApiKeys        :: !(Maybe [APIKey])
+  , _lakrsNextToken      :: !(Maybe Text)
+  , _lakrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListAPIKeysResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lakrsApiKeys' - The @ApiKey@ objects.
+--
+-- * 'lakrsNextToken' - An identifier to be passed in the next request to this operation to return the next set of items in the list.
+--
+-- * 'lakrsResponseStatus' - -- | The response status code.
+listAPIKeysResponse
+    :: Int -- ^ 'lakrsResponseStatus'
+    -> ListAPIKeysResponse
+listAPIKeysResponse pResponseStatus_ =
+  ListAPIKeysResponse'
+    { _lakrsApiKeys = Nothing
+    , _lakrsNextToken = Nothing
+    , _lakrsResponseStatus = pResponseStatus_
+    }
+
+
+-- | The @ApiKey@ objects.
+lakrsApiKeys :: Lens' ListAPIKeysResponse [APIKey]
+lakrsApiKeys = lens _lakrsApiKeys (\ s a -> s{_lakrsApiKeys = a}) . _Default . _Coerce
+
+-- | An identifier to be passed in the next request to this operation to return the next set of items in the list.
+lakrsNextToken :: Lens' ListAPIKeysResponse (Maybe Text)
+lakrsNextToken = lens _lakrsNextToken (\ s a -> s{_lakrsNextToken = a})
+
+-- | -- | The response status code.
+lakrsResponseStatus :: Lens' ListAPIKeysResponse Int
+lakrsResponseStatus = lens _lakrsResponseStatus (\ s a -> s{_lakrsResponseStatus = a})
+
+instance NFData ListAPIKeysResponse where
diff --git a/gen/Network/AWS/AppSync/ListDataSources.hs b/gen/Network/AWS/AppSync/ListDataSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/ListDataSources.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.ListDataSources
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the data sources for a given API.
+--
+--
+module Network.AWS.AppSync.ListDataSources
+    (
+    -- * Creating a Request
+      listDataSources
+    , ListDataSources
+    -- * Request Lenses
+    , ldsNextToken
+    , ldsMaxResults
+    , ldsApiId
+
+    -- * Destructuring the Response
+    , listDataSourcesResponse
+    , ListDataSourcesResponse
+    -- * Response Lenses
+    , ldsrsDataSources
+    , ldsrsNextToken
+    , ldsrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'listDataSources' smart constructor.
+data ListDataSources = ListDataSources'
+  { _ldsNextToken  :: !(Maybe Text)
+  , _ldsMaxResults :: !(Maybe Nat)
+  , _ldsApiId      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListDataSources' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldsNextToken' - An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+--
+-- * 'ldsMaxResults' - The maximum number of results you want the request to return.
+--
+-- * 'ldsApiId' - The API ID.
+listDataSources
+    :: Text -- ^ 'ldsApiId'
+    -> ListDataSources
+listDataSources pApiId_ =
+  ListDataSources'
+    {_ldsNextToken = Nothing, _ldsMaxResults = Nothing, _ldsApiId = pApiId_}
+
+
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+ldsNextToken :: Lens' ListDataSources (Maybe Text)
+ldsNextToken = lens _ldsNextToken (\ s a -> s{_ldsNextToken = a})
+
+-- | The maximum number of results you want the request to return.
+ldsMaxResults :: Lens' ListDataSources (Maybe Natural)
+ldsMaxResults = lens _ldsMaxResults (\ s a -> s{_ldsMaxResults = a}) . mapping _Nat
+
+-- | The API ID.
+ldsApiId :: Lens' ListDataSources Text
+ldsApiId = lens _ldsApiId (\ s a -> s{_ldsApiId = a})
+
+instance AWSRequest ListDataSources where
+        type Rs ListDataSources = ListDataSourcesResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListDataSourcesResponse' <$>
+                   (x .?> "dataSources" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListDataSources where
+
+instance NFData ListDataSources where
+
+instance ToHeaders ListDataSources where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath ListDataSources where
+        toPath ListDataSources'{..}
+          = mconcat
+              ["/v1/apis/", toBS _ldsApiId, "/datasources"]
+
+instance ToQuery ListDataSources where
+        toQuery ListDataSources'{..}
+          = mconcat
+              ["nextToken" =: _ldsNextToken,
+               "maxResults" =: _ldsMaxResults]
+
+-- | /See:/ 'listDataSourcesResponse' smart constructor.
+data ListDataSourcesResponse = ListDataSourcesResponse'
+  { _ldsrsDataSources    :: !(Maybe [DataSource])
+  , _ldsrsNextToken      :: !(Maybe Text)
+  , _ldsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListDataSourcesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldsrsDataSources' - The @DataSource@ objects.
+--
+-- * 'ldsrsNextToken' - An identifier to be passed in the next request to this operation to return the next set of items in the list.
+--
+-- * 'ldsrsResponseStatus' - -- | The response status code.
+listDataSourcesResponse
+    :: Int -- ^ 'ldsrsResponseStatus'
+    -> ListDataSourcesResponse
+listDataSourcesResponse pResponseStatus_ =
+  ListDataSourcesResponse'
+    { _ldsrsDataSources = Nothing
+    , _ldsrsNextToken = Nothing
+    , _ldsrsResponseStatus = pResponseStatus_
+    }
+
+
+-- | The @DataSource@ objects.
+ldsrsDataSources :: Lens' ListDataSourcesResponse [DataSource]
+ldsrsDataSources = lens _ldsrsDataSources (\ s a -> s{_ldsrsDataSources = a}) . _Default . _Coerce
+
+-- | An identifier to be passed in the next request to this operation to return the next set of items in the list.
+ldsrsNextToken :: Lens' ListDataSourcesResponse (Maybe Text)
+ldsrsNextToken = lens _ldsrsNextToken (\ s a -> s{_ldsrsNextToken = a})
+
+-- | -- | The response status code.
+ldsrsResponseStatus :: Lens' ListDataSourcesResponse Int
+ldsrsResponseStatus = lens _ldsrsResponseStatus (\ s a -> s{_ldsrsResponseStatus = a})
+
+instance NFData ListDataSourcesResponse where
diff --git a/gen/Network/AWS/AppSync/ListGraphqlAPIs.hs b/gen/Network/AWS/AppSync/ListGraphqlAPIs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/ListGraphqlAPIs.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.ListGraphqlAPIs
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists your GraphQL APIs.
+--
+--
+module Network.AWS.AppSync.ListGraphqlAPIs
+    (
+    -- * Creating a Request
+      listGraphqlAPIs
+    , ListGraphqlAPIs
+    -- * Request Lenses
+    , lgaNextToken
+    , lgaMaxResults
+
+    -- * Destructuring the Response
+    , listGraphqlAPIsResponse
+    , ListGraphqlAPIsResponse
+    -- * Response Lenses
+    , lgarsNextToken
+    , lgarsGraphqlAPIs
+    , lgarsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'listGraphqlAPIs' smart constructor.
+data ListGraphqlAPIs = ListGraphqlAPIs'
+  { _lgaNextToken  :: !(Maybe Text)
+  , _lgaMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListGraphqlAPIs' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lgaNextToken' - An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+--
+-- * 'lgaMaxResults' - The maximum number of results you want the request to return.
+listGraphqlAPIs
+    :: ListGraphqlAPIs
+listGraphqlAPIs =
+  ListGraphqlAPIs' {_lgaNextToken = Nothing, _lgaMaxResults = Nothing}
+
+
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+lgaNextToken :: Lens' ListGraphqlAPIs (Maybe Text)
+lgaNextToken = lens _lgaNextToken (\ s a -> s{_lgaNextToken = a})
+
+-- | The maximum number of results you want the request to return.
+lgaMaxResults :: Lens' ListGraphqlAPIs (Maybe Natural)
+lgaMaxResults = lens _lgaMaxResults (\ s a -> s{_lgaMaxResults = a}) . mapping _Nat
+
+instance AWSRequest ListGraphqlAPIs where
+        type Rs ListGraphqlAPIs = ListGraphqlAPIsResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListGraphqlAPIsResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "graphqlApis" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListGraphqlAPIs where
+
+instance NFData ListGraphqlAPIs where
+
+instance ToHeaders ListGraphqlAPIs where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath ListGraphqlAPIs where
+        toPath = const "/v1/apis"
+
+instance ToQuery ListGraphqlAPIs where
+        toQuery ListGraphqlAPIs'{..}
+          = mconcat
+              ["nextToken" =: _lgaNextToken,
+               "maxResults" =: _lgaMaxResults]
+
+-- | /See:/ 'listGraphqlAPIsResponse' smart constructor.
+data ListGraphqlAPIsResponse = ListGraphqlAPIsResponse'
+  { _lgarsNextToken      :: !(Maybe Text)
+  , _lgarsGraphqlAPIs    :: !(Maybe [GraphqlAPI])
+  , _lgarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListGraphqlAPIsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lgarsNextToken' - An identifier to be passed in the next request to this operation to return the next set of items in the list.
+--
+-- * 'lgarsGraphqlAPIs' - The @GraphqlApi@ objects.
+--
+-- * 'lgarsResponseStatus' - -- | The response status code.
+listGraphqlAPIsResponse
+    :: Int -- ^ 'lgarsResponseStatus'
+    -> ListGraphqlAPIsResponse
+listGraphqlAPIsResponse pResponseStatus_ =
+  ListGraphqlAPIsResponse'
+    { _lgarsNextToken = Nothing
+    , _lgarsGraphqlAPIs = Nothing
+    , _lgarsResponseStatus = pResponseStatus_
+    }
+
+
+-- | An identifier to be passed in the next request to this operation to return the next set of items in the list.
+lgarsNextToken :: Lens' ListGraphqlAPIsResponse (Maybe Text)
+lgarsNextToken = lens _lgarsNextToken (\ s a -> s{_lgarsNextToken = a})
+
+-- | The @GraphqlApi@ objects.
+lgarsGraphqlAPIs :: Lens' ListGraphqlAPIsResponse [GraphqlAPI]
+lgarsGraphqlAPIs = lens _lgarsGraphqlAPIs (\ s a -> s{_lgarsGraphqlAPIs = a}) . _Default . _Coerce
+
+-- | -- | The response status code.
+lgarsResponseStatus :: Lens' ListGraphqlAPIsResponse Int
+lgarsResponseStatus = lens _lgarsResponseStatus (\ s a -> s{_lgarsResponseStatus = a})
+
+instance NFData ListGraphqlAPIsResponse where
diff --git a/gen/Network/AWS/AppSync/ListResolvers.hs b/gen/Network/AWS/AppSync/ListResolvers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/ListResolvers.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.ListResolvers
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the resolvers for a given API and type.
+--
+--
+module Network.AWS.AppSync.ListResolvers
+    (
+    -- * Creating a Request
+      listResolvers
+    , ListResolvers
+    -- * Request Lenses
+    , lrNextToken
+    , lrMaxResults
+    , lrApiId
+    , lrTypeName
+
+    -- * Destructuring the Response
+    , listResolversResponse
+    , ListResolversResponse
+    -- * Response Lenses
+    , lrrsNextToken
+    , lrrsResolvers
+    , lrrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'listResolvers' smart constructor.
+data ListResolvers = ListResolvers'
+  { _lrNextToken  :: !(Maybe Text)
+  , _lrMaxResults :: !(Maybe Nat)
+  , _lrApiId      :: !Text
+  , _lrTypeName   :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListResolvers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrNextToken' - An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+--
+-- * 'lrMaxResults' - The maximum number of results you want the request to return.
+--
+-- * 'lrApiId' - The API ID.
+--
+-- * 'lrTypeName' - The type name.
+listResolvers
+    :: Text -- ^ 'lrApiId'
+    -> Text -- ^ 'lrTypeName'
+    -> ListResolvers
+listResolvers pApiId_ pTypeName_ =
+  ListResolvers'
+    { _lrNextToken = Nothing
+    , _lrMaxResults = Nothing
+    , _lrApiId = pApiId_
+    , _lrTypeName = pTypeName_
+    }
+
+
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+lrNextToken :: Lens' ListResolvers (Maybe Text)
+lrNextToken = lens _lrNextToken (\ s a -> s{_lrNextToken = a})
+
+-- | The maximum number of results you want the request to return.
+lrMaxResults :: Lens' ListResolvers (Maybe Natural)
+lrMaxResults = lens _lrMaxResults (\ s a -> s{_lrMaxResults = a}) . mapping _Nat
+
+-- | The API ID.
+lrApiId :: Lens' ListResolvers Text
+lrApiId = lens _lrApiId (\ s a -> s{_lrApiId = a})
+
+-- | The type name.
+lrTypeName :: Lens' ListResolvers Text
+lrTypeName = lens _lrTypeName (\ s a -> s{_lrTypeName = a})
+
+instance AWSRequest ListResolvers where
+        type Rs ListResolvers = ListResolversResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListResolversResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "resolvers" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListResolvers where
+
+instance NFData ListResolvers where
+
+instance ToHeaders ListResolvers where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath ListResolvers where
+        toPath ListResolvers'{..}
+          = mconcat
+              ["/v1/apis/", toBS _lrApiId, "/types/",
+               toBS _lrTypeName, "/resolvers"]
+
+instance ToQuery ListResolvers where
+        toQuery ListResolvers'{..}
+          = mconcat
+              ["nextToken" =: _lrNextToken,
+               "maxResults" =: _lrMaxResults]
+
+-- | /See:/ 'listResolversResponse' smart constructor.
+data ListResolversResponse = ListResolversResponse'
+  { _lrrsNextToken      :: !(Maybe Text)
+  , _lrrsResolvers      :: !(Maybe [Resolver])
+  , _lrrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListResolversResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrrsNextToken' - An identifier to be passed in the next request to this operation to return the next set of items in the list.
+--
+-- * 'lrrsResolvers' - The @Resolver@ objects.
+--
+-- * 'lrrsResponseStatus' - -- | The response status code.
+listResolversResponse
+    :: Int -- ^ 'lrrsResponseStatus'
+    -> ListResolversResponse
+listResolversResponse pResponseStatus_ =
+  ListResolversResponse'
+    { _lrrsNextToken = Nothing
+    , _lrrsResolvers = Nothing
+    , _lrrsResponseStatus = pResponseStatus_
+    }
+
+
+-- | An identifier to be passed in the next request to this operation to return the next set of items in the list.
+lrrsNextToken :: Lens' ListResolversResponse (Maybe Text)
+lrrsNextToken = lens _lrrsNextToken (\ s a -> s{_lrrsNextToken = a})
+
+-- | The @Resolver@ objects.
+lrrsResolvers :: Lens' ListResolversResponse [Resolver]
+lrrsResolvers = lens _lrrsResolvers (\ s a -> s{_lrrsResolvers = a}) . _Default . _Coerce
+
+-- | -- | The response status code.
+lrrsResponseStatus :: Lens' ListResolversResponse Int
+lrrsResponseStatus = lens _lrrsResponseStatus (\ s a -> s{_lrrsResponseStatus = a})
+
+instance NFData ListResolversResponse where
diff --git a/gen/Network/AWS/AppSync/ListTypes.hs b/gen/Network/AWS/AppSync/ListTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/ListTypes.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.ListTypes
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the types for a given API.
+--
+--
+module Network.AWS.AppSync.ListTypes
+    (
+    -- * Creating a Request
+      listTypes
+    , ListTypes
+    -- * Request Lenses
+    , ltNextToken
+    , ltMaxResults
+    , ltApiId
+    , ltFormat
+
+    -- * Destructuring the Response
+    , listTypesResponse
+    , ListTypesResponse
+    -- * Response Lenses
+    , ltrsTypes
+    , ltrsNextToken
+    , ltrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'listTypes' smart constructor.
+data ListTypes = ListTypes'
+  { _ltNextToken  :: !(Maybe Text)
+  , _ltMaxResults :: !(Maybe Nat)
+  , _ltApiId      :: !Text
+  , _ltFormat     :: !TypeDefinitionFormat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListTypes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltNextToken' - An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+--
+-- * 'ltMaxResults' - The maximum number of results you want the request to return.
+--
+-- * 'ltApiId' - The API ID.
+--
+-- * 'ltFormat' - The type format: SDL or JSON.
+listTypes
+    :: Text -- ^ 'ltApiId'
+    -> TypeDefinitionFormat -- ^ 'ltFormat'
+    -> ListTypes
+listTypes pApiId_ pFormat_ =
+  ListTypes'
+    { _ltNextToken = Nothing
+    , _ltMaxResults = Nothing
+    , _ltApiId = pApiId_
+    , _ltFormat = pFormat_
+    }
+
+
+-- | An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
+ltNextToken :: Lens' ListTypes (Maybe Text)
+ltNextToken = lens _ltNextToken (\ s a -> s{_ltNextToken = a})
+
+-- | The maximum number of results you want the request to return.
+ltMaxResults :: Lens' ListTypes (Maybe Natural)
+ltMaxResults = lens _ltMaxResults (\ s a -> s{_ltMaxResults = a}) . mapping _Nat
+
+-- | The API ID.
+ltApiId :: Lens' ListTypes Text
+ltApiId = lens _ltApiId (\ s a -> s{_ltApiId = a})
+
+-- | The type format: SDL or JSON.
+ltFormat :: Lens' ListTypes TypeDefinitionFormat
+ltFormat = lens _ltFormat (\ s a -> s{_ltFormat = a})
+
+instance AWSRequest ListTypes where
+        type Rs ListTypes = ListTypesResponse
+        request = get appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTypesResponse' <$>
+                   (x .?> "types" .!@ mempty) <*> (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListTypes where
+
+instance NFData ListTypes where
+
+instance ToHeaders ListTypes where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath ListTypes where
+        toPath ListTypes'{..}
+          = mconcat ["/v1/apis/", toBS _ltApiId, "/types"]
+
+instance ToQuery ListTypes where
+        toQuery ListTypes'{..}
+          = mconcat
+              ["nextToken" =: _ltNextToken,
+               "maxResults" =: _ltMaxResults, "format" =: _ltFormat]
+
+-- | /See:/ 'listTypesResponse' smart constructor.
+data ListTypesResponse = ListTypesResponse'
+  { _ltrsTypes          :: !(Maybe [Type])
+  , _ltrsNextToken      :: !(Maybe Text)
+  , _ltrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListTypesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltrsTypes' - The @Type@ objects.
+--
+-- * 'ltrsNextToken' - An identifier to be passed in the next request to this operation to return the next set of items in the list.
+--
+-- * 'ltrsResponseStatus' - -- | The response status code.
+listTypesResponse
+    :: Int -- ^ 'ltrsResponseStatus'
+    -> ListTypesResponse
+listTypesResponse pResponseStatus_ =
+  ListTypesResponse'
+    { _ltrsTypes = Nothing
+    , _ltrsNextToken = Nothing
+    , _ltrsResponseStatus = pResponseStatus_
+    }
+
+
+-- | The @Type@ objects.
+ltrsTypes :: Lens' ListTypesResponse [Type]
+ltrsTypes = lens _ltrsTypes (\ s a -> s{_ltrsTypes = a}) . _Default . _Coerce
+
+-- | An identifier to be passed in the next request to this operation to return the next set of items in the list.
+ltrsNextToken :: Lens' ListTypesResponse (Maybe Text)
+ltrsNextToken = lens _ltrsNextToken (\ s a -> s{_ltrsNextToken = a})
+
+-- | -- | The response status code.
+ltrsResponseStatus :: Lens' ListTypesResponse Int
+ltrsResponseStatus = lens _ltrsResponseStatus (\ s a -> s{_ltrsResponseStatus = a})
+
+instance NFData ListTypesResponse where
diff --git a/gen/Network/AWS/AppSync/StartSchemaCreation.hs b/gen/Network/AWS/AppSync/StartSchemaCreation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/StartSchemaCreation.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.StartSchemaCreation
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a new schema to your GraphQL API.
+--
+--
+-- This operation is asynchronous. Use to determine when it has completed.
+--
+module Network.AWS.AppSync.StartSchemaCreation
+    (
+    -- * Creating a Request
+      startSchemaCreation
+    , StartSchemaCreation
+    -- * Request Lenses
+    , sscApiId
+    , sscDefinition
+
+    -- * Destructuring the Response
+    , startSchemaCreationResponse
+    , StartSchemaCreationResponse
+    -- * Response Lenses
+    , sscrsStatus
+    , sscrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'startSchemaCreation' smart constructor.
+data StartSchemaCreation = StartSchemaCreation'
+  { _sscApiId      :: !Text
+  , _sscDefinition :: !Base64
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartSchemaCreation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sscApiId' - The API ID.
+--
+-- * 'sscDefinition' - The schema definition, in GraphQL schema language format.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
+startSchemaCreation
+    :: Text -- ^ 'sscApiId'
+    -> ByteString -- ^ 'sscDefinition'
+    -> StartSchemaCreation
+startSchemaCreation pApiId_ pDefinition_ =
+  StartSchemaCreation'
+    {_sscApiId = pApiId_, _sscDefinition = _Base64 # pDefinition_}
+
+
+-- | The API ID.
+sscApiId :: Lens' StartSchemaCreation Text
+sscApiId = lens _sscApiId (\ s a -> s{_sscApiId = a})
+
+-- | The schema definition, in GraphQL schema language format.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
+sscDefinition :: Lens' StartSchemaCreation ByteString
+sscDefinition = lens _sscDefinition (\ s a -> s{_sscDefinition = a}) . _Base64
+
+instance AWSRequest StartSchemaCreation where
+        type Rs StartSchemaCreation =
+             StartSchemaCreationResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StartSchemaCreationResponse' <$>
+                   (x .?> "status") <*> (pure (fromEnum s)))
+
+instance Hashable StartSchemaCreation where
+
+instance NFData StartSchemaCreation where
+
+instance ToHeaders StartSchemaCreation where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartSchemaCreation where
+        toJSON StartSchemaCreation'{..}
+          = object
+              (catMaybes [Just ("definition" .= _sscDefinition)])
+
+instance ToPath StartSchemaCreation where
+        toPath StartSchemaCreation'{..}
+          = mconcat
+              ["/v1/apis/", toBS _sscApiId, "/schemacreation"]
+
+instance ToQuery StartSchemaCreation where
+        toQuery = const mempty
+
+-- | /See:/ 'startSchemaCreationResponse' smart constructor.
+data StartSchemaCreationResponse = StartSchemaCreationResponse'
+  { _sscrsStatus         :: !(Maybe SchemaStatus)
+  , _sscrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartSchemaCreationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sscrsStatus' - The current state of the schema (PROCESSING, ACTIVE, or DELETING). Once the schema is in the ACTIVE state, you can add data.
+--
+-- * 'sscrsResponseStatus' - -- | The response status code.
+startSchemaCreationResponse
+    :: Int -- ^ 'sscrsResponseStatus'
+    -> StartSchemaCreationResponse
+startSchemaCreationResponse pResponseStatus_ =
+  StartSchemaCreationResponse'
+    {_sscrsStatus = Nothing, _sscrsResponseStatus = pResponseStatus_}
+
+
+-- | The current state of the schema (PROCESSING, ACTIVE, or DELETING). Once the schema is in the ACTIVE state, you can add data.
+sscrsStatus :: Lens' StartSchemaCreationResponse (Maybe SchemaStatus)
+sscrsStatus = lens _sscrsStatus (\ s a -> s{_sscrsStatus = a})
+
+-- | -- | The response status code.
+sscrsResponseStatus :: Lens' StartSchemaCreationResponse Int
+sscrsResponseStatus = lens _sscrsResponseStatus (\ s a -> s{_sscrsResponseStatus = a})
+
+instance NFData StartSchemaCreationResponse where
diff --git a/gen/Network/AWS/AppSync/Types.hs b/gen/Network/AWS/AppSync/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/Types.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.Types
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.AppSync.Types
+    (
+    -- * Service Configuration
+      appSync
+
+    -- * Errors
+    , _APIKeyValidityOutOfBoundsException
+    , _APIKeyLimitExceededException
+    , _APILimitExceededException
+    , _NotFoundException
+    , _GraphQLSchemaException
+    , _ConcurrentModificationException
+    , _InternalFailureException
+    , _UnauthorizedException
+    , _BadRequestException
+    , _LimitExceededException
+
+    -- * AuthenticationType
+    , AuthenticationType (..)
+
+    -- * DataSourceType
+    , DataSourceType (..)
+
+    -- * DefaultAction
+    , DefaultAction (..)
+
+    -- * FieldLogLevel
+    , FieldLogLevel (..)
+
+    -- * OutputType
+    , OutputType (..)
+
+    -- * SchemaStatus
+    , SchemaStatus (..)
+
+    -- * TypeDefinitionFormat
+    , TypeDefinitionFormat (..)
+
+    -- * APIKey
+    , APIKey
+    , apiKey
+    , akExpires
+    , akId
+    , akDescription
+
+    -- * DataSource
+    , DataSource
+    , dataSource
+    , dsServiceRoleARN
+    , dsDataSourceARN
+    , dsDynamodbConfig
+    , dsName
+    , dsLambdaConfig
+    , dsType
+    , dsDescription
+    , dsElasticsearchConfig
+
+    -- * DynamodbDataSourceConfig
+    , DynamodbDataSourceConfig
+    , dynamodbDataSourceConfig
+    , ddscUseCallerCredentials
+    , ddscTableName
+    , ddscAwsRegion
+
+    -- * ElasticsearchDataSourceConfig
+    , ElasticsearchDataSourceConfig
+    , elasticsearchDataSourceConfig
+    , edscEndpoint
+    , edscAwsRegion
+
+    -- * GraphqlAPI
+    , GraphqlAPI
+    , graphqlAPI
+    , gaArn
+    , gaApiId
+    , gaUris
+    , gaOpenIdConnectConfig
+    , gaName
+    , gaUserPoolConfig
+    , gaAuthenticationType
+    , gaLogConfig
+
+    -- * LambdaDataSourceConfig
+    , LambdaDataSourceConfig
+    , lambdaDataSourceConfig
+    , ldscLambdaFunctionARN
+
+    -- * LogConfig
+    , LogConfig
+    , logConfig
+    , lcFieldLogLevel
+    , lcCloudWatchLogsRoleARN
+
+    -- * OpenIdConnectConfig
+    , OpenIdConnectConfig
+    , openIdConnectConfig
+    , oiccAuthTTL
+    , oiccClientId
+    , oiccIatTTL
+    , oiccIssuer
+
+    -- * Resolver
+    , Resolver
+    , resolver
+    , rTypeName
+    , rDataSourceName
+    , rRequestMappingTemplate
+    , rResolverARN
+    , rResponseMappingTemplate
+    , rFieldName
+
+    -- * Type
+    , Type
+    , type'
+    , tArn
+    , tDefinition
+    , tFormat
+    , tName
+    , tDescription
+
+    -- * UserPoolConfig
+    , UserPoolConfig
+    , userPoolConfig
+    , upcAppIdClientRegex
+    , upcUserPoolId
+    , upcAwsRegion
+    , upcDefaultAction
+    ) where
+
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.AppSync.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
+
+-- | API version @2017-07-25@ of the Amazon AppSync SDK configuration.
+appSync :: Service
+appSync =
+  Service
+    { _svcAbbrev = "AppSync"
+    , _svcSigner = v4
+    , _svcPrefix = "appsync"
+    , _svcVersion = "2017-07-25"
+    , _svcEndpoint = defaultEndpoint appSync
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError "AppSync"
+    , _svcRetry = retry
+    }
+  where
+    retry =
+      Exponential
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
+    check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
+      | has (hasStatus 429) e = Just "too_many_requests"
+      | has (hasCode "ThrottlingException" . hasStatus 400) e =
+        Just "throttling_exception"
+      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
+        Just "request_throttled_exception"
+      | has (hasStatus 502) e = Just "bad_gateway"
+      | has (hasStatus 503) e = Just "service_unavailable"
+      | has (hasStatus 500) e = Just "general_server_error"
+      | has (hasStatus 509) e = Just "limit_exceeded"
+      | otherwise = Nothing
+
+
+-- | The API key expiration must be set to a value between 1 and 365 days from creation (for @CreateApiKey@ ) or from update (for @UpdateApiKey@ ).
+--
+--
+_APIKeyValidityOutOfBoundsException :: AsError a => Getting (First ServiceError) a ServiceError
+_APIKeyValidityOutOfBoundsException =
+  _MatchServiceError appSync "ApiKeyValidityOutOfBoundsException" .
+  hasStatus 400
+
+
+-- | The API key exceeded a limit. Try your request again.
+--
+--
+_APIKeyLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_APIKeyLimitExceededException =
+  _MatchServiceError appSync "ApiKeyLimitExceededException" . hasStatus 400
+
+
+-- | The GraphQL API exceeded a limit. Try your request again.
+--
+--
+_APILimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_APILimitExceededException =
+  _MatchServiceError appSync "ApiLimitExceededException" . hasStatus 400
+
+
+-- | The resource specified in the request was not found. Check the resource and try again.
+--
+--
+_NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_NotFoundException =
+  _MatchServiceError appSync "NotFoundException" . hasStatus 404
+
+
+-- | The GraphQL schema is not valid.
+--
+--
+_GraphQLSchemaException :: AsError a => Getting (First ServiceError) a ServiceError
+_GraphQLSchemaException =
+  _MatchServiceError appSync "GraphQLSchemaException" . hasStatus 400
+
+
+-- | Another modification is being made. That modification must complete before you can make your change.
+--
+--
+_ConcurrentModificationException :: AsError a => Getting (First ServiceError) a ServiceError
+_ConcurrentModificationException =
+  _MatchServiceError appSync "ConcurrentModificationException" . hasStatus 409
+
+
+-- | An internal AWS AppSync error occurred. Try your request again.
+--
+--
+_InternalFailureException :: AsError a => Getting (First ServiceError) a ServiceError
+_InternalFailureException =
+  _MatchServiceError appSync "InternalFailureException" . hasStatus 500
+
+
+-- | You are not authorized to perform this operation.
+--
+--
+_UnauthorizedException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnauthorizedException =
+  _MatchServiceError appSync "UnauthorizedException" . hasStatus 401
+
+
+-- | The request is not well formed. For example, a value is invalid or a required field is missing. Check the field values, and try again.
+--
+--
+_BadRequestException :: AsError a => Getting (First ServiceError) a ServiceError
+_BadRequestException =
+  _MatchServiceError appSync "BadRequestException" . hasStatus 400
+
+
+-- | The request exceeded a limit. Try your request again.
+--
+--
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException =
+  _MatchServiceError appSync "LimitExceededException" . hasStatus 429
+
diff --git a/gen/Network/AWS/AppSync/Types/Product.hs b/gen/Network/AWS/AppSync/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/Types/Product.hs
@@ -0,0 +1,829 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.Types.Product
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.AppSync.Types.Product where
+
+import Network.AWS.AppSync.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+
+-- | Describes an API key.
+--
+--
+-- Customers invoke AWS AppSync GraphQL APIs with API keys as an identity mechanism. There are two key versions:
+--
+-- __da1__ : This version was introduced at launch in November 2017. These keys always expire after 7 days. Key expiration is managed by DynamoDB TTL. The keys will cease to be valid after Feb 21, 2018 and should not be used after that date.
+--
+--     * @ListApiKeys@ returns the expiration time in milliseconds.
+--
+--     * @CreateApiKey@ returns the expiration time in milliseconds.
+--
+--     * @UpdateApiKey@ is not available for this key version.
+--
+--     * @DeleteApiKey@ deletes the item from the table.
+--
+--     * Expiration is stored in DynamoDB as milliseconds. This results in a bug where keys are not automatically deleted because DynamoDB expects the TTL to be stored in seconds. As a one-time action, we will delete these keys from the table after Feb 21, 2018.
+--
+--
+--
+-- __da2__ : This version was introduced in February 2018 when AppSync added support to extend key expiration.
+--
+--     * @ListApiKeys@ returns the expiration time in seconds.
+--
+--     * @CreateApiKey@ returns the expiration time in seconds and accepts a user-provided expiration time in seconds.
+--
+--     * @UpdateApiKey@ returns the expiration time in seconds and accepts a user-provided expiration time in seconds. Key expiration can only be updated while the key has not expired.
+--
+--     * @DeleteApiKey@ deletes the item from the table.
+--
+--     * Expiration is stored in DynamoDB as seconds.
+--
+--
+--
+--
+-- /See:/ 'apiKey' smart constructor.
+data APIKey = APIKey'
+  { _akExpires     :: !(Maybe Integer)
+  , _akId          :: !(Maybe Text)
+  , _akDescription :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'APIKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'akExpires' - The time after which the API key expires. The date is represented as seconds since the epoch, rounded down to the nearest hour.
+--
+-- * 'akId' - The API key ID.
+--
+-- * 'akDescription' - A description of the purpose of the API key.
+apiKey
+    :: APIKey
+apiKey =
+  APIKey' {_akExpires = Nothing, _akId = Nothing, _akDescription = Nothing}
+
+
+-- | The time after which the API key expires. The date is represented as seconds since the epoch, rounded down to the nearest hour.
+akExpires :: Lens' APIKey (Maybe Integer)
+akExpires = lens _akExpires (\ s a -> s{_akExpires = a})
+
+-- | The API key ID.
+akId :: Lens' APIKey (Maybe Text)
+akId = lens _akId (\ s a -> s{_akId = a})
+
+-- | A description of the purpose of the API key.
+akDescription :: Lens' APIKey (Maybe Text)
+akDescription = lens _akDescription (\ s a -> s{_akDescription = a})
+
+instance FromJSON APIKey where
+        parseJSON
+          = withObject "APIKey"
+              (\ x ->
+                 APIKey' <$>
+                   (x .:? "expires") <*> (x .:? "id") <*>
+                     (x .:? "description"))
+
+instance Hashable APIKey where
+
+instance NFData APIKey where
+
+-- | Describes a data source.
+--
+--
+--
+-- /See:/ 'dataSource' smart constructor.
+data DataSource = DataSource'
+  { _dsServiceRoleARN      :: !(Maybe Text)
+  , _dsDataSourceARN       :: !(Maybe Text)
+  , _dsDynamodbConfig      :: !(Maybe DynamodbDataSourceConfig)
+  , _dsName                :: !(Maybe Text)
+  , _dsLambdaConfig        :: !(Maybe LambdaDataSourceConfig)
+  , _dsType                :: !(Maybe DataSourceType)
+  , _dsDescription         :: !(Maybe Text)
+  , _dsElasticsearchConfig :: !(Maybe ElasticsearchDataSourceConfig)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DataSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsServiceRoleARN' - The IAM service role ARN for the data source. The system assumes this role when accessing the data source.
+--
+-- * 'dsDataSourceARN' - The data source ARN.
+--
+-- * 'dsDynamodbConfig' - DynamoDB settings.
+--
+-- * 'dsName' - The name of the data source.
+--
+-- * 'dsLambdaConfig' - Lambda settings.
+--
+-- * 'dsType' - The type of the data source.     * __AMAZON_DYNAMODB__ : The data source is an Amazon DynamoDB table.     * __AMAZON_ELASTICSEARCH__ : The data source is an Amazon Elasticsearch Service domain.     * __AWS_LAMBDA__ : The data source is an AWS Lambda function.     * __NONE__ : There is no data source. This type is used when when you wish to invoke a GraphQL operation without connecting to a data source, such as performing data transformation with resolvers or triggering a subscription to be invoked from a mutation.
+--
+-- * 'dsDescription' - The description of the data source.
+--
+-- * 'dsElasticsearchConfig' - Amazon Elasticsearch settings.
+dataSource
+    :: DataSource
+dataSource =
+  DataSource'
+    { _dsServiceRoleARN = Nothing
+    , _dsDataSourceARN = Nothing
+    , _dsDynamodbConfig = Nothing
+    , _dsName = Nothing
+    , _dsLambdaConfig = Nothing
+    , _dsType = Nothing
+    , _dsDescription = Nothing
+    , _dsElasticsearchConfig = Nothing
+    }
+
+
+-- | The IAM service role ARN for the data source. The system assumes this role when accessing the data source.
+dsServiceRoleARN :: Lens' DataSource (Maybe Text)
+dsServiceRoleARN = lens _dsServiceRoleARN (\ s a -> s{_dsServiceRoleARN = a})
+
+-- | The data source ARN.
+dsDataSourceARN :: Lens' DataSource (Maybe Text)
+dsDataSourceARN = lens _dsDataSourceARN (\ s a -> s{_dsDataSourceARN = a})
+
+-- | DynamoDB settings.
+dsDynamodbConfig :: Lens' DataSource (Maybe DynamodbDataSourceConfig)
+dsDynamodbConfig = lens _dsDynamodbConfig (\ s a -> s{_dsDynamodbConfig = a})
+
+-- | The name of the data source.
+dsName :: Lens' DataSource (Maybe Text)
+dsName = lens _dsName (\ s a -> s{_dsName = a})
+
+-- | Lambda settings.
+dsLambdaConfig :: Lens' DataSource (Maybe LambdaDataSourceConfig)
+dsLambdaConfig = lens _dsLambdaConfig (\ s a -> s{_dsLambdaConfig = a})
+
+-- | The type of the data source.     * __AMAZON_DYNAMODB__ : The data source is an Amazon DynamoDB table.     * __AMAZON_ELASTICSEARCH__ : The data source is an Amazon Elasticsearch Service domain.     * __AWS_LAMBDA__ : The data source is an AWS Lambda function.     * __NONE__ : There is no data source. This type is used when when you wish to invoke a GraphQL operation without connecting to a data source, such as performing data transformation with resolvers or triggering a subscription to be invoked from a mutation.
+dsType :: Lens' DataSource (Maybe DataSourceType)
+dsType = lens _dsType (\ s a -> s{_dsType = a})
+
+-- | The description of the data source.
+dsDescription :: Lens' DataSource (Maybe Text)
+dsDescription = lens _dsDescription (\ s a -> s{_dsDescription = a})
+
+-- | Amazon Elasticsearch settings.
+dsElasticsearchConfig :: Lens' DataSource (Maybe ElasticsearchDataSourceConfig)
+dsElasticsearchConfig = lens _dsElasticsearchConfig (\ s a -> s{_dsElasticsearchConfig = a})
+
+instance FromJSON DataSource where
+        parseJSON
+          = withObject "DataSource"
+              (\ x ->
+                 DataSource' <$>
+                   (x .:? "serviceRoleArn") <*> (x .:? "dataSourceArn")
+                     <*> (x .:? "dynamodbConfig")
+                     <*> (x .:? "name")
+                     <*> (x .:? "lambdaConfig")
+                     <*> (x .:? "type")
+                     <*> (x .:? "description")
+                     <*> (x .:? "elasticsearchConfig"))
+
+instance Hashable DataSource where
+
+instance NFData DataSource where
+
+-- | Describes a DynamoDB data source configuration.
+--
+--
+--
+-- /See:/ 'dynamodbDataSourceConfig' smart constructor.
+data DynamodbDataSourceConfig = DynamodbDataSourceConfig'
+  { _ddscUseCallerCredentials :: !(Maybe Bool)
+  , _ddscTableName            :: !Text
+  , _ddscAwsRegion            :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DynamodbDataSourceConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddscUseCallerCredentials' - Set to TRUE to use Amazon Cognito credentials with this data source.
+--
+-- * 'ddscTableName' - The table name.
+--
+-- * 'ddscAwsRegion' - The AWS region.
+dynamodbDataSourceConfig
+    :: Text -- ^ 'ddscTableName'
+    -> Text -- ^ 'ddscAwsRegion'
+    -> DynamodbDataSourceConfig
+dynamodbDataSourceConfig pTableName_ pAwsRegion_ =
+  DynamodbDataSourceConfig'
+    { _ddscUseCallerCredentials = Nothing
+    , _ddscTableName = pTableName_
+    , _ddscAwsRegion = pAwsRegion_
+    }
+
+
+-- | Set to TRUE to use Amazon Cognito credentials with this data source.
+ddscUseCallerCredentials :: Lens' DynamodbDataSourceConfig (Maybe Bool)
+ddscUseCallerCredentials = lens _ddscUseCallerCredentials (\ s a -> s{_ddscUseCallerCredentials = a})
+
+-- | The table name.
+ddscTableName :: Lens' DynamodbDataSourceConfig Text
+ddscTableName = lens _ddscTableName (\ s a -> s{_ddscTableName = a})
+
+-- | The AWS region.
+ddscAwsRegion :: Lens' DynamodbDataSourceConfig Text
+ddscAwsRegion = lens _ddscAwsRegion (\ s a -> s{_ddscAwsRegion = a})
+
+instance FromJSON DynamodbDataSourceConfig where
+        parseJSON
+          = withObject "DynamodbDataSourceConfig"
+              (\ x ->
+                 DynamodbDataSourceConfig' <$>
+                   (x .:? "useCallerCredentials") <*> (x .: "tableName")
+                     <*> (x .: "awsRegion"))
+
+instance Hashable DynamodbDataSourceConfig where
+
+instance NFData DynamodbDataSourceConfig where
+
+instance ToJSON DynamodbDataSourceConfig where
+        toJSON DynamodbDataSourceConfig'{..}
+          = object
+              (catMaybes
+                 [("useCallerCredentials" .=) <$>
+                    _ddscUseCallerCredentials,
+                  Just ("tableName" .= _ddscTableName),
+                  Just ("awsRegion" .= _ddscAwsRegion)])
+
+-- | Describes an Elasticsearch data source configuration.
+--
+--
+--
+-- /See:/ 'elasticsearchDataSourceConfig' smart constructor.
+data ElasticsearchDataSourceConfig = ElasticsearchDataSourceConfig'
+  { _edscEndpoint  :: !Text
+  , _edscAwsRegion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ElasticsearchDataSourceConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edscEndpoint' - The endpoint.
+--
+-- * 'edscAwsRegion' - The AWS region.
+elasticsearchDataSourceConfig
+    :: Text -- ^ 'edscEndpoint'
+    -> Text -- ^ 'edscAwsRegion'
+    -> ElasticsearchDataSourceConfig
+elasticsearchDataSourceConfig pEndpoint_ pAwsRegion_ =
+  ElasticsearchDataSourceConfig'
+    {_edscEndpoint = pEndpoint_, _edscAwsRegion = pAwsRegion_}
+
+
+-- | The endpoint.
+edscEndpoint :: Lens' ElasticsearchDataSourceConfig Text
+edscEndpoint = lens _edscEndpoint (\ s a -> s{_edscEndpoint = a})
+
+-- | The AWS region.
+edscAwsRegion :: Lens' ElasticsearchDataSourceConfig Text
+edscAwsRegion = lens _edscAwsRegion (\ s a -> s{_edscAwsRegion = a})
+
+instance FromJSON ElasticsearchDataSourceConfig where
+        parseJSON
+          = withObject "ElasticsearchDataSourceConfig"
+              (\ x ->
+                 ElasticsearchDataSourceConfig' <$>
+                   (x .: "endpoint") <*> (x .: "awsRegion"))
+
+instance Hashable ElasticsearchDataSourceConfig where
+
+instance NFData ElasticsearchDataSourceConfig where
+
+instance ToJSON ElasticsearchDataSourceConfig where
+        toJSON ElasticsearchDataSourceConfig'{..}
+          = object
+              (catMaybes
+                 [Just ("endpoint" .= _edscEndpoint),
+                  Just ("awsRegion" .= _edscAwsRegion)])
+
+-- | Describes a GraphQL API.
+--
+--
+--
+-- /See:/ 'graphqlAPI' smart constructor.
+data GraphqlAPI = GraphqlAPI'
+  { _gaArn                 :: !(Maybe Text)
+  , _gaApiId               :: !(Maybe Text)
+  , _gaUris                :: !(Maybe (Map Text Text))
+  , _gaOpenIdConnectConfig :: !(Maybe OpenIdConnectConfig)
+  , _gaName                :: !(Maybe Text)
+  , _gaUserPoolConfig      :: !(Maybe UserPoolConfig)
+  , _gaAuthenticationType  :: !(Maybe AuthenticationType)
+  , _gaLogConfig           :: !(Maybe LogConfig)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GraphqlAPI' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gaArn' - The ARN.
+--
+-- * 'gaApiId' - The API ID.
+--
+-- * 'gaUris' - The URIs.
+--
+-- * 'gaOpenIdConnectConfig' - The Open Id Connect configuration.
+--
+-- * 'gaName' - The API name.
+--
+-- * 'gaUserPoolConfig' - The Amazon Cognito User Pool configuration.
+--
+-- * 'gaAuthenticationType' - The authentication type.
+--
+-- * 'gaLogConfig' - The Amazon CloudWatch Logs configuration.
+graphqlAPI
+    :: GraphqlAPI
+graphqlAPI =
+  GraphqlAPI'
+    { _gaArn = Nothing
+    , _gaApiId = Nothing
+    , _gaUris = Nothing
+    , _gaOpenIdConnectConfig = Nothing
+    , _gaName = Nothing
+    , _gaUserPoolConfig = Nothing
+    , _gaAuthenticationType = Nothing
+    , _gaLogConfig = Nothing
+    }
+
+
+-- | The ARN.
+gaArn :: Lens' GraphqlAPI (Maybe Text)
+gaArn = lens _gaArn (\ s a -> s{_gaArn = a})
+
+-- | The API ID.
+gaApiId :: Lens' GraphqlAPI (Maybe Text)
+gaApiId = lens _gaApiId (\ s a -> s{_gaApiId = a})
+
+-- | The URIs.
+gaUris :: Lens' GraphqlAPI (HashMap Text Text)
+gaUris = lens _gaUris (\ s a -> s{_gaUris = a}) . _Default . _Map
+
+-- | The Open Id Connect configuration.
+gaOpenIdConnectConfig :: Lens' GraphqlAPI (Maybe OpenIdConnectConfig)
+gaOpenIdConnectConfig = lens _gaOpenIdConnectConfig (\ s a -> s{_gaOpenIdConnectConfig = a})
+
+-- | The API name.
+gaName :: Lens' GraphqlAPI (Maybe Text)
+gaName = lens _gaName (\ s a -> s{_gaName = a})
+
+-- | The Amazon Cognito User Pool configuration.
+gaUserPoolConfig :: Lens' GraphqlAPI (Maybe UserPoolConfig)
+gaUserPoolConfig = lens _gaUserPoolConfig (\ s a -> s{_gaUserPoolConfig = a})
+
+-- | The authentication type.
+gaAuthenticationType :: Lens' GraphqlAPI (Maybe AuthenticationType)
+gaAuthenticationType = lens _gaAuthenticationType (\ s a -> s{_gaAuthenticationType = a})
+
+-- | The Amazon CloudWatch Logs configuration.
+gaLogConfig :: Lens' GraphqlAPI (Maybe LogConfig)
+gaLogConfig = lens _gaLogConfig (\ s a -> s{_gaLogConfig = a})
+
+instance FromJSON GraphqlAPI where
+        parseJSON
+          = withObject "GraphqlAPI"
+              (\ x ->
+                 GraphqlAPI' <$>
+                   (x .:? "arn") <*> (x .:? "apiId") <*>
+                     (x .:? "uris" .!= mempty)
+                     <*> (x .:? "openIDConnectConfig")
+                     <*> (x .:? "name")
+                     <*> (x .:? "userPoolConfig")
+                     <*> (x .:? "authenticationType")
+                     <*> (x .:? "logConfig"))
+
+instance Hashable GraphqlAPI where
+
+instance NFData GraphqlAPI where
+
+-- | Describes a Lambda data source configuration.
+--
+--
+--
+-- /See:/ 'lambdaDataSourceConfig' smart constructor.
+newtype LambdaDataSourceConfig = LambdaDataSourceConfig'
+  { _ldscLambdaFunctionARN :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LambdaDataSourceConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldscLambdaFunctionARN' - The ARN for the Lambda function.
+lambdaDataSourceConfig
+    :: Text -- ^ 'ldscLambdaFunctionARN'
+    -> LambdaDataSourceConfig
+lambdaDataSourceConfig pLambdaFunctionARN_ =
+  LambdaDataSourceConfig' {_ldscLambdaFunctionARN = pLambdaFunctionARN_}
+
+
+-- | The ARN for the Lambda function.
+ldscLambdaFunctionARN :: Lens' LambdaDataSourceConfig Text
+ldscLambdaFunctionARN = lens _ldscLambdaFunctionARN (\ s a -> s{_ldscLambdaFunctionARN = a})
+
+instance FromJSON LambdaDataSourceConfig where
+        parseJSON
+          = withObject "LambdaDataSourceConfig"
+              (\ x ->
+                 LambdaDataSourceConfig' <$>
+                   (x .: "lambdaFunctionArn"))
+
+instance Hashable LambdaDataSourceConfig where
+
+instance NFData LambdaDataSourceConfig where
+
+instance ToJSON LambdaDataSourceConfig where
+        toJSON LambdaDataSourceConfig'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("lambdaFunctionArn" .= _ldscLambdaFunctionARN)])
+
+-- | The CloudWatch Logs configuration.
+--
+--
+--
+-- /See:/ 'logConfig' smart constructor.
+data LogConfig = LogConfig'
+  { _lcFieldLogLevel         :: !FieldLogLevel
+  , _lcCloudWatchLogsRoleARN :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LogConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcFieldLogLevel' - The field logging level. Values can be NONE, ERROR, ALL.      * __NONE__ : No field-level logs are captured.     * __ERROR__ : Logs the following information only for the fields that are in error:     * The error section in the server response.     * Field-level errors.     * The generated request/response functions that got resolved for error fields.     * __ALL__ : The following information is logged for all fields in the query:     * Field-level tracing information.     * The generated request/response functions that got resolved for each field.
+--
+-- * 'lcCloudWatchLogsRoleARN' - The service role that AWS AppSync will assume to publish to Amazon CloudWatch logs in your account.
+logConfig
+    :: FieldLogLevel -- ^ 'lcFieldLogLevel'
+    -> Text -- ^ 'lcCloudWatchLogsRoleARN'
+    -> LogConfig
+logConfig pFieldLogLevel_ pCloudWatchLogsRoleARN_ =
+  LogConfig'
+    { _lcFieldLogLevel = pFieldLogLevel_
+    , _lcCloudWatchLogsRoleARN = pCloudWatchLogsRoleARN_
+    }
+
+
+-- | The field logging level. Values can be NONE, ERROR, ALL.      * __NONE__ : No field-level logs are captured.     * __ERROR__ : Logs the following information only for the fields that are in error:     * The error section in the server response.     * Field-level errors.     * The generated request/response functions that got resolved for error fields.     * __ALL__ : The following information is logged for all fields in the query:     * Field-level tracing information.     * The generated request/response functions that got resolved for each field.
+lcFieldLogLevel :: Lens' LogConfig FieldLogLevel
+lcFieldLogLevel = lens _lcFieldLogLevel (\ s a -> s{_lcFieldLogLevel = a})
+
+-- | The service role that AWS AppSync will assume to publish to Amazon CloudWatch logs in your account.
+lcCloudWatchLogsRoleARN :: Lens' LogConfig Text
+lcCloudWatchLogsRoleARN = lens _lcCloudWatchLogsRoleARN (\ s a -> s{_lcCloudWatchLogsRoleARN = a})
+
+instance FromJSON LogConfig where
+        parseJSON
+          = withObject "LogConfig"
+              (\ x ->
+                 LogConfig' <$>
+                   (x .: "fieldLogLevel") <*>
+                     (x .: "cloudWatchLogsRoleArn"))
+
+instance Hashable LogConfig where
+
+instance NFData LogConfig where
+
+instance ToJSON LogConfig where
+        toJSON LogConfig'{..}
+          = object
+              (catMaybes
+                 [Just ("fieldLogLevel" .= _lcFieldLogLevel),
+                  Just
+                    ("cloudWatchLogsRoleArn" .=
+                       _lcCloudWatchLogsRoleARN)])
+
+-- | Describes an Open Id Connect configuration.
+--
+--
+--
+-- /See:/ 'openIdConnectConfig' smart constructor.
+data OpenIdConnectConfig = OpenIdConnectConfig'
+  { _oiccAuthTTL  :: !(Maybe Integer)
+  , _oiccClientId :: !(Maybe Text)
+  , _oiccIatTTL   :: !(Maybe Integer)
+  , _oiccIssuer   :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OpenIdConnectConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiccAuthTTL' - The number of milliseconds a token is valid after being authenticated.
+--
+-- * 'oiccClientId' - The client identifier of the Relying party at the OpenID Provider. This identifier is typically obtained when the Relying party is registered with the OpenID Provider. You can specify a regular expression so the AWS AppSync can validate against multiple client identifiers at a time
+--
+-- * 'oiccIatTTL' - The number of milliseconds a token is valid after being issued to a user.
+--
+-- * 'oiccIssuer' - The issuer for the open id connect configuration. The issuer returned by discovery MUST exactly match the value of iss in the ID Token.
+openIdConnectConfig
+    :: Text -- ^ 'oiccIssuer'
+    -> OpenIdConnectConfig
+openIdConnectConfig pIssuer_ =
+  OpenIdConnectConfig'
+    { _oiccAuthTTL = Nothing
+    , _oiccClientId = Nothing
+    , _oiccIatTTL = Nothing
+    , _oiccIssuer = pIssuer_
+    }
+
+
+-- | The number of milliseconds a token is valid after being authenticated.
+oiccAuthTTL :: Lens' OpenIdConnectConfig (Maybe Integer)
+oiccAuthTTL = lens _oiccAuthTTL (\ s a -> s{_oiccAuthTTL = a})
+
+-- | The client identifier of the Relying party at the OpenID Provider. This identifier is typically obtained when the Relying party is registered with the OpenID Provider. You can specify a regular expression so the AWS AppSync can validate against multiple client identifiers at a time
+oiccClientId :: Lens' OpenIdConnectConfig (Maybe Text)
+oiccClientId = lens _oiccClientId (\ s a -> s{_oiccClientId = a})
+
+-- | The number of milliseconds a token is valid after being issued to a user.
+oiccIatTTL :: Lens' OpenIdConnectConfig (Maybe Integer)
+oiccIatTTL = lens _oiccIatTTL (\ s a -> s{_oiccIatTTL = a})
+
+-- | The issuer for the open id connect configuration. The issuer returned by discovery MUST exactly match the value of iss in the ID Token.
+oiccIssuer :: Lens' OpenIdConnectConfig Text
+oiccIssuer = lens _oiccIssuer (\ s a -> s{_oiccIssuer = a})
+
+instance FromJSON OpenIdConnectConfig where
+        parseJSON
+          = withObject "OpenIdConnectConfig"
+              (\ x ->
+                 OpenIdConnectConfig' <$>
+                   (x .:? "authTTL") <*> (x .:? "clientId") <*>
+                     (x .:? "iatTTL")
+                     <*> (x .: "issuer"))
+
+instance Hashable OpenIdConnectConfig where
+
+instance NFData OpenIdConnectConfig where
+
+instance ToJSON OpenIdConnectConfig where
+        toJSON OpenIdConnectConfig'{..}
+          = object
+              (catMaybes
+                 [("authTTL" .=) <$> _oiccAuthTTL,
+                  ("clientId" .=) <$> _oiccClientId,
+                  ("iatTTL" .=) <$> _oiccIatTTL,
+                  Just ("issuer" .= _oiccIssuer)])
+
+-- | Describes a resolver.
+--
+--
+--
+-- /See:/ 'resolver' smart constructor.
+data Resolver = Resolver'
+  { _rTypeName                :: !(Maybe Text)
+  , _rDataSourceName          :: !(Maybe Text)
+  , _rRequestMappingTemplate  :: !(Maybe Text)
+  , _rResolverARN             :: !(Maybe Text)
+  , _rResponseMappingTemplate :: !(Maybe Text)
+  , _rFieldName               :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Resolver' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rTypeName' - The resolver type name.
+--
+-- * 'rDataSourceName' - The resolver data source name.
+--
+-- * 'rRequestMappingTemplate' - The request mapping template.
+--
+-- * 'rResolverARN' - The resolver ARN.
+--
+-- * 'rResponseMappingTemplate' - The response mapping template.
+--
+-- * 'rFieldName' - The resolver field name.
+resolver
+    :: Resolver
+resolver =
+  Resolver'
+    { _rTypeName = Nothing
+    , _rDataSourceName = Nothing
+    , _rRequestMappingTemplate = Nothing
+    , _rResolverARN = Nothing
+    , _rResponseMappingTemplate = Nothing
+    , _rFieldName = Nothing
+    }
+
+
+-- | The resolver type name.
+rTypeName :: Lens' Resolver (Maybe Text)
+rTypeName = lens _rTypeName (\ s a -> s{_rTypeName = a})
+
+-- | The resolver data source name.
+rDataSourceName :: Lens' Resolver (Maybe Text)
+rDataSourceName = lens _rDataSourceName (\ s a -> s{_rDataSourceName = a})
+
+-- | The request mapping template.
+rRequestMappingTemplate :: Lens' Resolver (Maybe Text)
+rRequestMappingTemplate = lens _rRequestMappingTemplate (\ s a -> s{_rRequestMappingTemplate = a})
+
+-- | The resolver ARN.
+rResolverARN :: Lens' Resolver (Maybe Text)
+rResolverARN = lens _rResolverARN (\ s a -> s{_rResolverARN = a})
+
+-- | The response mapping template.
+rResponseMappingTemplate :: Lens' Resolver (Maybe Text)
+rResponseMappingTemplate = lens _rResponseMappingTemplate (\ s a -> s{_rResponseMappingTemplate = a})
+
+-- | The resolver field name.
+rFieldName :: Lens' Resolver (Maybe Text)
+rFieldName = lens _rFieldName (\ s a -> s{_rFieldName = a})
+
+instance FromJSON Resolver where
+        parseJSON
+          = withObject "Resolver"
+              (\ x ->
+                 Resolver' <$>
+                   (x .:? "typeName") <*> (x .:? "dataSourceName") <*>
+                     (x .:? "requestMappingTemplate")
+                     <*> (x .:? "resolverArn")
+                     <*> (x .:? "responseMappingTemplate")
+                     <*> (x .:? "fieldName"))
+
+instance Hashable Resolver where
+
+instance NFData Resolver where
+
+-- | Describes a type.
+--
+--
+--
+-- /See:/ 'type'' smart constructor.
+data Type = Type'
+  { _tArn         :: !(Maybe Text)
+  , _tDefinition  :: !(Maybe Text)
+  , _tFormat      :: !(Maybe TypeDefinitionFormat)
+  , _tName        :: !(Maybe Text)
+  , _tDescription :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Type' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tArn' - The type ARN.
+--
+-- * 'tDefinition' - The type definition.
+--
+-- * 'tFormat' - The type format: SDL or JSON.
+--
+-- * 'tName' - The type name.
+--
+-- * 'tDescription' - The type description.
+type'
+    :: Type
+type' =
+  Type'
+    { _tArn = Nothing
+    , _tDefinition = Nothing
+    , _tFormat = Nothing
+    , _tName = Nothing
+    , _tDescription = Nothing
+    }
+
+
+-- | The type ARN.
+tArn :: Lens' Type (Maybe Text)
+tArn = lens _tArn (\ s a -> s{_tArn = a})
+
+-- | The type definition.
+tDefinition :: Lens' Type (Maybe Text)
+tDefinition = lens _tDefinition (\ s a -> s{_tDefinition = a})
+
+-- | The type format: SDL or JSON.
+tFormat :: Lens' Type (Maybe TypeDefinitionFormat)
+tFormat = lens _tFormat (\ s a -> s{_tFormat = a})
+
+-- | The type name.
+tName :: Lens' Type (Maybe Text)
+tName = lens _tName (\ s a -> s{_tName = a})
+
+-- | The type description.
+tDescription :: Lens' Type (Maybe Text)
+tDescription = lens _tDescription (\ s a -> s{_tDescription = a})
+
+instance FromJSON Type where
+        parseJSON
+          = withObject "Type"
+              (\ x ->
+                 Type' <$>
+                   (x .:? "arn") <*> (x .:? "definition") <*>
+                     (x .:? "format")
+                     <*> (x .:? "name")
+                     <*> (x .:? "description"))
+
+instance Hashable Type where
+
+instance NFData Type where
+
+-- | Describes an Amazon Cognito User Pool configuration.
+--
+--
+--
+-- /See:/ 'userPoolConfig' smart constructor.
+data UserPoolConfig = UserPoolConfig'
+  { _upcAppIdClientRegex :: !(Maybe Text)
+  , _upcUserPoolId       :: !Text
+  , _upcAwsRegion        :: !Text
+  , _upcDefaultAction    :: !DefaultAction
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UserPoolConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upcAppIdClientRegex' - A regular expression for validating the incoming Amazon Cognito User Pool app client ID.
+--
+-- * 'upcUserPoolId' - The user pool ID.
+--
+-- * 'upcAwsRegion' - The AWS region in which the user pool was created.
+--
+-- * 'upcDefaultAction' - The action that you want your GraphQL API to take when a request that uses Amazon Cognito User Pool authentication doesn't match the Amazon Cognito User Pool configuration.
+userPoolConfig
+    :: Text -- ^ 'upcUserPoolId'
+    -> Text -- ^ 'upcAwsRegion'
+    -> DefaultAction -- ^ 'upcDefaultAction'
+    -> UserPoolConfig
+userPoolConfig pUserPoolId_ pAwsRegion_ pDefaultAction_ =
+  UserPoolConfig'
+    { _upcAppIdClientRegex = Nothing
+    , _upcUserPoolId = pUserPoolId_
+    , _upcAwsRegion = pAwsRegion_
+    , _upcDefaultAction = pDefaultAction_
+    }
+
+
+-- | A regular expression for validating the incoming Amazon Cognito User Pool app client ID.
+upcAppIdClientRegex :: Lens' UserPoolConfig (Maybe Text)
+upcAppIdClientRegex = lens _upcAppIdClientRegex (\ s a -> s{_upcAppIdClientRegex = a})
+
+-- | The user pool ID.
+upcUserPoolId :: Lens' UserPoolConfig Text
+upcUserPoolId = lens _upcUserPoolId (\ s a -> s{_upcUserPoolId = a})
+
+-- | The AWS region in which the user pool was created.
+upcAwsRegion :: Lens' UserPoolConfig Text
+upcAwsRegion = lens _upcAwsRegion (\ s a -> s{_upcAwsRegion = a})
+
+-- | The action that you want your GraphQL API to take when a request that uses Amazon Cognito User Pool authentication doesn't match the Amazon Cognito User Pool configuration.
+upcDefaultAction :: Lens' UserPoolConfig DefaultAction
+upcDefaultAction = lens _upcDefaultAction (\ s a -> s{_upcDefaultAction = a})
+
+instance FromJSON UserPoolConfig where
+        parseJSON
+          = withObject "UserPoolConfig"
+              (\ x ->
+                 UserPoolConfig' <$>
+                   (x .:? "appIdClientRegex") <*> (x .: "userPoolId")
+                     <*> (x .: "awsRegion")
+                     <*> (x .: "defaultAction"))
+
+instance Hashable UserPoolConfig where
+
+instance NFData UserPoolConfig where
+
+instance ToJSON UserPoolConfig where
+        toJSON UserPoolConfig'{..}
+          = object
+              (catMaybes
+                 [("appIdClientRegex" .=) <$> _upcAppIdClientRegex,
+                  Just ("userPoolId" .= _upcUserPoolId),
+                  Just ("awsRegion" .= _upcAwsRegion),
+                  Just ("defaultAction" .= _upcDefaultAction)])
diff --git a/gen/Network/AWS/AppSync/Types/Sum.hs b/gen/Network/AWS/AppSync/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/Types/Sum.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.Types.Sum
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.AppSync.Types.Sum where
+
+import Network.AWS.Prelude
+
+data AuthenticationType
+  = APIKey
+  | AWSIAM
+  | AmazonCognitoUserPools
+  | OpenidConnect
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText AuthenticationType where
+    parser = takeLowerText >>= \case
+        "api_key" -> pure APIKey
+        "aws_iam" -> pure AWSIAM
+        "amazon_cognito_user_pools" -> pure AmazonCognitoUserPools
+        "openid_connect" -> pure OpenidConnect
+        e -> fromTextError $ "Failure parsing AuthenticationType from value: '" <> e
+           <> "'. Accepted values: api_key, aws_iam, amazon_cognito_user_pools, openid_connect"
+
+instance ToText AuthenticationType where
+    toText = \case
+        APIKey -> "API_KEY"
+        AWSIAM -> "AWS_IAM"
+        AmazonCognitoUserPools -> "AMAZON_COGNITO_USER_POOLS"
+        OpenidConnect -> "OPENID_CONNECT"
+
+instance Hashable     AuthenticationType
+instance NFData       AuthenticationType
+instance ToByteString AuthenticationType
+instance ToQuery      AuthenticationType
+instance ToHeader     AuthenticationType
+
+instance ToJSON AuthenticationType where
+    toJSON = toJSONText
+
+instance FromJSON AuthenticationType where
+    parseJSON = parseJSONText "AuthenticationType"
+
+data DataSourceType
+  = AWSLambda
+  | AmazonDynamodb
+  | AmazonElasticsearch
+  | None
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText DataSourceType where
+    parser = takeLowerText >>= \case
+        "aws_lambda" -> pure AWSLambda
+        "amazon_dynamodb" -> pure AmazonDynamodb
+        "amazon_elasticsearch" -> pure AmazonElasticsearch
+        "none" -> pure None
+        e -> fromTextError $ "Failure parsing DataSourceType from value: '" <> e
+           <> "'. Accepted values: aws_lambda, amazon_dynamodb, amazon_elasticsearch, none"
+
+instance ToText DataSourceType where
+    toText = \case
+        AWSLambda -> "AWS_LAMBDA"
+        AmazonDynamodb -> "AMAZON_DYNAMODB"
+        AmazonElasticsearch -> "AMAZON_ELASTICSEARCH"
+        None -> "NONE"
+
+instance Hashable     DataSourceType
+instance NFData       DataSourceType
+instance ToByteString DataSourceType
+instance ToQuery      DataSourceType
+instance ToHeader     DataSourceType
+
+instance ToJSON DataSourceType where
+    toJSON = toJSONText
+
+instance FromJSON DataSourceType where
+    parseJSON = parseJSONText "DataSourceType"
+
+data DefaultAction
+  = Allow
+  | Deny
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText DefaultAction where
+    parser = takeLowerText >>= \case
+        "allow" -> pure Allow
+        "deny" -> pure Deny
+        e -> fromTextError $ "Failure parsing DefaultAction from value: '" <> e
+           <> "'. Accepted values: allow, deny"
+
+instance ToText DefaultAction where
+    toText = \case
+        Allow -> "ALLOW"
+        Deny -> "DENY"
+
+instance Hashable     DefaultAction
+instance NFData       DefaultAction
+instance ToByteString DefaultAction
+instance ToQuery      DefaultAction
+instance ToHeader     DefaultAction
+
+instance ToJSON DefaultAction where
+    toJSON = toJSONText
+
+instance FromJSON DefaultAction where
+    parseJSON = parseJSONText "DefaultAction"
+
+data FieldLogLevel
+  = FLLAll
+  | FLLError'
+  | FLLNone
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText FieldLogLevel where
+    parser = takeLowerText >>= \case
+        "all" -> pure FLLAll
+        "error" -> pure FLLError'
+        "none" -> pure FLLNone
+        e -> fromTextError $ "Failure parsing FieldLogLevel from value: '" <> e
+           <> "'. Accepted values: all, error, none"
+
+instance ToText FieldLogLevel where
+    toText = \case
+        FLLAll -> "ALL"
+        FLLError' -> "ERROR"
+        FLLNone -> "NONE"
+
+instance Hashable     FieldLogLevel
+instance NFData       FieldLogLevel
+instance ToByteString FieldLogLevel
+instance ToQuery      FieldLogLevel
+instance ToHeader     FieldLogLevel
+
+instance ToJSON FieldLogLevel where
+    toJSON = toJSONText
+
+instance FromJSON FieldLogLevel where
+    parseJSON = parseJSONText "FieldLogLevel"
+
+data OutputType
+  = OTJSON
+  | OTSdl
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText OutputType where
+    parser = takeLowerText >>= \case
+        "json" -> pure OTJSON
+        "sdl" -> pure OTSdl
+        e -> fromTextError $ "Failure parsing OutputType from value: '" <> e
+           <> "'. Accepted values: json, sdl"
+
+instance ToText OutputType where
+    toText = \case
+        OTJSON -> "JSON"
+        OTSdl -> "SDL"
+
+instance Hashable     OutputType
+instance NFData       OutputType
+instance ToByteString OutputType
+instance ToQuery      OutputType
+instance ToHeader     OutputType
+
+instance ToJSON OutputType where
+    toJSON = toJSONText
+
+data SchemaStatus
+  = Active
+  | Deleting
+  | Processing
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SchemaStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "deleting" -> pure Deleting
+        "processing" -> pure Processing
+        e -> fromTextError $ "Failure parsing SchemaStatus from value: '" <> e
+           <> "'. Accepted values: active, deleting, processing"
+
+instance ToText SchemaStatus where
+    toText = \case
+        Active -> "ACTIVE"
+        Deleting -> "DELETING"
+        Processing -> "PROCESSING"
+
+instance Hashable     SchemaStatus
+instance NFData       SchemaStatus
+instance ToByteString SchemaStatus
+instance ToQuery      SchemaStatus
+instance ToHeader     SchemaStatus
+
+instance FromJSON SchemaStatus where
+    parseJSON = parseJSONText "SchemaStatus"
+
+data TypeDefinitionFormat
+  = JSON
+  | Sdl
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText TypeDefinitionFormat where
+    parser = takeLowerText >>= \case
+        "json" -> pure JSON
+        "sdl" -> pure Sdl
+        e -> fromTextError $ "Failure parsing TypeDefinitionFormat from value: '" <> e
+           <> "'. Accepted values: json, sdl"
+
+instance ToText TypeDefinitionFormat where
+    toText = \case
+        JSON -> "JSON"
+        Sdl -> "SDL"
+
+instance Hashable     TypeDefinitionFormat
+instance NFData       TypeDefinitionFormat
+instance ToByteString TypeDefinitionFormat
+instance ToQuery      TypeDefinitionFormat
+instance ToHeader     TypeDefinitionFormat
+
+instance ToJSON TypeDefinitionFormat where
+    toJSON = toJSONText
+
+instance FromJSON TypeDefinitionFormat where
+    parseJSON = parseJSONText "TypeDefinitionFormat"
diff --git a/gen/Network/AWS/AppSync/UpdateAPIKey.hs b/gen/Network/AWS/AppSync/UpdateAPIKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/UpdateAPIKey.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.UpdateAPIKey
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an API key.
+--
+--
+module Network.AWS.AppSync.UpdateAPIKey
+    (
+    -- * Creating a Request
+      updateAPIKey
+    , UpdateAPIKey
+    -- * Request Lenses
+    , uakExpires
+    , uakDescription
+    , uakApiId
+    , uakId
+
+    -- * Destructuring the Response
+    , updateAPIKeyResponse
+    , UpdateAPIKeyResponse
+    -- * Response Lenses
+    , uakrsApiKey
+    , uakrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateAPIKey' smart constructor.
+data UpdateAPIKey = UpdateAPIKey'
+  { _uakExpires     :: !(Maybe Integer)
+  , _uakDescription :: !(Maybe Text)
+  , _uakApiId       :: !Text
+  , _uakId          :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateAPIKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uakExpires' - The time from update time after which the API key expires. The date is represented as seconds since the epoch. For more information, see .
+--
+-- * 'uakDescription' - A description of the purpose of the API key.
+--
+-- * 'uakApiId' - The ID for the GraphQL API
+--
+-- * 'uakId' - The API key ID.
+updateAPIKey
+    :: Text -- ^ 'uakApiId'
+    -> Text -- ^ 'uakId'
+    -> UpdateAPIKey
+updateAPIKey pApiId_ pId_ =
+  UpdateAPIKey'
+    { _uakExpires = Nothing
+    , _uakDescription = Nothing
+    , _uakApiId = pApiId_
+    , _uakId = pId_
+    }
+
+
+-- | The time from update time after which the API key expires. The date is represented as seconds since the epoch. For more information, see .
+uakExpires :: Lens' UpdateAPIKey (Maybe Integer)
+uakExpires = lens _uakExpires (\ s a -> s{_uakExpires = a})
+
+-- | A description of the purpose of the API key.
+uakDescription :: Lens' UpdateAPIKey (Maybe Text)
+uakDescription = lens _uakDescription (\ s a -> s{_uakDescription = a})
+
+-- | The ID for the GraphQL API
+uakApiId :: Lens' UpdateAPIKey Text
+uakApiId = lens _uakApiId (\ s a -> s{_uakApiId = a})
+
+-- | The API key ID.
+uakId :: Lens' UpdateAPIKey Text
+uakId = lens _uakId (\ s a -> s{_uakId = a})
+
+instance AWSRequest UpdateAPIKey where
+        type Rs UpdateAPIKey = UpdateAPIKeyResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateAPIKeyResponse' <$>
+                   (x .?> "apiKey") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateAPIKey where
+
+instance NFData UpdateAPIKey where
+
+instance ToHeaders UpdateAPIKey where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateAPIKey where
+        toJSON UpdateAPIKey'{..}
+          = object
+              (catMaybes
+                 [("expires" .=) <$> _uakExpires,
+                  ("description" .=) <$> _uakDescription])
+
+instance ToPath UpdateAPIKey where
+        toPath UpdateAPIKey'{..}
+          = mconcat
+              ["/v1/apis/", toBS _uakApiId, "/apikeys/",
+               toBS _uakId]
+
+instance ToQuery UpdateAPIKey where
+        toQuery = const mempty
+
+-- | /See:/ 'updateAPIKeyResponse' smart constructor.
+data UpdateAPIKeyResponse = UpdateAPIKeyResponse'
+  { _uakrsApiKey         :: !(Maybe APIKey)
+  , _uakrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateAPIKeyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uakrsApiKey' - The API key.
+--
+-- * 'uakrsResponseStatus' - -- | The response status code.
+updateAPIKeyResponse
+    :: Int -- ^ 'uakrsResponseStatus'
+    -> UpdateAPIKeyResponse
+updateAPIKeyResponse pResponseStatus_ =
+  UpdateAPIKeyResponse'
+    {_uakrsApiKey = Nothing, _uakrsResponseStatus = pResponseStatus_}
+
+
+-- | The API key.
+uakrsApiKey :: Lens' UpdateAPIKeyResponse (Maybe APIKey)
+uakrsApiKey = lens _uakrsApiKey (\ s a -> s{_uakrsApiKey = a})
+
+-- | -- | The response status code.
+uakrsResponseStatus :: Lens' UpdateAPIKeyResponse Int
+uakrsResponseStatus = lens _uakrsResponseStatus (\ s a -> s{_uakrsResponseStatus = a})
+
+instance NFData UpdateAPIKeyResponse where
diff --git a/gen/Network/AWS/AppSync/UpdateDataSource.hs b/gen/Network/AWS/AppSync/UpdateDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/UpdateDataSource.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.UpdateDataSource
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a @DataSource@ object.
+--
+--
+module Network.AWS.AppSync.UpdateDataSource
+    (
+    -- * Creating a Request
+      updateDataSource
+    , UpdateDataSource
+    -- * Request Lenses
+    , udsServiceRoleARN
+    , udsDynamodbConfig
+    , udsLambdaConfig
+    , udsDescription
+    , udsElasticsearchConfig
+    , udsApiId
+    , udsName
+    , udsType
+
+    -- * Destructuring the Response
+    , updateDataSourceResponse
+    , UpdateDataSourceResponse
+    -- * Response Lenses
+    , udsrsDataSource
+    , udsrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateDataSource' smart constructor.
+data UpdateDataSource = UpdateDataSource'
+  { _udsServiceRoleARN      :: !(Maybe Text)
+  , _udsDynamodbConfig      :: !(Maybe DynamodbDataSourceConfig)
+  , _udsLambdaConfig        :: !(Maybe LambdaDataSourceConfig)
+  , _udsDescription         :: !(Maybe Text)
+  , _udsElasticsearchConfig :: !(Maybe ElasticsearchDataSourceConfig)
+  , _udsApiId               :: !Text
+  , _udsName                :: !Text
+  , _udsType                :: !DataSourceType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDataSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udsServiceRoleARN' - The new service role ARN for the data source.
+--
+-- * 'udsDynamodbConfig' - The new DynamoDB configuration.
+--
+-- * 'udsLambdaConfig' - The new Lambda configuration.
+--
+-- * 'udsDescription' - The new description for the data source.
+--
+-- * 'udsElasticsearchConfig' - The new Elasticsearch configuration.
+--
+-- * 'udsApiId' - The API ID.
+--
+-- * 'udsName' - The new name for the data source.
+--
+-- * 'udsType' - The new data source type.
+updateDataSource
+    :: Text -- ^ 'udsApiId'
+    -> Text -- ^ 'udsName'
+    -> DataSourceType -- ^ 'udsType'
+    -> UpdateDataSource
+updateDataSource pApiId_ pName_ pType_ =
+  UpdateDataSource'
+    { _udsServiceRoleARN = Nothing
+    , _udsDynamodbConfig = Nothing
+    , _udsLambdaConfig = Nothing
+    , _udsDescription = Nothing
+    , _udsElasticsearchConfig = Nothing
+    , _udsApiId = pApiId_
+    , _udsName = pName_
+    , _udsType = pType_
+    }
+
+
+-- | The new service role ARN for the data source.
+udsServiceRoleARN :: Lens' UpdateDataSource (Maybe Text)
+udsServiceRoleARN = lens _udsServiceRoleARN (\ s a -> s{_udsServiceRoleARN = a})
+
+-- | The new DynamoDB configuration.
+udsDynamodbConfig :: Lens' UpdateDataSource (Maybe DynamodbDataSourceConfig)
+udsDynamodbConfig = lens _udsDynamodbConfig (\ s a -> s{_udsDynamodbConfig = a})
+
+-- | The new Lambda configuration.
+udsLambdaConfig :: Lens' UpdateDataSource (Maybe LambdaDataSourceConfig)
+udsLambdaConfig = lens _udsLambdaConfig (\ s a -> s{_udsLambdaConfig = a})
+
+-- | The new description for the data source.
+udsDescription :: Lens' UpdateDataSource (Maybe Text)
+udsDescription = lens _udsDescription (\ s a -> s{_udsDescription = a})
+
+-- | The new Elasticsearch configuration.
+udsElasticsearchConfig :: Lens' UpdateDataSource (Maybe ElasticsearchDataSourceConfig)
+udsElasticsearchConfig = lens _udsElasticsearchConfig (\ s a -> s{_udsElasticsearchConfig = a})
+
+-- | The API ID.
+udsApiId :: Lens' UpdateDataSource Text
+udsApiId = lens _udsApiId (\ s a -> s{_udsApiId = a})
+
+-- | The new name for the data source.
+udsName :: Lens' UpdateDataSource Text
+udsName = lens _udsName (\ s a -> s{_udsName = a})
+
+-- | The new data source type.
+udsType :: Lens' UpdateDataSource DataSourceType
+udsType = lens _udsType (\ s a -> s{_udsType = a})
+
+instance AWSRequest UpdateDataSource where
+        type Rs UpdateDataSource = UpdateDataSourceResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateDataSourceResponse' <$>
+                   (x .?> "dataSource") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateDataSource where
+
+instance NFData UpdateDataSource where
+
+instance ToHeaders UpdateDataSource where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateDataSource where
+        toJSON UpdateDataSource'{..}
+          = object
+              (catMaybes
+                 [("serviceRoleArn" .=) <$> _udsServiceRoleARN,
+                  ("dynamodbConfig" .=) <$> _udsDynamodbConfig,
+                  ("lambdaConfig" .=) <$> _udsLambdaConfig,
+                  ("description" .=) <$> _udsDescription,
+                  ("elasticsearchConfig" .=) <$>
+                    _udsElasticsearchConfig,
+                  Just ("type" .= _udsType)])
+
+instance ToPath UpdateDataSource where
+        toPath UpdateDataSource'{..}
+          = mconcat
+              ["/v1/apis/", toBS _udsApiId, "/datasources/",
+               toBS _udsName]
+
+instance ToQuery UpdateDataSource where
+        toQuery = const mempty
+
+-- | /See:/ 'updateDataSourceResponse' smart constructor.
+data UpdateDataSourceResponse = UpdateDataSourceResponse'
+  { _udsrsDataSource     :: !(Maybe DataSource)
+  , _udsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDataSourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udsrsDataSource' - The updated @DataSource@ object.
+--
+-- * 'udsrsResponseStatus' - -- | The response status code.
+updateDataSourceResponse
+    :: Int -- ^ 'udsrsResponseStatus'
+    -> UpdateDataSourceResponse
+updateDataSourceResponse pResponseStatus_ =
+  UpdateDataSourceResponse'
+    {_udsrsDataSource = Nothing, _udsrsResponseStatus = pResponseStatus_}
+
+
+-- | The updated @DataSource@ object.
+udsrsDataSource :: Lens' UpdateDataSourceResponse (Maybe DataSource)
+udsrsDataSource = lens _udsrsDataSource (\ s a -> s{_udsrsDataSource = a})
+
+-- | -- | The response status code.
+udsrsResponseStatus :: Lens' UpdateDataSourceResponse Int
+udsrsResponseStatus = lens _udsrsResponseStatus (\ s a -> s{_udsrsResponseStatus = a})
+
+instance NFData UpdateDataSourceResponse where
diff --git a/gen/Network/AWS/AppSync/UpdateGraphqlAPI.hs b/gen/Network/AWS/AppSync/UpdateGraphqlAPI.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/UpdateGraphqlAPI.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.UpdateGraphqlAPI
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a @GraphqlApi@ object.
+--
+--
+module Network.AWS.AppSync.UpdateGraphqlAPI
+    (
+    -- * Creating a Request
+      updateGraphqlAPI
+    , UpdateGraphqlAPI
+    -- * Request Lenses
+    , ugaOpenIdConnectConfig
+    , ugaUserPoolConfig
+    , ugaAuthenticationType
+    , ugaLogConfig
+    , ugaApiId
+    , ugaName
+
+    -- * Destructuring the Response
+    , updateGraphqlAPIResponse
+    , UpdateGraphqlAPIResponse
+    -- * Response Lenses
+    , ugarsGraphqlAPI
+    , ugarsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateGraphqlAPI' smart constructor.
+data UpdateGraphqlAPI = UpdateGraphqlAPI'
+  { _ugaOpenIdConnectConfig :: !(Maybe OpenIdConnectConfig)
+  , _ugaUserPoolConfig      :: !(Maybe UserPoolConfig)
+  , _ugaAuthenticationType  :: !(Maybe AuthenticationType)
+  , _ugaLogConfig           :: !(Maybe LogConfig)
+  , _ugaApiId               :: !Text
+  , _ugaName                :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateGraphqlAPI' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugaOpenIdConnectConfig' - The Open Id Connect configuration configuration for the @GraphqlApi@ object.
+--
+-- * 'ugaUserPoolConfig' - The new Amazon Cognito User Pool configuration for the @GraphqlApi@ object.
+--
+-- * 'ugaAuthenticationType' - The new authentication type for the @GraphqlApi@ object.
+--
+-- * 'ugaLogConfig' - The Amazon CloudWatch logs configuration for the @GraphqlApi@ object.
+--
+-- * 'ugaApiId' - The API ID.
+--
+-- * 'ugaName' - The new name for the @GraphqlApi@ object.
+updateGraphqlAPI
+    :: Text -- ^ 'ugaApiId'
+    -> Text -- ^ 'ugaName'
+    -> UpdateGraphqlAPI
+updateGraphqlAPI pApiId_ pName_ =
+  UpdateGraphqlAPI'
+    { _ugaOpenIdConnectConfig = Nothing
+    , _ugaUserPoolConfig = Nothing
+    , _ugaAuthenticationType = Nothing
+    , _ugaLogConfig = Nothing
+    , _ugaApiId = pApiId_
+    , _ugaName = pName_
+    }
+
+
+-- | The Open Id Connect configuration configuration for the @GraphqlApi@ object.
+ugaOpenIdConnectConfig :: Lens' UpdateGraphqlAPI (Maybe OpenIdConnectConfig)
+ugaOpenIdConnectConfig = lens _ugaOpenIdConnectConfig (\ s a -> s{_ugaOpenIdConnectConfig = a})
+
+-- | The new Amazon Cognito User Pool configuration for the @GraphqlApi@ object.
+ugaUserPoolConfig :: Lens' UpdateGraphqlAPI (Maybe UserPoolConfig)
+ugaUserPoolConfig = lens _ugaUserPoolConfig (\ s a -> s{_ugaUserPoolConfig = a})
+
+-- | The new authentication type for the @GraphqlApi@ object.
+ugaAuthenticationType :: Lens' UpdateGraphqlAPI (Maybe AuthenticationType)
+ugaAuthenticationType = lens _ugaAuthenticationType (\ s a -> s{_ugaAuthenticationType = a})
+
+-- | The Amazon CloudWatch logs configuration for the @GraphqlApi@ object.
+ugaLogConfig :: Lens' UpdateGraphqlAPI (Maybe LogConfig)
+ugaLogConfig = lens _ugaLogConfig (\ s a -> s{_ugaLogConfig = a})
+
+-- | The API ID.
+ugaApiId :: Lens' UpdateGraphqlAPI Text
+ugaApiId = lens _ugaApiId (\ s a -> s{_ugaApiId = a})
+
+-- | The new name for the @GraphqlApi@ object.
+ugaName :: Lens' UpdateGraphqlAPI Text
+ugaName = lens _ugaName (\ s a -> s{_ugaName = a})
+
+instance AWSRequest UpdateGraphqlAPI where
+        type Rs UpdateGraphqlAPI = UpdateGraphqlAPIResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateGraphqlAPIResponse' <$>
+                   (x .?> "graphqlApi") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateGraphqlAPI where
+
+instance NFData UpdateGraphqlAPI where
+
+instance ToHeaders UpdateGraphqlAPI where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateGraphqlAPI where
+        toJSON UpdateGraphqlAPI'{..}
+          = object
+              (catMaybes
+                 [("openIDConnectConfig" .=) <$>
+                    _ugaOpenIdConnectConfig,
+                  ("userPoolConfig" .=) <$> _ugaUserPoolConfig,
+                  ("authenticationType" .=) <$> _ugaAuthenticationType,
+                  ("logConfig" .=) <$> _ugaLogConfig,
+                  Just ("name" .= _ugaName)])
+
+instance ToPath UpdateGraphqlAPI where
+        toPath UpdateGraphqlAPI'{..}
+          = mconcat ["/v1/apis/", toBS _ugaApiId]
+
+instance ToQuery UpdateGraphqlAPI where
+        toQuery = const mempty
+
+-- | /See:/ 'updateGraphqlAPIResponse' smart constructor.
+data UpdateGraphqlAPIResponse = UpdateGraphqlAPIResponse'
+  { _ugarsGraphqlAPI     :: !(Maybe GraphqlAPI)
+  , _ugarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateGraphqlAPIResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugarsGraphqlAPI' - The updated @GraphqlApi@ object.
+--
+-- * 'ugarsResponseStatus' - -- | The response status code.
+updateGraphqlAPIResponse
+    :: Int -- ^ 'ugarsResponseStatus'
+    -> UpdateGraphqlAPIResponse
+updateGraphqlAPIResponse pResponseStatus_ =
+  UpdateGraphqlAPIResponse'
+    {_ugarsGraphqlAPI = Nothing, _ugarsResponseStatus = pResponseStatus_}
+
+
+-- | The updated @GraphqlApi@ object.
+ugarsGraphqlAPI :: Lens' UpdateGraphqlAPIResponse (Maybe GraphqlAPI)
+ugarsGraphqlAPI = lens _ugarsGraphqlAPI (\ s a -> s{_ugarsGraphqlAPI = a})
+
+-- | -- | The response status code.
+ugarsResponseStatus :: Lens' UpdateGraphqlAPIResponse Int
+ugarsResponseStatus = lens _ugarsResponseStatus (\ s a -> s{_ugarsResponseStatus = a})
+
+instance NFData UpdateGraphqlAPIResponse where
diff --git a/gen/Network/AWS/AppSync/UpdateResolver.hs b/gen/Network/AWS/AppSync/UpdateResolver.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/UpdateResolver.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.UpdateResolver
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a @Resolver@ object.
+--
+--
+module Network.AWS.AppSync.UpdateResolver
+    (
+    -- * Creating a Request
+      updateResolver
+    , UpdateResolver
+    -- * Request Lenses
+    , urResponseMappingTemplate
+    , urApiId
+    , urTypeName
+    , urFieldName
+    , urDataSourceName
+    , urRequestMappingTemplate
+
+    -- * Destructuring the Response
+    , updateResolverResponse
+    , UpdateResolverResponse
+    -- * Response Lenses
+    , urrsResolver
+    , urrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateResolver' smart constructor.
+data UpdateResolver = UpdateResolver'
+  { _urResponseMappingTemplate :: !(Maybe Text)
+  , _urApiId                   :: !Text
+  , _urTypeName                :: !Text
+  , _urFieldName               :: !Text
+  , _urDataSourceName          :: !Text
+  , _urRequestMappingTemplate  :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateResolver' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'urResponseMappingTemplate' - The new response mapping template.
+--
+-- * 'urApiId' - The API ID.
+--
+-- * 'urTypeName' - The new type name.
+--
+-- * 'urFieldName' - The new field name.
+--
+-- * 'urDataSourceName' - The new data source name.
+--
+-- * 'urRequestMappingTemplate' - The new request mapping template.
+updateResolver
+    :: Text -- ^ 'urApiId'
+    -> Text -- ^ 'urTypeName'
+    -> Text -- ^ 'urFieldName'
+    -> Text -- ^ 'urDataSourceName'
+    -> Text -- ^ 'urRequestMappingTemplate'
+    -> UpdateResolver
+updateResolver pApiId_ pTypeName_ pFieldName_ pDataSourceName_ pRequestMappingTemplate_ =
+  UpdateResolver'
+    { _urResponseMappingTemplate = Nothing
+    , _urApiId = pApiId_
+    , _urTypeName = pTypeName_
+    , _urFieldName = pFieldName_
+    , _urDataSourceName = pDataSourceName_
+    , _urRequestMappingTemplate = pRequestMappingTemplate_
+    }
+
+
+-- | The new response mapping template.
+urResponseMappingTemplate :: Lens' UpdateResolver (Maybe Text)
+urResponseMappingTemplate = lens _urResponseMappingTemplate (\ s a -> s{_urResponseMappingTemplate = a})
+
+-- | The API ID.
+urApiId :: Lens' UpdateResolver Text
+urApiId = lens _urApiId (\ s a -> s{_urApiId = a})
+
+-- | The new type name.
+urTypeName :: Lens' UpdateResolver Text
+urTypeName = lens _urTypeName (\ s a -> s{_urTypeName = a})
+
+-- | The new field name.
+urFieldName :: Lens' UpdateResolver Text
+urFieldName = lens _urFieldName (\ s a -> s{_urFieldName = a})
+
+-- | The new data source name.
+urDataSourceName :: Lens' UpdateResolver Text
+urDataSourceName = lens _urDataSourceName (\ s a -> s{_urDataSourceName = a})
+
+-- | The new request mapping template.
+urRequestMappingTemplate :: Lens' UpdateResolver Text
+urRequestMappingTemplate = lens _urRequestMappingTemplate (\ s a -> s{_urRequestMappingTemplate = a})
+
+instance AWSRequest UpdateResolver where
+        type Rs UpdateResolver = UpdateResolverResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateResolverResponse' <$>
+                   (x .?> "resolver") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateResolver where
+
+instance NFData UpdateResolver where
+
+instance ToHeaders UpdateResolver where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateResolver where
+        toJSON UpdateResolver'{..}
+          = object
+              (catMaybes
+                 [("responseMappingTemplate" .=) <$>
+                    _urResponseMappingTemplate,
+                  Just ("dataSourceName" .= _urDataSourceName),
+                  Just
+                    ("requestMappingTemplate" .=
+                       _urRequestMappingTemplate)])
+
+instance ToPath UpdateResolver where
+        toPath UpdateResolver'{..}
+          = mconcat
+              ["/v1/apis/", toBS _urApiId, "/types/",
+               toBS _urTypeName, "/resolvers/", toBS _urFieldName]
+
+instance ToQuery UpdateResolver where
+        toQuery = const mempty
+
+-- | /See:/ 'updateResolverResponse' smart constructor.
+data UpdateResolverResponse = UpdateResolverResponse'
+  { _urrsResolver       :: !(Maybe Resolver)
+  , _urrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateResolverResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'urrsResolver' - The updated @Resolver@ object.
+--
+-- * 'urrsResponseStatus' - -- | The response status code.
+updateResolverResponse
+    :: Int -- ^ 'urrsResponseStatus'
+    -> UpdateResolverResponse
+updateResolverResponse pResponseStatus_ =
+  UpdateResolverResponse'
+    {_urrsResolver = Nothing, _urrsResponseStatus = pResponseStatus_}
+
+
+-- | The updated @Resolver@ object.
+urrsResolver :: Lens' UpdateResolverResponse (Maybe Resolver)
+urrsResolver = lens _urrsResolver (\ s a -> s{_urrsResolver = a})
+
+-- | -- | The response status code.
+urrsResponseStatus :: Lens' UpdateResolverResponse Int
+urrsResponseStatus = lens _urrsResponseStatus (\ s a -> s{_urrsResponseStatus = a})
+
+instance NFData UpdateResolverResponse where
diff --git a/gen/Network/AWS/AppSync/UpdateType.hs b/gen/Network/AWS/AppSync/UpdateType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/UpdateType.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.UpdateType
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a @Type@ object.
+--
+--
+module Network.AWS.AppSync.UpdateType
+    (
+    -- * Creating a Request
+      updateType
+    , UpdateType
+    -- * Request Lenses
+    , utDefinition
+    , utApiId
+    , utTypeName
+    , utFormat
+
+    -- * Destructuring the Response
+    , updateTypeResponse
+    , UpdateTypeResponse
+    -- * Response Lenses
+    , utrsType
+    , utrsResponseStatus
+    ) where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.AppSync.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateType' smart constructor.
+data UpdateType = UpdateType'
+  { _utDefinition :: !(Maybe Text)
+  , _utApiId      :: !Text
+  , _utTypeName   :: !Text
+  , _utFormat     :: !TypeDefinitionFormat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utDefinition' - The new definition.
+--
+-- * 'utApiId' - The API ID.
+--
+-- * 'utTypeName' - The new type name.
+--
+-- * 'utFormat' - The new type format: SDL or JSON.
+updateType
+    :: Text -- ^ 'utApiId'
+    -> Text -- ^ 'utTypeName'
+    -> TypeDefinitionFormat -- ^ 'utFormat'
+    -> UpdateType
+updateType pApiId_ pTypeName_ pFormat_ =
+  UpdateType'
+    { _utDefinition = Nothing
+    , _utApiId = pApiId_
+    , _utTypeName = pTypeName_
+    , _utFormat = pFormat_
+    }
+
+
+-- | The new definition.
+utDefinition :: Lens' UpdateType (Maybe Text)
+utDefinition = lens _utDefinition (\ s a -> s{_utDefinition = a})
+
+-- | The API ID.
+utApiId :: Lens' UpdateType Text
+utApiId = lens _utApiId (\ s a -> s{_utApiId = a})
+
+-- | The new type name.
+utTypeName :: Lens' UpdateType Text
+utTypeName = lens _utTypeName (\ s a -> s{_utTypeName = a})
+
+-- | The new type format: SDL or JSON.
+utFormat :: Lens' UpdateType TypeDefinitionFormat
+utFormat = lens _utFormat (\ s a -> s{_utFormat = a})
+
+instance AWSRequest UpdateType where
+        type Rs UpdateType = UpdateTypeResponse
+        request = postJSON appSync
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateTypeResponse' <$>
+                   (x .?> "type") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateType where
+
+instance NFData UpdateType where
+
+instance ToHeaders UpdateType where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateType where
+        toJSON UpdateType'{..}
+          = object
+              (catMaybes
+                 [("definition" .=) <$> _utDefinition,
+                  Just ("format" .= _utFormat)])
+
+instance ToPath UpdateType where
+        toPath UpdateType'{..}
+          = mconcat
+              ["/v1/apis/", toBS _utApiId, "/types/",
+               toBS _utTypeName]
+
+instance ToQuery UpdateType where
+        toQuery = const mempty
+
+-- | /See:/ 'updateTypeResponse' smart constructor.
+data UpdateTypeResponse = UpdateTypeResponse'
+  { _utrsType           :: !(Maybe Type)
+  , _utrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utrsType' - The updated @Type@ object.
+--
+-- * 'utrsResponseStatus' - -- | The response status code.
+updateTypeResponse
+    :: Int -- ^ 'utrsResponseStatus'
+    -> UpdateTypeResponse
+updateTypeResponse pResponseStatus_ =
+  UpdateTypeResponse'
+    {_utrsType = Nothing, _utrsResponseStatus = pResponseStatus_}
+
+
+-- | The updated @Type@ object.
+utrsType :: Lens' UpdateTypeResponse (Maybe Type)
+utrsType = lens _utrsType (\ s a -> s{_utrsType = a})
+
+-- | -- | The response status code.
+utrsResponseStatus :: Lens' UpdateTypeResponse Int
+utrsResponseStatus = lens _utrsResponseStatus (\ s a -> s{_utrsResponseStatus = a})
+
+instance NFData UpdateTypeResponse where
diff --git a/gen/Network/AWS/AppSync/Waiters.hs b/gen/Network/AWS/AppSync/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/AppSync/Waiters.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.AppSync.Waiters
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.AppSync.Waiters where
+
+import Network.AWS.AppSync.Types
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Waiter
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.AppSync
+import Test.AWS.AppSync.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "AppSync"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/AppSync.hs b/test/Test/AWS/AppSync.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/AppSync.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.AWS.AppSync
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.AppSync
+    ( tests
+    , fixtures
+    ) where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/AppSync/Internal.hs b/test/Test/AWS/AppSync/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/AppSync/Internal.hs
@@ -0,0 +1,9 @@
+-- |
+-- Module      : Test.AWS.AppSync.Internal
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.AppSync.Internal where
diff --git a/test/Test/AWS/Gen/AppSync.hs b/test/Test/AWS/Gen/AppSync.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/AppSync.hs
@@ -0,0 +1,525 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.AppSync
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.AppSync where
+
+import Data.Proxy
+import Network.AWS.AppSync
+import Test.AWS.AppSync.Internal
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestUpdateDataSource $
+--             updateDataSource
+--
+--         , requestDeleteDataSource $
+--             deleteDataSource
+--
+--         , requestCreateType $
+--             createType
+--
+--         , requestGetGraphqlAPI $
+--             getGraphqlAPI
+--
+--         , requestCreateGraphqlAPI $
+--             createGraphqlAPI
+--
+--         , requestStartSchemaCreation $
+--             startSchemaCreation
+--
+--         , requestDeleteGraphqlAPI $
+--             deleteGraphqlAPI
+--
+--         , requestUpdateGraphqlAPI $
+--             updateGraphqlAPI
+--
+--         , requestGetIntrospectionSchema $
+--             getIntrospectionSchema
+--
+--         , requestGetDataSource $
+--             getDataSource
+--
+--         , requestDeleteAPIKey $
+--             deleteAPIKey
+--
+--         , requestUpdateAPIKey $
+--             updateAPIKey
+--
+--         , requestUpdateType $
+--             updateType
+--
+--         , requestDeleteType $
+--             deleteType
+--
+--         , requestCreateDataSource $
+--             createDataSource
+--
+--         , requestListTypes $
+--             listTypes
+--
+--         , requestListDataSources $
+--             listDataSources
+--
+--         , requestUpdateResolver $
+--             updateResolver
+--
+--         , requestDeleteResolver $
+--             deleteResolver
+--
+--         , requestListResolvers $
+--             listResolvers
+--
+--         , requestCreateResolver $
+--             createResolver
+--
+--         , requestGetSchemaCreationStatus $
+--             getSchemaCreationStatus
+--
+--         , requestListGraphqlAPIs $
+--             listGraphqlAPIs
+--
+--         , requestGetResolver $
+--             getResolver
+--
+--         , requestCreateAPIKey $
+--             createAPIKey
+--
+--         , requestListAPIKeys $
+--             listAPIKeys
+--
+--         , requestGetType $
+--             getType
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseUpdateDataSource $
+--             updateDataSourceResponse
+--
+--         , responseDeleteDataSource $
+--             deleteDataSourceResponse
+--
+--         , responseCreateType $
+--             createTypeResponse
+--
+--         , responseGetGraphqlAPI $
+--             getGraphqlAPIResponse
+--
+--         , responseCreateGraphqlAPI $
+--             createGraphqlAPIResponse
+--
+--         , responseStartSchemaCreation $
+--             startSchemaCreationResponse
+--
+--         , responseDeleteGraphqlAPI $
+--             deleteGraphqlAPIResponse
+--
+--         , responseUpdateGraphqlAPI $
+--             updateGraphqlAPIResponse
+--
+--         , responseGetIntrospectionSchema $
+--             getIntrospectionSchemaResponse
+--
+--         , responseGetDataSource $
+--             getDataSourceResponse
+--
+--         , responseDeleteAPIKey $
+--             deleteAPIKeyResponse
+--
+--         , responseUpdateAPIKey $
+--             updateAPIKeyResponse
+--
+--         , responseUpdateType $
+--             updateTypeResponse
+--
+--         , responseDeleteType $
+--             deleteTypeResponse
+--
+--         , responseCreateDataSource $
+--             createDataSourceResponse
+--
+--         , responseListTypes $
+--             listTypesResponse
+--
+--         , responseListDataSources $
+--             listDataSourcesResponse
+--
+--         , responseUpdateResolver $
+--             updateResolverResponse
+--
+--         , responseDeleteResolver $
+--             deleteResolverResponse
+--
+--         , responseListResolvers $
+--             listResolversResponse
+--
+--         , responseCreateResolver $
+--             createResolverResponse
+--
+--         , responseGetSchemaCreationStatus $
+--             getSchemaCreationStatusResponse
+--
+--         , responseListGraphqlAPIs $
+--             listGraphqlAPIsResponse
+--
+--         , responseGetResolver $
+--             getResolverResponse
+--
+--         , responseCreateAPIKey $
+--             createAPIKeyResponse
+--
+--         , responseListAPIKeys $
+--             listAPIKeysResponse
+--
+--         , responseGetType $
+--             getTypeResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestUpdateDataSource :: UpdateDataSource -> TestTree
+requestUpdateDataSource = req
+    "UpdateDataSource"
+    "fixture/UpdateDataSource.yaml"
+
+requestDeleteDataSource :: DeleteDataSource -> TestTree
+requestDeleteDataSource = req
+    "DeleteDataSource"
+    "fixture/DeleteDataSource.yaml"
+
+requestCreateType :: CreateType -> TestTree
+requestCreateType = req
+    "CreateType"
+    "fixture/CreateType.yaml"
+
+requestGetGraphqlAPI :: GetGraphqlAPI -> TestTree
+requestGetGraphqlAPI = req
+    "GetGraphqlAPI"
+    "fixture/GetGraphqlAPI.yaml"
+
+requestCreateGraphqlAPI :: CreateGraphqlAPI -> TestTree
+requestCreateGraphqlAPI = req
+    "CreateGraphqlAPI"
+    "fixture/CreateGraphqlAPI.yaml"
+
+requestStartSchemaCreation :: StartSchemaCreation -> TestTree
+requestStartSchemaCreation = req
+    "StartSchemaCreation"
+    "fixture/StartSchemaCreation.yaml"
+
+requestDeleteGraphqlAPI :: DeleteGraphqlAPI -> TestTree
+requestDeleteGraphqlAPI = req
+    "DeleteGraphqlAPI"
+    "fixture/DeleteGraphqlAPI.yaml"
+
+requestUpdateGraphqlAPI :: UpdateGraphqlAPI -> TestTree
+requestUpdateGraphqlAPI = req
+    "UpdateGraphqlAPI"
+    "fixture/UpdateGraphqlAPI.yaml"
+
+requestGetIntrospectionSchema :: GetIntrospectionSchema -> TestTree
+requestGetIntrospectionSchema = req
+    "GetIntrospectionSchema"
+    "fixture/GetIntrospectionSchema.yaml"
+
+requestGetDataSource :: GetDataSource -> TestTree
+requestGetDataSource = req
+    "GetDataSource"
+    "fixture/GetDataSource.yaml"
+
+requestDeleteAPIKey :: DeleteAPIKey -> TestTree
+requestDeleteAPIKey = req
+    "DeleteAPIKey"
+    "fixture/DeleteAPIKey.yaml"
+
+requestUpdateAPIKey :: UpdateAPIKey -> TestTree
+requestUpdateAPIKey = req
+    "UpdateAPIKey"
+    "fixture/UpdateAPIKey.yaml"
+
+requestUpdateType :: UpdateType -> TestTree
+requestUpdateType = req
+    "UpdateType"
+    "fixture/UpdateType.yaml"
+
+requestDeleteType :: DeleteType -> TestTree
+requestDeleteType = req
+    "DeleteType"
+    "fixture/DeleteType.yaml"
+
+requestCreateDataSource :: CreateDataSource -> TestTree
+requestCreateDataSource = req
+    "CreateDataSource"
+    "fixture/CreateDataSource.yaml"
+
+requestListTypes :: ListTypes -> TestTree
+requestListTypes = req
+    "ListTypes"
+    "fixture/ListTypes.yaml"
+
+requestListDataSources :: ListDataSources -> TestTree
+requestListDataSources = req
+    "ListDataSources"
+    "fixture/ListDataSources.yaml"
+
+requestUpdateResolver :: UpdateResolver -> TestTree
+requestUpdateResolver = req
+    "UpdateResolver"
+    "fixture/UpdateResolver.yaml"
+
+requestDeleteResolver :: DeleteResolver -> TestTree
+requestDeleteResolver = req
+    "DeleteResolver"
+    "fixture/DeleteResolver.yaml"
+
+requestListResolvers :: ListResolvers -> TestTree
+requestListResolvers = req
+    "ListResolvers"
+    "fixture/ListResolvers.yaml"
+
+requestCreateResolver :: CreateResolver -> TestTree
+requestCreateResolver = req
+    "CreateResolver"
+    "fixture/CreateResolver.yaml"
+
+requestGetSchemaCreationStatus :: GetSchemaCreationStatus -> TestTree
+requestGetSchemaCreationStatus = req
+    "GetSchemaCreationStatus"
+    "fixture/GetSchemaCreationStatus.yaml"
+
+requestListGraphqlAPIs :: ListGraphqlAPIs -> TestTree
+requestListGraphqlAPIs = req
+    "ListGraphqlAPIs"
+    "fixture/ListGraphqlAPIs.yaml"
+
+requestGetResolver :: GetResolver -> TestTree
+requestGetResolver = req
+    "GetResolver"
+    "fixture/GetResolver.yaml"
+
+requestCreateAPIKey :: CreateAPIKey -> TestTree
+requestCreateAPIKey = req
+    "CreateAPIKey"
+    "fixture/CreateAPIKey.yaml"
+
+requestListAPIKeys :: ListAPIKeys -> TestTree
+requestListAPIKeys = req
+    "ListAPIKeys"
+    "fixture/ListAPIKeys.yaml"
+
+requestGetType :: GetType -> TestTree
+requestGetType = req
+    "GetType"
+    "fixture/GetType.yaml"
+
+-- Responses
+
+responseUpdateDataSource :: UpdateDataSourceResponse -> TestTree
+responseUpdateDataSource = res
+    "UpdateDataSourceResponse"
+    "fixture/UpdateDataSourceResponse.proto"
+    appSync
+    (Proxy :: Proxy UpdateDataSource)
+
+responseDeleteDataSource :: DeleteDataSourceResponse -> TestTree
+responseDeleteDataSource = res
+    "DeleteDataSourceResponse"
+    "fixture/DeleteDataSourceResponse.proto"
+    appSync
+    (Proxy :: Proxy DeleteDataSource)
+
+responseCreateType :: CreateTypeResponse -> TestTree
+responseCreateType = res
+    "CreateTypeResponse"
+    "fixture/CreateTypeResponse.proto"
+    appSync
+    (Proxy :: Proxy CreateType)
+
+responseGetGraphqlAPI :: GetGraphqlAPIResponse -> TestTree
+responseGetGraphqlAPI = res
+    "GetGraphqlAPIResponse"
+    "fixture/GetGraphqlAPIResponse.proto"
+    appSync
+    (Proxy :: Proxy GetGraphqlAPI)
+
+responseCreateGraphqlAPI :: CreateGraphqlAPIResponse -> TestTree
+responseCreateGraphqlAPI = res
+    "CreateGraphqlAPIResponse"
+    "fixture/CreateGraphqlAPIResponse.proto"
+    appSync
+    (Proxy :: Proxy CreateGraphqlAPI)
+
+responseStartSchemaCreation :: StartSchemaCreationResponse -> TestTree
+responseStartSchemaCreation = res
+    "StartSchemaCreationResponse"
+    "fixture/StartSchemaCreationResponse.proto"
+    appSync
+    (Proxy :: Proxy StartSchemaCreation)
+
+responseDeleteGraphqlAPI :: DeleteGraphqlAPIResponse -> TestTree
+responseDeleteGraphqlAPI = res
+    "DeleteGraphqlAPIResponse"
+    "fixture/DeleteGraphqlAPIResponse.proto"
+    appSync
+    (Proxy :: Proxy DeleteGraphqlAPI)
+
+responseUpdateGraphqlAPI :: UpdateGraphqlAPIResponse -> TestTree
+responseUpdateGraphqlAPI = res
+    "UpdateGraphqlAPIResponse"
+    "fixture/UpdateGraphqlAPIResponse.proto"
+    appSync
+    (Proxy :: Proxy UpdateGraphqlAPI)
+
+responseGetIntrospectionSchema :: GetIntrospectionSchemaResponse -> TestTree
+responseGetIntrospectionSchema = res
+    "GetIntrospectionSchemaResponse"
+    "fixture/GetIntrospectionSchemaResponse.proto"
+    appSync
+    (Proxy :: Proxy GetIntrospectionSchema)
+
+responseGetDataSource :: GetDataSourceResponse -> TestTree
+responseGetDataSource = res
+    "GetDataSourceResponse"
+    "fixture/GetDataSourceResponse.proto"
+    appSync
+    (Proxy :: Proxy GetDataSource)
+
+responseDeleteAPIKey :: DeleteAPIKeyResponse -> TestTree
+responseDeleteAPIKey = res
+    "DeleteAPIKeyResponse"
+    "fixture/DeleteAPIKeyResponse.proto"
+    appSync
+    (Proxy :: Proxy DeleteAPIKey)
+
+responseUpdateAPIKey :: UpdateAPIKeyResponse -> TestTree
+responseUpdateAPIKey = res
+    "UpdateAPIKeyResponse"
+    "fixture/UpdateAPIKeyResponse.proto"
+    appSync
+    (Proxy :: Proxy UpdateAPIKey)
+
+responseUpdateType :: UpdateTypeResponse -> TestTree
+responseUpdateType = res
+    "UpdateTypeResponse"
+    "fixture/UpdateTypeResponse.proto"
+    appSync
+    (Proxy :: Proxy UpdateType)
+
+responseDeleteType :: DeleteTypeResponse -> TestTree
+responseDeleteType = res
+    "DeleteTypeResponse"
+    "fixture/DeleteTypeResponse.proto"
+    appSync
+    (Proxy :: Proxy DeleteType)
+
+responseCreateDataSource :: CreateDataSourceResponse -> TestTree
+responseCreateDataSource = res
+    "CreateDataSourceResponse"
+    "fixture/CreateDataSourceResponse.proto"
+    appSync
+    (Proxy :: Proxy CreateDataSource)
+
+responseListTypes :: ListTypesResponse -> TestTree
+responseListTypes = res
+    "ListTypesResponse"
+    "fixture/ListTypesResponse.proto"
+    appSync
+    (Proxy :: Proxy ListTypes)
+
+responseListDataSources :: ListDataSourcesResponse -> TestTree
+responseListDataSources = res
+    "ListDataSourcesResponse"
+    "fixture/ListDataSourcesResponse.proto"
+    appSync
+    (Proxy :: Proxy ListDataSources)
+
+responseUpdateResolver :: UpdateResolverResponse -> TestTree
+responseUpdateResolver = res
+    "UpdateResolverResponse"
+    "fixture/UpdateResolverResponse.proto"
+    appSync
+    (Proxy :: Proxy UpdateResolver)
+
+responseDeleteResolver :: DeleteResolverResponse -> TestTree
+responseDeleteResolver = res
+    "DeleteResolverResponse"
+    "fixture/DeleteResolverResponse.proto"
+    appSync
+    (Proxy :: Proxy DeleteResolver)
+
+responseListResolvers :: ListResolversResponse -> TestTree
+responseListResolvers = res
+    "ListResolversResponse"
+    "fixture/ListResolversResponse.proto"
+    appSync
+    (Proxy :: Proxy ListResolvers)
+
+responseCreateResolver :: CreateResolverResponse -> TestTree
+responseCreateResolver = res
+    "CreateResolverResponse"
+    "fixture/CreateResolverResponse.proto"
+    appSync
+    (Proxy :: Proxy CreateResolver)
+
+responseGetSchemaCreationStatus :: GetSchemaCreationStatusResponse -> TestTree
+responseGetSchemaCreationStatus = res
+    "GetSchemaCreationStatusResponse"
+    "fixture/GetSchemaCreationStatusResponse.proto"
+    appSync
+    (Proxy :: Proxy GetSchemaCreationStatus)
+
+responseListGraphqlAPIs :: ListGraphqlAPIsResponse -> TestTree
+responseListGraphqlAPIs = res
+    "ListGraphqlAPIsResponse"
+    "fixture/ListGraphqlAPIsResponse.proto"
+    appSync
+    (Proxy :: Proxy ListGraphqlAPIs)
+
+responseGetResolver :: GetResolverResponse -> TestTree
+responseGetResolver = res
+    "GetResolverResponse"
+    "fixture/GetResolverResponse.proto"
+    appSync
+    (Proxy :: Proxy GetResolver)
+
+responseCreateAPIKey :: CreateAPIKeyResponse -> TestTree
+responseCreateAPIKey = res
+    "CreateAPIKeyResponse"
+    "fixture/CreateAPIKeyResponse.proto"
+    appSync
+    (Proxy :: Proxy CreateAPIKey)
+
+responseListAPIKeys :: ListAPIKeysResponse -> TestTree
+responseListAPIKeys = res
+    "ListAPIKeysResponse"
+    "fixture/ListAPIKeysResponse.proto"
+    appSync
+    (Proxy :: Proxy ListAPIKeys)
+
+responseGetType :: GetTypeResponse -> TestTree
+responseGetType = res
+    "GetTypeResponse"
+    "fixture/GetTypeResponse.proto"
+    appSync
+    (Proxy :: Proxy GetType)
