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 Lex Model Building Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.5.0`
+
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-lex-models)
+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.LexModels](http://hackage.haskell.org/package/amazonka-lex-models/docs/Network-AWS-LexModels.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-lex-models` 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-lex-models.cabal b/amazonka-lex-models.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-lex-models.cabal
@@ -0,0 +1,119 @@
+name:                  amazonka-lex-models
+version:               1.5.0
+synopsis:              Amazon Lex Model Building Service 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-2017 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.LexModels" 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-lex-models
+
+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.LexModels
+        , Network.AWS.LexModels.CreateBotVersion
+        , Network.AWS.LexModels.CreateIntentVersion
+        , Network.AWS.LexModels.CreateSlotTypeVersion
+        , Network.AWS.LexModels.DeleteBot
+        , Network.AWS.LexModels.DeleteBotAlias
+        , Network.AWS.LexModels.DeleteBotChannelAssociation
+        , Network.AWS.LexModels.DeleteBotVersion
+        , Network.AWS.LexModels.DeleteIntent
+        , Network.AWS.LexModels.DeleteIntentVersion
+        , Network.AWS.LexModels.DeleteSlotType
+        , Network.AWS.LexModels.DeleteSlotTypeVersion
+        , Network.AWS.LexModels.DeleteUtterances
+        , Network.AWS.LexModels.GetBot
+        , Network.AWS.LexModels.GetBotAlias
+        , Network.AWS.LexModels.GetBotAliases
+        , Network.AWS.LexModels.GetBotChannelAssociation
+        , Network.AWS.LexModels.GetBotChannelAssociations
+        , Network.AWS.LexModels.GetBotVersions
+        , Network.AWS.LexModels.GetBots
+        , Network.AWS.LexModels.GetBuiltinIntent
+        , Network.AWS.LexModels.GetBuiltinIntents
+        , Network.AWS.LexModels.GetBuiltinSlotTypes
+        , Network.AWS.LexModels.GetExport
+        , Network.AWS.LexModels.GetIntent
+        , Network.AWS.LexModels.GetIntentVersions
+        , Network.AWS.LexModels.GetIntents
+        , Network.AWS.LexModels.GetSlotType
+        , Network.AWS.LexModels.GetSlotTypeVersions
+        , Network.AWS.LexModels.GetSlotTypes
+        , Network.AWS.LexModels.GetUtterancesView
+        , Network.AWS.LexModels.PutBot
+        , Network.AWS.LexModels.PutBotAlias
+        , Network.AWS.LexModels.PutIntent
+        , Network.AWS.LexModels.PutSlotType
+        , Network.AWS.LexModels.Types
+        , Network.AWS.LexModels.Waiters
+
+    other-modules:
+          Network.AWS.LexModels.Types.Product
+        , Network.AWS.LexModels.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.5.0.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-lex-models-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.LexModels
+        , Test.AWS.Gen.LexModels
+        , Test.AWS.LexModels.Internal
+
+    build-depends:
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-lex-models
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/CreateBotVersion.yaml b/fixture/CreateBotVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/CreateBotVersionResponse.proto b/fixture/CreateBotVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotVersionResponse.proto
diff --git a/fixture/CreateIntentVersion.yaml b/fixture/CreateIntentVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntentVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/CreateIntentVersionResponse.proto b/fixture/CreateIntentVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntentVersionResponse.proto
diff --git a/fixture/CreateSlotTypeVersion.yaml b/fixture/CreateSlotTypeVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSlotTypeVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/CreateSlotTypeVersionResponse.proto b/fixture/CreateSlotTypeVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSlotTypeVersionResponse.proto
diff --git a/fixture/DeleteBot.yaml b/fixture/DeleteBot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBot.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteBotAlias.yaml b/fixture/DeleteBotAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteBotAliasResponse.proto b/fixture/DeleteBotAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotAliasResponse.proto
diff --git a/fixture/DeleteBotChannelAssociation.yaml b/fixture/DeleteBotChannelAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotChannelAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteBotChannelAssociationResponse.proto b/fixture/DeleteBotChannelAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotChannelAssociationResponse.proto
diff --git a/fixture/DeleteBotResponse.proto b/fixture/DeleteBotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotResponse.proto
diff --git a/fixture/DeleteBotVersion.yaml b/fixture/DeleteBotVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteBotVersionResponse.proto b/fixture/DeleteBotVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotVersionResponse.proto
diff --git a/fixture/DeleteIntent.yaml b/fixture/DeleteIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteIntentResponse.proto b/fixture/DeleteIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntentResponse.proto
diff --git a/fixture/DeleteIntentVersion.yaml b/fixture/DeleteIntentVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntentVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteIntentVersionResponse.proto b/fixture/DeleteIntentVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntentVersionResponse.proto
diff --git a/fixture/DeleteSlotType.yaml b/fixture/DeleteSlotType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlotType.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteSlotTypeResponse.proto b/fixture/DeleteSlotTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlotTypeResponse.proto
diff --git a/fixture/DeleteSlotTypeVersion.yaml b/fixture/DeleteSlotTypeVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlotTypeVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteSlotTypeVersionResponse.proto b/fixture/DeleteSlotTypeVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlotTypeVersionResponse.proto
diff --git a/fixture/DeleteUtterances.yaml b/fixture/DeleteUtterances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUtterances.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/DeleteUtterancesResponse.proto b/fixture/DeleteUtterancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUtterancesResponse.proto
diff --git a/fixture/GetBot.yaml b/fixture/GetBot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBot.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBotAlias.yaml b/fixture/GetBotAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBotAliasResponse.proto b/fixture/GetBotAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotAliasResponse.proto
diff --git a/fixture/GetBotAliases.yaml b/fixture/GetBotAliases.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotAliases.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBotAliasesResponse.proto b/fixture/GetBotAliasesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotAliasesResponse.proto
diff --git a/fixture/GetBotChannelAssociation.yaml b/fixture/GetBotChannelAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotChannelAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBotChannelAssociationResponse.proto b/fixture/GetBotChannelAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotChannelAssociationResponse.proto
diff --git a/fixture/GetBotChannelAssociations.yaml b/fixture/GetBotChannelAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotChannelAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBotChannelAssociationsResponse.proto b/fixture/GetBotChannelAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotChannelAssociationsResponse.proto
diff --git a/fixture/GetBotResponse.proto b/fixture/GetBotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotResponse.proto
diff --git a/fixture/GetBotVersions.yaml b/fixture/GetBotVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBotVersionsResponse.proto b/fixture/GetBotVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotVersionsResponse.proto
diff --git a/fixture/GetBots.yaml b/fixture/GetBots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBots.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBotsResponse.proto b/fixture/GetBotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBotsResponse.proto
diff --git a/fixture/GetBuiltinIntent.yaml b/fixture/GetBuiltinIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBuiltinIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBuiltinIntentResponse.proto b/fixture/GetBuiltinIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBuiltinIntentResponse.proto
diff --git a/fixture/GetBuiltinIntents.yaml b/fixture/GetBuiltinIntents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBuiltinIntents.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBuiltinIntentsResponse.proto b/fixture/GetBuiltinIntentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBuiltinIntentsResponse.proto
diff --git a/fixture/GetBuiltinSlotTypes.yaml b/fixture/GetBuiltinSlotTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBuiltinSlotTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetBuiltinSlotTypesResponse.proto b/fixture/GetBuiltinSlotTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBuiltinSlotTypesResponse.proto
diff --git a/fixture/GetExport.yaml b/fixture/GetExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetExport.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetExportResponse.proto b/fixture/GetExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetExportResponse.proto
diff --git a/fixture/GetIntent.yaml b/fixture/GetIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetIntentResponse.proto b/fixture/GetIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntentResponse.proto
diff --git a/fixture/GetIntentVersions.yaml b/fixture/GetIntentVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntentVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetIntentVersionsResponse.proto b/fixture/GetIntentVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntentVersionsResponse.proto
diff --git a/fixture/GetIntents.yaml b/fixture/GetIntents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntents.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetIntentsResponse.proto b/fixture/GetIntentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIntentsResponse.proto
diff --git a/fixture/GetSlotType.yaml b/fixture/GetSlotType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSlotType.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetSlotTypeResponse.proto b/fixture/GetSlotTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSlotTypeResponse.proto
diff --git a/fixture/GetSlotTypeVersions.yaml b/fixture/GetSlotTypeVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSlotTypeVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetSlotTypeVersionsResponse.proto b/fixture/GetSlotTypeVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSlotTypeVersionsResponse.proto
diff --git a/fixture/GetSlotTypes.yaml b/fixture/GetSlotTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSlotTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetSlotTypesResponse.proto b/fixture/GetSlotTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSlotTypesResponse.proto
diff --git a/fixture/GetUtterancesView.yaml b/fixture/GetUtterancesView.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetUtterancesView.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/GetUtterancesViewResponse.proto b/fixture/GetUtterancesViewResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetUtterancesViewResponse.proto
diff --git a/fixture/PutBot.yaml b/fixture/PutBot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBot.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/PutBotAlias.yaml b/fixture/PutBotAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBotAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/PutBotAliasResponse.proto b/fixture/PutBotAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBotAliasResponse.proto
diff --git a/fixture/PutBotResponse.proto b/fixture/PutBotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBotResponse.proto
diff --git a/fixture/PutIntent.yaml b/fixture/PutIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/PutIntentResponse.proto b/fixture/PutIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutIntentResponse.proto
diff --git a/fixture/PutSlotType.yaml b/fixture/PutSlotType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutSlotType.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models.lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models.lex.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/PutSlotTypeResponse.proto b/fixture/PutSlotTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutSlotTypeResponse.proto
diff --git a/gen/Network/AWS/LexModels.hs b/gen/Network/AWS/LexModels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels.hs
@@ -0,0 +1,403 @@
+{-# 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.LexModels
+-- Copyright   : (c) 2013-2017 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)
+--
+-- __Amazon Lex Build-Time Actions__
+--
+-- Amazon Lex is an AWS service for building conversational voice and text interfaces. Use these actions to create, update, and delete conversational bots for new and existing client applications.
+--
+module Network.AWS.LexModels
+    (
+    -- * Service Configuration
+      lexModels
+
+    -- * Errors
+    -- $errors
+
+    -- ** PreconditionFailedException
+    , _PreconditionFailedException
+
+    -- ** ConflictException
+    , _ConflictException
+
+    -- ** NotFoundException
+    , _NotFoundException
+
+    -- ** InternalFailureException
+    , _InternalFailureException
+
+    -- ** BadRequestException
+    , _BadRequestException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- ** ResourceInUseException
+    , _ResourceInUseException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DeleteIntentVersion
+    , module Network.AWS.LexModels.DeleteIntentVersion
+
+    -- ** GetBotAliases
+    , module Network.AWS.LexModels.GetBotAliases
+
+    -- ** DeleteBotChannelAssociation
+    , module Network.AWS.LexModels.DeleteBotChannelAssociation
+
+    -- ** CreateSlotTypeVersion
+    , module Network.AWS.LexModels.CreateSlotTypeVersion
+
+    -- ** GetIntent
+    , module Network.AWS.LexModels.GetIntent
+
+    -- ** PutIntent
+    , module Network.AWS.LexModels.PutIntent
+
+    -- ** DeleteIntent
+    , module Network.AWS.LexModels.DeleteIntent
+
+    -- ** GetBuiltinIntents
+    , module Network.AWS.LexModels.GetBuiltinIntents
+
+    -- ** PutBot
+    , module Network.AWS.LexModels.PutBot
+
+    -- ** DeleteBot
+    , module Network.AWS.LexModels.DeleteBot
+
+    -- ** GetIntentVersions
+    , module Network.AWS.LexModels.GetIntentVersions
+
+    -- ** GetBuiltinIntent
+    , module Network.AWS.LexModels.GetBuiltinIntent
+
+    -- ** PutBotAlias
+    , module Network.AWS.LexModels.PutBotAlias
+
+    -- ** GetBotVersions
+    , module Network.AWS.LexModels.GetBotVersions
+
+    -- ** GetBotChannelAssociations
+    , module Network.AWS.LexModels.GetBotChannelAssociations
+
+    -- ** DeleteBotAlias
+    , module Network.AWS.LexModels.DeleteBotAlias
+
+    -- ** GetSlotTypes
+    , module Network.AWS.LexModels.GetSlotTypes
+
+    -- ** DeleteUtterances
+    , module Network.AWS.LexModels.DeleteUtterances
+
+    -- ** GetBots
+    , module Network.AWS.LexModels.GetBots
+
+    -- ** GetBot
+    , module Network.AWS.LexModels.GetBot
+
+    -- ** CreateBotVersion
+    , module Network.AWS.LexModels.CreateBotVersion
+
+    -- ** DeleteSlotTypeVersion
+    , module Network.AWS.LexModels.DeleteSlotTypeVersion
+
+    -- ** DeleteBotVersion
+    , module Network.AWS.LexModels.DeleteBotVersion
+
+    -- ** GetSlotType
+    , module Network.AWS.LexModels.GetSlotType
+
+    -- ** GetExport
+    , module Network.AWS.LexModels.GetExport
+
+    -- ** CreateIntentVersion
+    , module Network.AWS.LexModels.CreateIntentVersion
+
+    -- ** DeleteSlotType
+    , module Network.AWS.LexModels.DeleteSlotType
+
+    -- ** GetBotChannelAssociation
+    , module Network.AWS.LexModels.GetBotChannelAssociation
+
+    -- ** PutSlotType
+    , module Network.AWS.LexModels.PutSlotType
+
+    -- ** GetBuiltinSlotTypes
+    , module Network.AWS.LexModels.GetBuiltinSlotTypes
+
+    -- ** GetUtterancesView
+    , module Network.AWS.LexModels.GetUtterancesView
+
+    -- ** GetSlotTypeVersions
+    , module Network.AWS.LexModels.GetSlotTypeVersions
+
+    -- ** GetIntents
+    , module Network.AWS.LexModels.GetIntents
+
+    -- ** GetBotAlias
+    , module Network.AWS.LexModels.GetBotAlias
+
+    -- * Types
+
+    -- ** ChannelType
+    , ChannelType (..)
+
+    -- ** ContentType
+    , ContentType (..)
+
+    -- ** ExportStatus
+    , ExportStatus (..)
+
+    -- ** ExportType
+    , ExportType (..)
+
+    -- ** FulfillmentActivityType
+    , FulfillmentActivityType (..)
+
+    -- ** LexStatus
+    , LexStatus (..)
+
+    -- ** Locale
+    , Locale (..)
+
+    -- ** ProcessBehavior
+    , ProcessBehavior (..)
+
+    -- ** ResourceType
+    , ResourceType (..)
+
+    -- ** SlotConstraint
+    , SlotConstraint (..)
+
+    -- ** SlotValueSelectionStrategy
+    , SlotValueSelectionStrategy (..)
+
+    -- ** StatusType
+    , StatusType (..)
+
+    -- ** BotAliasMetadata
+    , BotAliasMetadata
+    , botAliasMetadata
+    , bamChecksum
+    , bamBotVersion
+    , bamBotName
+    , bamCreatedDate
+    , bamName
+    , bamLastUpdatedDate
+    , bamDescription
+
+    -- ** BotChannelAssociation
+    , BotChannelAssociation
+    , botChannelAssociation
+    , bcaBotAlias
+    , bcaBotName
+    , bcaBotConfiguration
+    , bcaCreatedDate
+    , bcaName
+    , bcaType
+    , bcaDescription
+
+    -- ** BotMetadata
+    , BotMetadata
+    , botMetadata
+    , bmStatus
+    , bmCreatedDate
+    , bmName
+    , bmVersion
+    , bmLastUpdatedDate
+    , bmDescription
+
+    -- ** BuiltinIntentMetadata
+    , BuiltinIntentMetadata
+    , builtinIntentMetadata
+    , bimSignature
+    , bimSupportedLocales
+
+    -- ** BuiltinIntentSlot
+    , BuiltinIntentSlot
+    , builtinIntentSlot
+    , bisName
+
+    -- ** BuiltinSlotTypeMetadata
+    , BuiltinSlotTypeMetadata
+    , builtinSlotTypeMetadata
+    , bstmSignature
+    , bstmSupportedLocales
+
+    -- ** CodeHook
+    , CodeHook
+    , codeHook
+    , chUri
+    , chMessageVersion
+
+    -- ** EnumerationValue
+    , EnumerationValue
+    , enumerationValue
+    , evSynonyms
+    , evValue
+
+    -- ** FollowUpPrompt
+    , FollowUpPrompt
+    , followUpPrompt
+    , fupPrompt
+    , fupRejectionStatement
+
+    -- ** FulfillmentActivity
+    , FulfillmentActivity
+    , fulfillmentActivity
+    , faCodeHook
+    , faType
+
+    -- ** Intent
+    , Intent
+    , intent
+    , iIntentName
+    , iIntentVersion
+
+    -- ** IntentMetadata
+    , IntentMetadata
+    , intentMetadata
+    , imCreatedDate
+    , imName
+    , imVersion
+    , imLastUpdatedDate
+    , imDescription
+
+    -- ** Message
+    , Message
+    , message
+    , mContentType
+    , mContent
+
+    -- ** Prompt
+    , Prompt
+    , prompt
+    , pResponseCard
+    , pMessages
+    , pMaxAttempts
+
+    -- ** Slot
+    , Slot
+    , slot
+    , sSlotType
+    , sValueElicitationPrompt
+    , sResponseCard
+    , sPriority
+    , sSlotTypeVersion
+    , sSampleUtterances
+    , sDescription
+    , sName
+    , sSlotConstraint
+
+    -- ** SlotTypeMetadata
+    , SlotTypeMetadata
+    , slotTypeMetadata
+    , stmCreatedDate
+    , stmName
+    , stmVersion
+    , stmLastUpdatedDate
+    , stmDescription
+
+    -- ** Statement
+    , Statement
+    , statement
+    , staResponseCard
+    , staMessages
+
+    -- ** UtteranceData
+    , UtteranceData
+    , utteranceData
+    , udFirstUtteredDate
+    , udCount
+    , udUtteranceString
+    , udLastUtteredDate
+    , udDistinctUsers
+
+    -- ** UtteranceList
+    , UtteranceList
+    , utteranceList
+    , ulBotVersion
+    , ulUtterances
+    ) where
+
+import Network.AWS.LexModels.CreateBotVersion
+import Network.AWS.LexModels.CreateIntentVersion
+import Network.AWS.LexModels.CreateSlotTypeVersion
+import Network.AWS.LexModels.DeleteBot
+import Network.AWS.LexModels.DeleteBotAlias
+import Network.AWS.LexModels.DeleteBotChannelAssociation
+import Network.AWS.LexModels.DeleteBotVersion
+import Network.AWS.LexModels.DeleteIntent
+import Network.AWS.LexModels.DeleteIntentVersion
+import Network.AWS.LexModels.DeleteSlotType
+import Network.AWS.LexModels.DeleteSlotTypeVersion
+import Network.AWS.LexModels.DeleteUtterances
+import Network.AWS.LexModels.GetBot
+import Network.AWS.LexModels.GetBotAlias
+import Network.AWS.LexModels.GetBotAliases
+import Network.AWS.LexModels.GetBotChannelAssociation
+import Network.AWS.LexModels.GetBotChannelAssociations
+import Network.AWS.LexModels.GetBots
+import Network.AWS.LexModels.GetBotVersions
+import Network.AWS.LexModels.GetBuiltinIntent
+import Network.AWS.LexModels.GetBuiltinIntents
+import Network.AWS.LexModels.GetBuiltinSlotTypes
+import Network.AWS.LexModels.GetExport
+import Network.AWS.LexModels.GetIntent
+import Network.AWS.LexModels.GetIntents
+import Network.AWS.LexModels.GetIntentVersions
+import Network.AWS.LexModels.GetSlotType
+import Network.AWS.LexModels.GetSlotTypes
+import Network.AWS.LexModels.GetSlotTypeVersions
+import Network.AWS.LexModels.GetUtterancesView
+import Network.AWS.LexModels.PutBot
+import Network.AWS.LexModels.PutBotAlias
+import Network.AWS.LexModels.PutIntent
+import Network.AWS.LexModels.PutSlotType
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.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 'LexModels'.
+-}
+
+{- $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/LexModels/CreateBotVersion.hs b/gen/Network/AWS/LexModels/CreateBotVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/CreateBotVersion.hs
@@ -0,0 +1,285 @@
+{-# 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.LexModels.CreateBotVersion
+-- Copyright   : (c) 2013-2017 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 new version of the bot based on the @> LATEST@ version. If the @> LATEST@ version of this resource hasn't changed since you created the last version, Amazon Lex doesn't create a new version. It returns the last created version.
+--
+--
+-- When you create the first version of a bot, Amazon Lex sets the version to 1. Subsequent versions increment by 1. For more information, see 'versioning-intro' .
+--
+-- This operation requires permission for the @lex:CreateBotVersion@ action.
+--
+module Network.AWS.LexModels.CreateBotVersion
+    (
+    -- * Creating a Request
+      createBotVersion
+    , CreateBotVersion
+    -- * Request Lenses
+    , cbvChecksum
+    , cbvName
+
+    -- * Destructuring the Response
+    , createBotVersionResponse
+    , CreateBotVersionResponse
+    -- * Response Lenses
+    , cbvrsFailureReason
+    , cbvrsStatus
+    , cbvrsAbortStatement
+    , cbvrsIntents
+    , cbvrsChecksum
+    , cbvrsLocale
+    , cbvrsCreatedDate
+    , cbvrsName
+    , cbvrsVersion
+    , cbvrsIdleSessionTTLInSeconds
+    , cbvrsClarificationPrompt
+    , cbvrsVoiceId
+    , cbvrsLastUpdatedDate
+    , cbvrsChildDirected
+    , cbvrsDescription
+    , cbvrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createBotVersion' smart constructor.
+data CreateBotVersion = CreateBotVersion'
+  { _cbvChecksum :: !(Maybe Text)
+  , _cbvName     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateBotVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbvChecksum' - Identifies a specific revision of the @> LATEST@ version of the bot. If you specify a checksum and the @> LATEST@ version of the bot has a different checksum, a @PreconditionFailedException@ exception is returned and Amazon Lex doesn't publish a new version. If you don't specify a checksum, Amazon Lex publishes the @> LATEST@ version.
+--
+-- * 'cbvName' - The name of the bot that you want to create a new version of. The name is case sensitive.
+createBotVersion
+    :: Text -- ^ 'cbvName'
+    -> CreateBotVersion
+createBotVersion pName_ =
+  CreateBotVersion' {_cbvChecksum = Nothing, _cbvName = pName_}
+
+
+-- | Identifies a specific revision of the @> LATEST@ version of the bot. If you specify a checksum and the @> LATEST@ version of the bot has a different checksum, a @PreconditionFailedException@ exception is returned and Amazon Lex doesn't publish a new version. If you don't specify a checksum, Amazon Lex publishes the @> LATEST@ version.
+cbvChecksum :: Lens' CreateBotVersion (Maybe Text)
+cbvChecksum = lens _cbvChecksum (\ s a -> s{_cbvChecksum = a});
+
+-- | The name of the bot that you want to create a new version of. The name is case sensitive.
+cbvName :: Lens' CreateBotVersion Text
+cbvName = lens _cbvName (\ s a -> s{_cbvName = a});
+
+instance AWSRequest CreateBotVersion where
+        type Rs CreateBotVersion = CreateBotVersionResponse
+        request = postJSON lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateBotVersionResponse' <$>
+                   (x .?> "failureReason") <*> (x .?> "status") <*>
+                     (x .?> "abortStatement")
+                     <*> (x .?> "intents" .!@ mempty)
+                     <*> (x .?> "checksum")
+                     <*> (x .?> "locale")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "idleSessionTTLInSeconds")
+                     <*> (x .?> "clarificationPrompt")
+                     <*> (x .?> "voiceId")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "childDirected")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable CreateBotVersion where
+
+instance NFData CreateBotVersion where
+
+instance ToHeaders CreateBotVersion where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateBotVersion where
+        toJSON CreateBotVersion'{..}
+          = object
+              (catMaybes [("checksum" .=) <$> _cbvChecksum])
+
+instance ToPath CreateBotVersion where
+        toPath CreateBotVersion'{..}
+          = mconcat ["/bots/", toBS _cbvName, "/versions"]
+
+instance ToQuery CreateBotVersion where
+        toQuery = const mempty
+
+-- | /See:/ 'createBotVersionResponse' smart constructor.
+data CreateBotVersionResponse = CreateBotVersionResponse'
+  { _cbvrsFailureReason           :: !(Maybe Text)
+  , _cbvrsStatus                  :: !(Maybe LexStatus)
+  , _cbvrsAbortStatement          :: !(Maybe Statement)
+  , _cbvrsIntents                 :: !(Maybe [Intent])
+  , _cbvrsChecksum                :: !(Maybe Text)
+  , _cbvrsLocale                  :: !(Maybe Locale)
+  , _cbvrsCreatedDate             :: !(Maybe POSIX)
+  , _cbvrsName                    :: !(Maybe Text)
+  , _cbvrsVersion                 :: !(Maybe Text)
+  , _cbvrsIdleSessionTTLInSeconds :: !(Maybe Nat)
+  , _cbvrsClarificationPrompt     :: !(Maybe Prompt)
+  , _cbvrsVoiceId                 :: !(Maybe Text)
+  , _cbvrsLastUpdatedDate         :: !(Maybe POSIX)
+  , _cbvrsChildDirected           :: !(Maybe Bool)
+  , _cbvrsDescription             :: !(Maybe Text)
+  , _cbvrsResponseStatus          :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateBotVersionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbvrsFailureReason' - If @status@ is @FAILED@ , Amazon Lex provides the reason that it failed to build the bot.
+--
+-- * 'cbvrsStatus' - When you send a request to create or update a bot, Amazon Lex sets the @status@ response element to @BUILDING@ . After Amazon Lex builds the bot, it sets @status@ to @READY@ . If Amazon Lex can't build the bot, it sets @status@ to @FAILED@ . Amazon Lex returns the reason for the failure in the @failureReason@ response element.
+--
+-- * 'cbvrsAbortStatement' - The message that Amazon Lex uses to abort a conversation. For more information, see 'PutBot' .
+--
+-- * 'cbvrsIntents' - An array of @Intent@ objects. For more information, see 'PutBot' .
+--
+-- * 'cbvrsChecksum' - Checksum identifying the version of the bot that was created.
+--
+-- * 'cbvrsLocale' - Specifies the target locale for the bot.
+--
+-- * 'cbvrsCreatedDate' - The date when the bot version was created.
+--
+-- * 'cbvrsName' - The name of the bot.
+--
+-- * 'cbvrsVersion' - The version of the bot.
+--
+-- * 'cbvrsIdleSessionTTLInSeconds' - The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. For more information, see 'PutBot' .
+--
+-- * 'cbvrsClarificationPrompt' - The message that Amazon Lex uses when it doesn't understand the user's request. For more information, see 'PutBot' .
+--
+-- * 'cbvrsVoiceId' - The Amazon Polly voice ID that Amazon Lex uses for voice interactions with the user.
+--
+-- * 'cbvrsLastUpdatedDate' - The date when the @> LATEST@ version of this bot was updated.
+--
+-- * 'cbvrsChildDirected' - For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+--
+-- * 'cbvrsDescription' - A description of the bot.
+--
+-- * 'cbvrsResponseStatus' - -- | The response status code.
+createBotVersionResponse
+    :: Int -- ^ 'cbvrsResponseStatus'
+    -> CreateBotVersionResponse
+createBotVersionResponse pResponseStatus_ =
+  CreateBotVersionResponse'
+  { _cbvrsFailureReason = Nothing
+  , _cbvrsStatus = Nothing
+  , _cbvrsAbortStatement = Nothing
+  , _cbvrsIntents = Nothing
+  , _cbvrsChecksum = Nothing
+  , _cbvrsLocale = Nothing
+  , _cbvrsCreatedDate = Nothing
+  , _cbvrsName = Nothing
+  , _cbvrsVersion = Nothing
+  , _cbvrsIdleSessionTTLInSeconds = Nothing
+  , _cbvrsClarificationPrompt = Nothing
+  , _cbvrsVoiceId = Nothing
+  , _cbvrsLastUpdatedDate = Nothing
+  , _cbvrsChildDirected = Nothing
+  , _cbvrsDescription = Nothing
+  , _cbvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | If @status@ is @FAILED@ , Amazon Lex provides the reason that it failed to build the bot.
+cbvrsFailureReason :: Lens' CreateBotVersionResponse (Maybe Text)
+cbvrsFailureReason = lens _cbvrsFailureReason (\ s a -> s{_cbvrsFailureReason = a});
+
+-- | When you send a request to create or update a bot, Amazon Lex sets the @status@ response element to @BUILDING@ . After Amazon Lex builds the bot, it sets @status@ to @READY@ . If Amazon Lex can't build the bot, it sets @status@ to @FAILED@ . Amazon Lex returns the reason for the failure in the @failureReason@ response element.
+cbvrsStatus :: Lens' CreateBotVersionResponse (Maybe LexStatus)
+cbvrsStatus = lens _cbvrsStatus (\ s a -> s{_cbvrsStatus = a});
+
+-- | The message that Amazon Lex uses to abort a conversation. For more information, see 'PutBot' .
+cbvrsAbortStatement :: Lens' CreateBotVersionResponse (Maybe Statement)
+cbvrsAbortStatement = lens _cbvrsAbortStatement (\ s a -> s{_cbvrsAbortStatement = a});
+
+-- | An array of @Intent@ objects. For more information, see 'PutBot' .
+cbvrsIntents :: Lens' CreateBotVersionResponse [Intent]
+cbvrsIntents = lens _cbvrsIntents (\ s a -> s{_cbvrsIntents = a}) . _Default . _Coerce;
+
+-- | Checksum identifying the version of the bot that was created.
+cbvrsChecksum :: Lens' CreateBotVersionResponse (Maybe Text)
+cbvrsChecksum = lens _cbvrsChecksum (\ s a -> s{_cbvrsChecksum = a});
+
+-- | Specifies the target locale for the bot.
+cbvrsLocale :: Lens' CreateBotVersionResponse (Maybe Locale)
+cbvrsLocale = lens _cbvrsLocale (\ s a -> s{_cbvrsLocale = a});
+
+-- | The date when the bot version was created.
+cbvrsCreatedDate :: Lens' CreateBotVersionResponse (Maybe UTCTime)
+cbvrsCreatedDate = lens _cbvrsCreatedDate (\ s a -> s{_cbvrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the bot.
+cbvrsName :: Lens' CreateBotVersionResponse (Maybe Text)
+cbvrsName = lens _cbvrsName (\ s a -> s{_cbvrsName = a});
+
+-- | The version of the bot.
+cbvrsVersion :: Lens' CreateBotVersionResponse (Maybe Text)
+cbvrsVersion = lens _cbvrsVersion (\ s a -> s{_cbvrsVersion = a});
+
+-- | The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. For more information, see 'PutBot' .
+cbvrsIdleSessionTTLInSeconds :: Lens' CreateBotVersionResponse (Maybe Natural)
+cbvrsIdleSessionTTLInSeconds = lens _cbvrsIdleSessionTTLInSeconds (\ s a -> s{_cbvrsIdleSessionTTLInSeconds = a}) . mapping _Nat;
+
+-- | The message that Amazon Lex uses when it doesn't understand the user's request. For more information, see 'PutBot' .
+cbvrsClarificationPrompt :: Lens' CreateBotVersionResponse (Maybe Prompt)
+cbvrsClarificationPrompt = lens _cbvrsClarificationPrompt (\ s a -> s{_cbvrsClarificationPrompt = a});
+
+-- | The Amazon Polly voice ID that Amazon Lex uses for voice interactions with the user.
+cbvrsVoiceId :: Lens' CreateBotVersionResponse (Maybe Text)
+cbvrsVoiceId = lens _cbvrsVoiceId (\ s a -> s{_cbvrsVoiceId = a});
+
+-- | The date when the @> LATEST@ version of this bot was updated.
+cbvrsLastUpdatedDate :: Lens' CreateBotVersionResponse (Maybe UTCTime)
+cbvrsLastUpdatedDate = lens _cbvrsLastUpdatedDate (\ s a -> s{_cbvrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+cbvrsChildDirected :: Lens' CreateBotVersionResponse (Maybe Bool)
+cbvrsChildDirected = lens _cbvrsChildDirected (\ s a -> s{_cbvrsChildDirected = a});
+
+-- | A description of the bot.
+cbvrsDescription :: Lens' CreateBotVersionResponse (Maybe Text)
+cbvrsDescription = lens _cbvrsDescription (\ s a -> s{_cbvrsDescription = a});
+
+-- | -- | The response status code.
+cbvrsResponseStatus :: Lens' CreateBotVersionResponse Int
+cbvrsResponseStatus = lens _cbvrsResponseStatus (\ s a -> s{_cbvrsResponseStatus = a});
+
+instance NFData CreateBotVersionResponse where
diff --git a/gen/Network/AWS/LexModels/CreateIntentVersion.hs b/gen/Network/AWS/LexModels/CreateIntentVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/CreateIntentVersion.hs
@@ -0,0 +1,287 @@
+{-# 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.LexModels.CreateIntentVersion
+-- Copyright   : (c) 2013-2017 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 new version of an intent based on the @> LATEST@ version of the intent. If the @> LATEST@ version of this intent hasn't changed since you last updated it, Amazon Lex doesn't create a new version. It returns the last version you created.
+--
+--
+-- When you create a version of an intent, Amazon Lex sets the version to 1. Subsequent versions increment by 1. For more information, see 'versioning-intro' .
+--
+-- This operation requires permissions to perform the @lex:CreateIntentVersion@ action.
+--
+module Network.AWS.LexModels.CreateIntentVersion
+    (
+    -- * Creating a Request
+      createIntentVersion
+    , CreateIntentVersion
+    -- * Request Lenses
+    , civChecksum
+    , civName
+
+    -- * Destructuring the Response
+    , createIntentVersionResponse
+    , CreateIntentVersionResponse
+    -- * Response Lenses
+    , civrsFulfillmentActivity
+    , civrsSlots
+    , civrsRejectionStatement
+    , civrsChecksum
+    , civrsConclusionStatement
+    , civrsSampleUtterances
+    , civrsParentIntentSignature
+    , civrsCreatedDate
+    , civrsName
+    , civrsVersion
+    , civrsFollowUpPrompt
+    , civrsLastUpdatedDate
+    , civrsConfirmationPrompt
+    , civrsDialogCodeHook
+    , civrsDescription
+    , civrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createIntentVersion' smart constructor.
+data CreateIntentVersion = CreateIntentVersion'
+  { _civChecksum :: !(Maybe Text)
+  , _civName     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateIntentVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'civChecksum' - Checksum of the @> LATEST@ version of the intent that should be used to create the new version. If you specify a checksum and the @> LATEST@ version of the intent has a different checksum, Amazon Lex returns a @PreconditionFailedException@ exception and doesn't publish a new version. If you don't specify a checksum, Amazon Lex publishes the @> LATEST@ version.
+--
+-- * 'civName' - The name of the intent that you want to create a new version of. The name is case sensitive.
+createIntentVersion
+    :: Text -- ^ 'civName'
+    -> CreateIntentVersion
+createIntentVersion pName_ =
+  CreateIntentVersion' {_civChecksum = Nothing, _civName = pName_}
+
+
+-- | Checksum of the @> LATEST@ version of the intent that should be used to create the new version. If you specify a checksum and the @> LATEST@ version of the intent has a different checksum, Amazon Lex returns a @PreconditionFailedException@ exception and doesn't publish a new version. If you don't specify a checksum, Amazon Lex publishes the @> LATEST@ version.
+civChecksum :: Lens' CreateIntentVersion (Maybe Text)
+civChecksum = lens _civChecksum (\ s a -> s{_civChecksum = a});
+
+-- | The name of the intent that you want to create a new version of. The name is case sensitive.
+civName :: Lens' CreateIntentVersion Text
+civName = lens _civName (\ s a -> s{_civName = a});
+
+instance AWSRequest CreateIntentVersion where
+        type Rs CreateIntentVersion =
+             CreateIntentVersionResponse
+        request = postJSON lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateIntentVersionResponse' <$>
+                   (x .?> "fulfillmentActivity") <*>
+                     (x .?> "slots" .!@ mempty)
+                     <*> (x .?> "rejectionStatement")
+                     <*> (x .?> "checksum")
+                     <*> (x .?> "conclusionStatement")
+                     <*> (x .?> "sampleUtterances" .!@ mempty)
+                     <*> (x .?> "parentIntentSignature")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "followUpPrompt")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "confirmationPrompt")
+                     <*> (x .?> "dialogCodeHook")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable CreateIntentVersion where
+
+instance NFData CreateIntentVersion where
+
+instance ToHeaders CreateIntentVersion where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateIntentVersion where
+        toJSON CreateIntentVersion'{..}
+          = object
+              (catMaybes [("checksum" .=) <$> _civChecksum])
+
+instance ToPath CreateIntentVersion where
+        toPath CreateIntentVersion'{..}
+          = mconcat ["/intents/", toBS _civName, "/versions"]
+
+instance ToQuery CreateIntentVersion where
+        toQuery = const mempty
+
+-- | /See:/ 'createIntentVersionResponse' smart constructor.
+data CreateIntentVersionResponse = CreateIntentVersionResponse'
+  { _civrsFulfillmentActivity   :: !(Maybe FulfillmentActivity)
+  , _civrsSlots                 :: !(Maybe [Slot])
+  , _civrsRejectionStatement    :: !(Maybe Statement)
+  , _civrsChecksum              :: !(Maybe Text)
+  , _civrsConclusionStatement   :: !(Maybe Statement)
+  , _civrsSampleUtterances      :: !(Maybe [Text])
+  , _civrsParentIntentSignature :: !(Maybe Text)
+  , _civrsCreatedDate           :: !(Maybe POSIX)
+  , _civrsName                  :: !(Maybe Text)
+  , _civrsVersion               :: !(Maybe Text)
+  , _civrsFollowUpPrompt        :: !(Maybe FollowUpPrompt)
+  , _civrsLastUpdatedDate       :: !(Maybe POSIX)
+  , _civrsConfirmationPrompt    :: !(Maybe Prompt)
+  , _civrsDialogCodeHook        :: !(Maybe CodeHook)
+  , _civrsDescription           :: !(Maybe Text)
+  , _civrsResponseStatus        :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateIntentVersionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'civrsFulfillmentActivity' - Describes how the intent is fulfilled.
+--
+-- * 'civrsSlots' - An array of slot types that defines the information required to fulfill the intent.
+--
+-- * 'civrsRejectionStatement' - If the user answers "no" to the question defined in @confirmationPrompt@ , Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+--
+-- * 'civrsChecksum' - Checksum of the intent version created.
+--
+-- * 'civrsConclusionStatement' - After the Lambda function specified in the @fulfillmentActivity@ field fulfills the intent, Amazon Lex conveys this statement to the user.
+--
+-- * 'civrsSampleUtterances' - An array of sample utterances configured for the intent.
+--
+-- * 'civrsParentIntentSignature' - A unique identifier for a built-in intent.
+--
+-- * 'civrsCreatedDate' - The date that the intent was created.
+--
+-- * 'civrsName' - The name of the intent.
+--
+-- * 'civrsVersion' - The version number assigned to the new version of the intent.
+--
+-- * 'civrsFollowUpPrompt' - If defined, Amazon Lex uses this prompt to solicit additional user activity after the intent is fulfilled.
+--
+-- * 'civrsLastUpdatedDate' - The date that the intent was updated.
+--
+-- * 'civrsConfirmationPrompt' - If defined, the prompt that Amazon Lex uses to confirm the user's intent before fulfilling it.
+--
+-- * 'civrsDialogCodeHook' - If defined, Amazon Lex invokes this Lambda function for each user input.
+--
+-- * 'civrsDescription' - A description of the intent.
+--
+-- * 'civrsResponseStatus' - -- | The response status code.
+createIntentVersionResponse
+    :: Int -- ^ 'civrsResponseStatus'
+    -> CreateIntentVersionResponse
+createIntentVersionResponse pResponseStatus_ =
+  CreateIntentVersionResponse'
+  { _civrsFulfillmentActivity = Nothing
+  , _civrsSlots = Nothing
+  , _civrsRejectionStatement = Nothing
+  , _civrsChecksum = Nothing
+  , _civrsConclusionStatement = Nothing
+  , _civrsSampleUtterances = Nothing
+  , _civrsParentIntentSignature = Nothing
+  , _civrsCreatedDate = Nothing
+  , _civrsName = Nothing
+  , _civrsVersion = Nothing
+  , _civrsFollowUpPrompt = Nothing
+  , _civrsLastUpdatedDate = Nothing
+  , _civrsConfirmationPrompt = Nothing
+  , _civrsDialogCodeHook = Nothing
+  , _civrsDescription = Nothing
+  , _civrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Describes how the intent is fulfilled.
+civrsFulfillmentActivity :: Lens' CreateIntentVersionResponse (Maybe FulfillmentActivity)
+civrsFulfillmentActivity = lens _civrsFulfillmentActivity (\ s a -> s{_civrsFulfillmentActivity = a});
+
+-- | An array of slot types that defines the information required to fulfill the intent.
+civrsSlots :: Lens' CreateIntentVersionResponse [Slot]
+civrsSlots = lens _civrsSlots (\ s a -> s{_civrsSlots = a}) . _Default . _Coerce;
+
+-- | If the user answers "no" to the question defined in @confirmationPrompt@ , Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+civrsRejectionStatement :: Lens' CreateIntentVersionResponse (Maybe Statement)
+civrsRejectionStatement = lens _civrsRejectionStatement (\ s a -> s{_civrsRejectionStatement = a});
+
+-- | Checksum of the intent version created.
+civrsChecksum :: Lens' CreateIntentVersionResponse (Maybe Text)
+civrsChecksum = lens _civrsChecksum (\ s a -> s{_civrsChecksum = a});
+
+-- | After the Lambda function specified in the @fulfillmentActivity@ field fulfills the intent, Amazon Lex conveys this statement to the user.
+civrsConclusionStatement :: Lens' CreateIntentVersionResponse (Maybe Statement)
+civrsConclusionStatement = lens _civrsConclusionStatement (\ s a -> s{_civrsConclusionStatement = a});
+
+-- | An array of sample utterances configured for the intent.
+civrsSampleUtterances :: Lens' CreateIntentVersionResponse [Text]
+civrsSampleUtterances = lens _civrsSampleUtterances (\ s a -> s{_civrsSampleUtterances = a}) . _Default . _Coerce;
+
+-- | A unique identifier for a built-in intent.
+civrsParentIntentSignature :: Lens' CreateIntentVersionResponse (Maybe Text)
+civrsParentIntentSignature = lens _civrsParentIntentSignature (\ s a -> s{_civrsParentIntentSignature = a});
+
+-- | The date that the intent was created.
+civrsCreatedDate :: Lens' CreateIntentVersionResponse (Maybe UTCTime)
+civrsCreatedDate = lens _civrsCreatedDate (\ s a -> s{_civrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the intent.
+civrsName :: Lens' CreateIntentVersionResponse (Maybe Text)
+civrsName = lens _civrsName (\ s a -> s{_civrsName = a});
+
+-- | The version number assigned to the new version of the intent.
+civrsVersion :: Lens' CreateIntentVersionResponse (Maybe Text)
+civrsVersion = lens _civrsVersion (\ s a -> s{_civrsVersion = a});
+
+-- | If defined, Amazon Lex uses this prompt to solicit additional user activity after the intent is fulfilled.
+civrsFollowUpPrompt :: Lens' CreateIntentVersionResponse (Maybe FollowUpPrompt)
+civrsFollowUpPrompt = lens _civrsFollowUpPrompt (\ s a -> s{_civrsFollowUpPrompt = a});
+
+-- | The date that the intent was updated.
+civrsLastUpdatedDate :: Lens' CreateIntentVersionResponse (Maybe UTCTime)
+civrsLastUpdatedDate = lens _civrsLastUpdatedDate (\ s a -> s{_civrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | If defined, the prompt that Amazon Lex uses to confirm the user's intent before fulfilling it.
+civrsConfirmationPrompt :: Lens' CreateIntentVersionResponse (Maybe Prompt)
+civrsConfirmationPrompt = lens _civrsConfirmationPrompt (\ s a -> s{_civrsConfirmationPrompt = a});
+
+-- | If defined, Amazon Lex invokes this Lambda function for each user input.
+civrsDialogCodeHook :: Lens' CreateIntentVersionResponse (Maybe CodeHook)
+civrsDialogCodeHook = lens _civrsDialogCodeHook (\ s a -> s{_civrsDialogCodeHook = a});
+
+-- | A description of the intent.
+civrsDescription :: Lens' CreateIntentVersionResponse (Maybe Text)
+civrsDescription = lens _civrsDescription (\ s a -> s{_civrsDescription = a});
+
+-- | -- | The response status code.
+civrsResponseStatus :: Lens' CreateIntentVersionResponse Int
+civrsResponseStatus = lens _civrsResponseStatus (\ s a -> s{_civrsResponseStatus = a});
+
+instance NFData CreateIntentVersionResponse where
diff --git a/gen/Network/AWS/LexModels/CreateSlotTypeVersion.hs b/gen/Network/AWS/LexModels/CreateSlotTypeVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/CreateSlotTypeVersion.hs
@@ -0,0 +1,218 @@
+{-# 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.LexModels.CreateSlotTypeVersion
+-- Copyright   : (c) 2013-2017 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 new version of a slot type based on the @> LATEST@ version of the specified slot type. If the @> LATEST@ version of this resource has not changed since the last version that you created, Amazon Lex doesn't create a new version. It returns the last version that you created.
+--
+--
+-- When you create a version of a slot type, Amazon Lex sets the version to 1. Subsequent versions increment by 1. For more information, see 'versioning-intro' .
+--
+-- This operation requires permissions for the @lex:CreateSlotTypeVersion@ action.
+--
+module Network.AWS.LexModels.CreateSlotTypeVersion
+    (
+    -- * Creating a Request
+      createSlotTypeVersion
+    , CreateSlotTypeVersion
+    -- * Request Lenses
+    , cstvChecksum
+    , cstvName
+
+    -- * Destructuring the Response
+    , createSlotTypeVersionResponse
+    , CreateSlotTypeVersionResponse
+    -- * Response Lenses
+    , cstvrsChecksum
+    , cstvrsValueSelectionStrategy
+    , cstvrsCreatedDate
+    , cstvrsName
+    , cstvrsVersion
+    , cstvrsLastUpdatedDate
+    , cstvrsDescription
+    , cstvrsEnumerationValues
+    , cstvrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createSlotTypeVersion' smart constructor.
+data CreateSlotTypeVersion = CreateSlotTypeVersion'
+  { _cstvChecksum :: !(Maybe Text)
+  , _cstvName     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateSlotTypeVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cstvChecksum' - Checksum for the @> LATEST@ version of the slot type that you want to publish. If you specify a checksum and the @> LATEST@ version of the slot type has a different checksum, Amazon Lex returns a @PreconditionFailedException@ exception and doesn't publish the new version. If you don't specify a checksum, Amazon Lex publishes the @> LATEST@ version.
+--
+-- * 'cstvName' - The name of the slot type that you want to create a new version for. The name is case sensitive.
+createSlotTypeVersion
+    :: Text -- ^ 'cstvName'
+    -> CreateSlotTypeVersion
+createSlotTypeVersion pName_ =
+  CreateSlotTypeVersion' {_cstvChecksum = Nothing, _cstvName = pName_}
+
+
+-- | Checksum for the @> LATEST@ version of the slot type that you want to publish. If you specify a checksum and the @> LATEST@ version of the slot type has a different checksum, Amazon Lex returns a @PreconditionFailedException@ exception and doesn't publish the new version. If you don't specify a checksum, Amazon Lex publishes the @> LATEST@ version.
+cstvChecksum :: Lens' CreateSlotTypeVersion (Maybe Text)
+cstvChecksum = lens _cstvChecksum (\ s a -> s{_cstvChecksum = a});
+
+-- | The name of the slot type that you want to create a new version for. The name is case sensitive.
+cstvName :: Lens' CreateSlotTypeVersion Text
+cstvName = lens _cstvName (\ s a -> s{_cstvName = a});
+
+instance AWSRequest CreateSlotTypeVersion where
+        type Rs CreateSlotTypeVersion =
+             CreateSlotTypeVersionResponse
+        request = postJSON lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateSlotTypeVersionResponse' <$>
+                   (x .?> "checksum") <*>
+                     (x .?> "valueSelectionStrategy")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "description")
+                     <*> (x .?> "enumerationValues")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable CreateSlotTypeVersion where
+
+instance NFData CreateSlotTypeVersion where
+
+instance ToHeaders CreateSlotTypeVersion where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateSlotTypeVersion where
+        toJSON CreateSlotTypeVersion'{..}
+          = object
+              (catMaybes [("checksum" .=) <$> _cstvChecksum])
+
+instance ToPath CreateSlotTypeVersion where
+        toPath CreateSlotTypeVersion'{..}
+          = mconcat
+              ["/slottypes/", toBS _cstvName, "/versions"]
+
+instance ToQuery CreateSlotTypeVersion where
+        toQuery = const mempty
+
+-- | /See:/ 'createSlotTypeVersionResponse' smart constructor.
+data CreateSlotTypeVersionResponse = CreateSlotTypeVersionResponse'
+  { _cstvrsChecksum               :: !(Maybe Text)
+  , _cstvrsValueSelectionStrategy :: !(Maybe SlotValueSelectionStrategy)
+  , _cstvrsCreatedDate            :: !(Maybe POSIX)
+  , _cstvrsName                   :: !(Maybe Text)
+  , _cstvrsVersion                :: !(Maybe Text)
+  , _cstvrsLastUpdatedDate        :: !(Maybe POSIX)
+  , _cstvrsDescription            :: !(Maybe Text)
+  , _cstvrsEnumerationValues      :: !(Maybe (List1 EnumerationValue))
+  , _cstvrsResponseStatus         :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateSlotTypeVersionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cstvrsChecksum' - Checksum of the @> LATEST@ version of the slot type.
+--
+-- * 'cstvrsValueSelectionStrategy' - The strategy that Amazon Lex uses to determine the value of the slot. For more information, see 'PutSlotType' .
+--
+-- * 'cstvrsCreatedDate' - The date that the slot type was created.
+--
+-- * 'cstvrsName' - The name of the slot type.
+--
+-- * 'cstvrsVersion' - The version assigned to the new slot type version.
+--
+-- * 'cstvrsLastUpdatedDate' - The date that the slot type was updated. When you create a resource, the creation date and last update date are the same.
+--
+-- * 'cstvrsDescription' - A description of the slot type.
+--
+-- * 'cstvrsEnumerationValues' - A list of @EnumerationValue@ objects that defines the values that the slot type can take.
+--
+-- * 'cstvrsResponseStatus' - -- | The response status code.
+createSlotTypeVersionResponse
+    :: Int -- ^ 'cstvrsResponseStatus'
+    -> CreateSlotTypeVersionResponse
+createSlotTypeVersionResponse pResponseStatus_ =
+  CreateSlotTypeVersionResponse'
+  { _cstvrsChecksum = Nothing
+  , _cstvrsValueSelectionStrategy = Nothing
+  , _cstvrsCreatedDate = Nothing
+  , _cstvrsName = Nothing
+  , _cstvrsVersion = Nothing
+  , _cstvrsLastUpdatedDate = Nothing
+  , _cstvrsDescription = Nothing
+  , _cstvrsEnumerationValues = Nothing
+  , _cstvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Checksum of the @> LATEST@ version of the slot type.
+cstvrsChecksum :: Lens' CreateSlotTypeVersionResponse (Maybe Text)
+cstvrsChecksum = lens _cstvrsChecksum (\ s a -> s{_cstvrsChecksum = a});
+
+-- | The strategy that Amazon Lex uses to determine the value of the slot. For more information, see 'PutSlotType' .
+cstvrsValueSelectionStrategy :: Lens' CreateSlotTypeVersionResponse (Maybe SlotValueSelectionStrategy)
+cstvrsValueSelectionStrategy = lens _cstvrsValueSelectionStrategy (\ s a -> s{_cstvrsValueSelectionStrategy = a});
+
+-- | The date that the slot type was created.
+cstvrsCreatedDate :: Lens' CreateSlotTypeVersionResponse (Maybe UTCTime)
+cstvrsCreatedDate = lens _cstvrsCreatedDate (\ s a -> s{_cstvrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the slot type.
+cstvrsName :: Lens' CreateSlotTypeVersionResponse (Maybe Text)
+cstvrsName = lens _cstvrsName (\ s a -> s{_cstvrsName = a});
+
+-- | The version assigned to the new slot type version.
+cstvrsVersion :: Lens' CreateSlotTypeVersionResponse (Maybe Text)
+cstvrsVersion = lens _cstvrsVersion (\ s a -> s{_cstvrsVersion = a});
+
+-- | The date that the slot type was updated. When you create a resource, the creation date and last update date are the same.
+cstvrsLastUpdatedDate :: Lens' CreateSlotTypeVersionResponse (Maybe UTCTime)
+cstvrsLastUpdatedDate = lens _cstvrsLastUpdatedDate (\ s a -> s{_cstvrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the slot type.
+cstvrsDescription :: Lens' CreateSlotTypeVersionResponse (Maybe Text)
+cstvrsDescription = lens _cstvrsDescription (\ s a -> s{_cstvrsDescription = a});
+
+-- | A list of @EnumerationValue@ objects that defines the values that the slot type can take.
+cstvrsEnumerationValues :: Lens' CreateSlotTypeVersionResponse (Maybe (NonEmpty EnumerationValue))
+cstvrsEnumerationValues = lens _cstvrsEnumerationValues (\ s a -> s{_cstvrsEnumerationValues = a}) . mapping _List1;
+
+-- | -- | The response status code.
+cstvrsResponseStatus :: Lens' CreateSlotTypeVersionResponse Int
+cstvrsResponseStatus = lens _cstvrsResponseStatus (\ s a -> s{_cstvrsResponseStatus = a});
+
+instance NFData CreateSlotTypeVersionResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteBot.hs b/gen/Network/AWS/LexModels/DeleteBot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteBot.hs
@@ -0,0 +1,105 @@
+{-# 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.LexModels.DeleteBot
+-- Copyright   : (c) 2013-2017 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 all versions of the bot, including the @> LATEST@ version. To delete a specific version of the bot, use the 'DeleteBotVersion' operation.
+--
+--
+-- If a bot has an alias, you can't delete it. Instead, the @DeleteBot@ operation returns a @ResourceInUseException@ exception that includes a reference to the alias that refers to the bot. To remove the reference to the bot, delete the alias. If you get the same exception again, delete the referring alias until the @DeleteBot@ operation is successful.
+--
+-- This operation requires permissions for the @lex:DeleteBot@ action.
+--
+module Network.AWS.LexModels.DeleteBot
+    (
+    -- * Creating a Request
+      deleteBot
+    , DeleteBot
+    -- * Request Lenses
+    , dbName
+
+    -- * Destructuring the Response
+    , deleteBotResponse
+    , DeleteBotResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteBot' smart constructor.
+newtype DeleteBot = DeleteBot'
+  { _dbName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbName' - The name of the bot. The name is case sensitive.
+deleteBot
+    :: Text -- ^ 'dbName'
+    -> DeleteBot
+deleteBot pName_ = DeleteBot' {_dbName = pName_}
+
+
+-- | The name of the bot. The name is case sensitive.
+dbName :: Lens' DeleteBot Text
+dbName = lens _dbName (\ s a -> s{_dbName = a});
+
+instance AWSRequest DeleteBot where
+        type Rs DeleteBot = DeleteBotResponse
+        request = delete lexModels
+        response = receiveNull DeleteBotResponse'
+
+instance Hashable DeleteBot where
+
+instance NFData DeleteBot where
+
+instance ToHeaders DeleteBot where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteBot where
+        toPath DeleteBot'{..}
+          = mconcat ["/bots/", toBS _dbName]
+
+instance ToQuery DeleteBot where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteBotResponse' smart constructor.
+data DeleteBotResponse =
+  DeleteBotResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBotResponse' with the minimum fields required to make a request.
+--
+deleteBotResponse
+    :: DeleteBotResponse
+deleteBotResponse = DeleteBotResponse'
+
+
+instance NFData DeleteBotResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteBotAlias.hs b/gen/Network/AWS/LexModels/DeleteBotAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteBotAlias.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.LexModels.DeleteBotAlias
+-- Copyright   : (c) 2013-2017 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 alias for the specified bot.
+--
+--
+-- You can't delete an alias that is used in the association between a bot and a messaging channel. If an alias is used in a channel association, the @DeleteBot@ operation returns a @ResourceInUseException@ exception that includes a reference to the channel association that refers to the bot. You can remove the reference to the alias by deleting the channel association. If you get the same exception again, delete the referring association until the @DeleteBotAlias@ operation is successful.
+--
+module Network.AWS.LexModels.DeleteBotAlias
+    (
+    -- * Creating a Request
+      deleteBotAlias
+    , DeleteBotAlias
+    -- * Request Lenses
+    , dbaName
+    , dbaBotName
+
+    -- * Destructuring the Response
+    , deleteBotAliasResponse
+    , DeleteBotAliasResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteBotAlias' smart constructor.
+data DeleteBotAlias = DeleteBotAlias'
+  { _dbaName    :: !Text
+  , _dbaBotName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBotAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbaName' - The name of the alias to delete. The name is case sensitive.
+--
+-- * 'dbaBotName' - The name of the bot that the alias points to.
+deleteBotAlias
+    :: Text -- ^ 'dbaName'
+    -> Text -- ^ 'dbaBotName'
+    -> DeleteBotAlias
+deleteBotAlias pName_ pBotName_ =
+  DeleteBotAlias' {_dbaName = pName_, _dbaBotName = pBotName_}
+
+
+-- | The name of the alias to delete. The name is case sensitive.
+dbaName :: Lens' DeleteBotAlias Text
+dbaName = lens _dbaName (\ s a -> s{_dbaName = a});
+
+-- | The name of the bot that the alias points to.
+dbaBotName :: Lens' DeleteBotAlias Text
+dbaBotName = lens _dbaBotName (\ s a -> s{_dbaBotName = a});
+
+instance AWSRequest DeleteBotAlias where
+        type Rs DeleteBotAlias = DeleteBotAliasResponse
+        request = delete lexModels
+        response = receiveNull DeleteBotAliasResponse'
+
+instance Hashable DeleteBotAlias where
+
+instance NFData DeleteBotAlias where
+
+instance ToHeaders DeleteBotAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteBotAlias where
+        toPath DeleteBotAlias'{..}
+          = mconcat
+              ["/bots/", toBS _dbaBotName, "/aliases/",
+               toBS _dbaName]
+
+instance ToQuery DeleteBotAlias where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteBotAliasResponse' smart constructor.
+data DeleteBotAliasResponse =
+  DeleteBotAliasResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBotAliasResponse' with the minimum fields required to make a request.
+--
+deleteBotAliasResponse
+    :: DeleteBotAliasResponse
+deleteBotAliasResponse = DeleteBotAliasResponse'
+
+
+instance NFData DeleteBotAliasResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteBotChannelAssociation.hs b/gen/Network/AWS/LexModels/DeleteBotChannelAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteBotChannelAssociation.hs
@@ -0,0 +1,128 @@
+{-# 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.LexModels.DeleteBotChannelAssociation
+-- Copyright   : (c) 2013-2017 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 the association between an Amazon Lex bot and a messaging platform.
+--
+--
+-- This operation requires permission for the @lex:DeleteBotChannelAssociation@ action.
+--
+module Network.AWS.LexModels.DeleteBotChannelAssociation
+    (
+    -- * Creating a Request
+      deleteBotChannelAssociation
+    , DeleteBotChannelAssociation
+    -- * Request Lenses
+    , dbcaName
+    , dbcaBotName
+    , dbcaBotAlias
+
+    -- * Destructuring the Response
+    , deleteBotChannelAssociationResponse
+    , DeleteBotChannelAssociationResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteBotChannelAssociation' smart constructor.
+data DeleteBotChannelAssociation = DeleteBotChannelAssociation'
+  { _dbcaName     :: !Text
+  , _dbcaBotName  :: !Text
+  , _dbcaBotAlias :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBotChannelAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbcaName' - The name of the association. The name is case sensitive.
+--
+-- * 'dbcaBotName' - The name of the Amazon Lex bot.
+--
+-- * 'dbcaBotAlias' - An alias that points to the specific version of the Amazon Lex bot to which this association is being made.
+deleteBotChannelAssociation
+    :: Text -- ^ 'dbcaName'
+    -> Text -- ^ 'dbcaBotName'
+    -> Text -- ^ 'dbcaBotAlias'
+    -> DeleteBotChannelAssociation
+deleteBotChannelAssociation pName_ pBotName_ pBotAlias_ =
+  DeleteBotChannelAssociation'
+  {_dbcaName = pName_, _dbcaBotName = pBotName_, _dbcaBotAlias = pBotAlias_}
+
+
+-- | The name of the association. The name is case sensitive.
+dbcaName :: Lens' DeleteBotChannelAssociation Text
+dbcaName = lens _dbcaName (\ s a -> s{_dbcaName = a});
+
+-- | The name of the Amazon Lex bot.
+dbcaBotName :: Lens' DeleteBotChannelAssociation Text
+dbcaBotName = lens _dbcaBotName (\ s a -> s{_dbcaBotName = a});
+
+-- | An alias that points to the specific version of the Amazon Lex bot to which this association is being made.
+dbcaBotAlias :: Lens' DeleteBotChannelAssociation Text
+dbcaBotAlias = lens _dbcaBotAlias (\ s a -> s{_dbcaBotAlias = a});
+
+instance AWSRequest DeleteBotChannelAssociation where
+        type Rs DeleteBotChannelAssociation =
+             DeleteBotChannelAssociationResponse
+        request = delete lexModels
+        response
+          = receiveNull DeleteBotChannelAssociationResponse'
+
+instance Hashable DeleteBotChannelAssociation where
+
+instance NFData DeleteBotChannelAssociation where
+
+instance ToHeaders DeleteBotChannelAssociation where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteBotChannelAssociation where
+        toPath DeleteBotChannelAssociation'{..}
+          = mconcat
+              ["/bots/", toBS _dbcaBotName, "/aliases/",
+               toBS _dbcaBotAlias, "/channels/", toBS _dbcaName]
+
+instance ToQuery DeleteBotChannelAssociation where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteBotChannelAssociationResponse' smart constructor.
+data DeleteBotChannelAssociationResponse =
+  DeleteBotChannelAssociationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBotChannelAssociationResponse' with the minimum fields required to make a request.
+--
+deleteBotChannelAssociationResponse
+    :: DeleteBotChannelAssociationResponse
+deleteBotChannelAssociationResponse = DeleteBotChannelAssociationResponse'
+
+
+instance NFData DeleteBotChannelAssociationResponse
+         where
diff --git a/gen/Network/AWS/LexModels/DeleteBotVersion.hs b/gen/Network/AWS/LexModels/DeleteBotVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteBotVersion.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.LexModels.DeleteBotVersion
+-- Copyright   : (c) 2013-2017 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 specific version of a bot. To delete all versions of a bot, use the 'DeleteBot' operation.
+--
+--
+-- This operation requires permissions for the @lex:DeleteBotVersion@ action.
+--
+module Network.AWS.LexModels.DeleteBotVersion
+    (
+    -- * Creating a Request
+      deleteBotVersion
+    , DeleteBotVersion
+    -- * Request Lenses
+    , dbvName
+    , dbvVersion
+
+    -- * Destructuring the Response
+    , deleteBotVersionResponse
+    , DeleteBotVersionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteBotVersion' smart constructor.
+data DeleteBotVersion = DeleteBotVersion'
+  { _dbvName    :: !Text
+  , _dbvVersion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBotVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbvName' - The name of the bot.
+--
+-- * 'dbvVersion' - The version of the bot to delete. You cannot delete the @> LATEST@ version of the bot. To delete the @> LATEST@ version, use the 'DeleteBot' operation.
+deleteBotVersion
+    :: Text -- ^ 'dbvName'
+    -> Text -- ^ 'dbvVersion'
+    -> DeleteBotVersion
+deleteBotVersion pName_ pVersion_ =
+  DeleteBotVersion' {_dbvName = pName_, _dbvVersion = pVersion_}
+
+
+-- | The name of the bot.
+dbvName :: Lens' DeleteBotVersion Text
+dbvName = lens _dbvName (\ s a -> s{_dbvName = a});
+
+-- | The version of the bot to delete. You cannot delete the @> LATEST@ version of the bot. To delete the @> LATEST@ version, use the 'DeleteBot' operation.
+dbvVersion :: Lens' DeleteBotVersion Text
+dbvVersion = lens _dbvVersion (\ s a -> s{_dbvVersion = a});
+
+instance AWSRequest DeleteBotVersion where
+        type Rs DeleteBotVersion = DeleteBotVersionResponse
+        request = delete lexModels
+        response = receiveNull DeleteBotVersionResponse'
+
+instance Hashable DeleteBotVersion where
+
+instance NFData DeleteBotVersion where
+
+instance ToHeaders DeleteBotVersion where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteBotVersion where
+        toPath DeleteBotVersion'{..}
+          = mconcat
+              ["/bots/", toBS _dbvName, "/versions/",
+               toBS _dbvVersion]
+
+instance ToQuery DeleteBotVersion where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteBotVersionResponse' smart constructor.
+data DeleteBotVersionResponse =
+  DeleteBotVersionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBotVersionResponse' with the minimum fields required to make a request.
+--
+deleteBotVersionResponse
+    :: DeleteBotVersionResponse
+deleteBotVersionResponse = DeleteBotVersionResponse'
+
+
+instance NFData DeleteBotVersionResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteIntent.hs b/gen/Network/AWS/LexModels/DeleteIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteIntent.hs
@@ -0,0 +1,105 @@
+{-# 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.LexModels.DeleteIntent
+-- Copyright   : (c) 2013-2017 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 all versions of the intent, including the @> LATEST@ version. To delete a specific version of the intent, use the 'DeleteIntentVersion' operation.
+--
+--
+-- You can delete a version of an intent only if it is not referenced. To delete an intent that is referred to in one or more bots (see 'how-it-works' ), you must remove those references first.
+--
+-- This operation requires permission for the @lex:DeleteIntent@ action.
+--
+module Network.AWS.LexModels.DeleteIntent
+    (
+    -- * Creating a Request
+      deleteIntent
+    , DeleteIntent
+    -- * Request Lenses
+    , diName
+
+    -- * Destructuring the Response
+    , deleteIntentResponse
+    , DeleteIntentResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteIntent' smart constructor.
+newtype DeleteIntent = DeleteIntent'
+  { _diName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteIntent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diName' - The name of the intent. The name is case sensitive.
+deleteIntent
+    :: Text -- ^ 'diName'
+    -> DeleteIntent
+deleteIntent pName_ = DeleteIntent' {_diName = pName_}
+
+
+-- | The name of the intent. The name is case sensitive.
+diName :: Lens' DeleteIntent Text
+diName = lens _diName (\ s a -> s{_diName = a});
+
+instance AWSRequest DeleteIntent where
+        type Rs DeleteIntent = DeleteIntentResponse
+        request = delete lexModels
+        response = receiveNull DeleteIntentResponse'
+
+instance Hashable DeleteIntent where
+
+instance NFData DeleteIntent where
+
+instance ToHeaders DeleteIntent where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteIntent where
+        toPath DeleteIntent'{..}
+          = mconcat ["/intents/", toBS _diName]
+
+instance ToQuery DeleteIntent where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteIntentResponse' smart constructor.
+data DeleteIntentResponse =
+  DeleteIntentResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteIntentResponse' with the minimum fields required to make a request.
+--
+deleteIntentResponse
+    :: DeleteIntentResponse
+deleteIntentResponse = DeleteIntentResponse'
+
+
+instance NFData DeleteIntentResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteIntentVersion.hs b/gen/Network/AWS/LexModels/DeleteIntentVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteIntentVersion.hs
@@ -0,0 +1,116 @@
+{-# 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.LexModels.DeleteIntentVersion
+-- Copyright   : (c) 2013-2017 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 specific version of an intent. To delete all versions of a intent, use the 'DeleteIntent' operation.
+--
+--
+-- This operation requires permissions for the @lex:DeleteIntentVersion@ action.
+--
+module Network.AWS.LexModels.DeleteIntentVersion
+    (
+    -- * Creating a Request
+      deleteIntentVersion
+    , DeleteIntentVersion
+    -- * Request Lenses
+    , divName
+    , divVersion
+
+    -- * Destructuring the Response
+    , deleteIntentVersionResponse
+    , DeleteIntentVersionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteIntentVersion' smart constructor.
+data DeleteIntentVersion = DeleteIntentVersion'
+  { _divName    :: !Text
+  , _divVersion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteIntentVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'divName' - The name of the intent.
+--
+-- * 'divVersion' - The version of the intent to delete. You cannot delete the @> LATEST@ version of the intent. To delete the @> LATEST@ version, use the 'DeleteIntent' operation.
+deleteIntentVersion
+    :: Text -- ^ 'divName'
+    -> Text -- ^ 'divVersion'
+    -> DeleteIntentVersion
+deleteIntentVersion pName_ pVersion_ =
+  DeleteIntentVersion' {_divName = pName_, _divVersion = pVersion_}
+
+
+-- | The name of the intent.
+divName :: Lens' DeleteIntentVersion Text
+divName = lens _divName (\ s a -> s{_divName = a});
+
+-- | The version of the intent to delete. You cannot delete the @> LATEST@ version of the intent. To delete the @> LATEST@ version, use the 'DeleteIntent' operation.
+divVersion :: Lens' DeleteIntentVersion Text
+divVersion = lens _divVersion (\ s a -> s{_divVersion = a});
+
+instance AWSRequest DeleteIntentVersion where
+        type Rs DeleteIntentVersion =
+             DeleteIntentVersionResponse
+        request = delete lexModels
+        response = receiveNull DeleteIntentVersionResponse'
+
+instance Hashable DeleteIntentVersion where
+
+instance NFData DeleteIntentVersion where
+
+instance ToHeaders DeleteIntentVersion where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteIntentVersion where
+        toPath DeleteIntentVersion'{..}
+          = mconcat
+              ["/intents/", toBS _divName, "/versions/",
+               toBS _divVersion]
+
+instance ToQuery DeleteIntentVersion where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteIntentVersionResponse' smart constructor.
+data DeleteIntentVersionResponse =
+  DeleteIntentVersionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteIntentVersionResponse' with the minimum fields required to make a request.
+--
+deleteIntentVersionResponse
+    :: DeleteIntentVersionResponse
+deleteIntentVersionResponse = DeleteIntentVersionResponse'
+
+
+instance NFData DeleteIntentVersionResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteSlotType.hs b/gen/Network/AWS/LexModels/DeleteSlotType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteSlotType.hs
@@ -0,0 +1,105 @@
+{-# 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.LexModels.DeleteSlotType
+-- Copyright   : (c) 2013-2017 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 all versions of the slot type, including the @> LATEST@ version. To delete a specific version of the slot type, use the 'DeleteSlotTypeVersion' operation.
+--
+--
+-- You can delete a version of a slot type only if it is not referenced. To delete a slot type that is referred to in one or more intents, you must remove those references first.
+--
+-- This operation requires permission for the @lex:DeleteSlotType@ action.
+--
+module Network.AWS.LexModels.DeleteSlotType
+    (
+    -- * Creating a Request
+      deleteSlotType
+    , DeleteSlotType
+    -- * Request Lenses
+    , dstName
+
+    -- * Destructuring the Response
+    , deleteSlotTypeResponse
+    , DeleteSlotTypeResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteSlotType' smart constructor.
+newtype DeleteSlotType = DeleteSlotType'
+  { _dstName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteSlotType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dstName' - The name of the slot type. The name is case sensitive.
+deleteSlotType
+    :: Text -- ^ 'dstName'
+    -> DeleteSlotType
+deleteSlotType pName_ = DeleteSlotType' {_dstName = pName_}
+
+
+-- | The name of the slot type. The name is case sensitive.
+dstName :: Lens' DeleteSlotType Text
+dstName = lens _dstName (\ s a -> s{_dstName = a});
+
+instance AWSRequest DeleteSlotType where
+        type Rs DeleteSlotType = DeleteSlotTypeResponse
+        request = delete lexModels
+        response = receiveNull DeleteSlotTypeResponse'
+
+instance Hashable DeleteSlotType where
+
+instance NFData DeleteSlotType where
+
+instance ToHeaders DeleteSlotType where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteSlotType where
+        toPath DeleteSlotType'{..}
+          = mconcat ["/slottypes/", toBS _dstName]
+
+instance ToQuery DeleteSlotType where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteSlotTypeResponse' smart constructor.
+data DeleteSlotTypeResponse =
+  DeleteSlotTypeResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteSlotTypeResponse' with the minimum fields required to make a request.
+--
+deleteSlotTypeResponse
+    :: DeleteSlotTypeResponse
+deleteSlotTypeResponse = DeleteSlotTypeResponse'
+
+
+instance NFData DeleteSlotTypeResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteSlotTypeVersion.hs b/gen/Network/AWS/LexModels/DeleteSlotTypeVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteSlotTypeVersion.hs
@@ -0,0 +1,116 @@
+{-# 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.LexModels.DeleteSlotTypeVersion
+-- Copyright   : (c) 2013-2017 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 specific version of a slot type. To delete all versions of a slot type, use the 'DeleteSlotType' operation.
+--
+--
+-- This operation requires permissions for the @lex:DeleteSlotTypeVersion@ action.
+--
+module Network.AWS.LexModels.DeleteSlotTypeVersion
+    (
+    -- * Creating a Request
+      deleteSlotTypeVersion
+    , DeleteSlotTypeVersion
+    -- * Request Lenses
+    , dstvName
+    , dstvVersion
+
+    -- * Destructuring the Response
+    , deleteSlotTypeVersionResponse
+    , DeleteSlotTypeVersionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteSlotTypeVersion' smart constructor.
+data DeleteSlotTypeVersion = DeleteSlotTypeVersion'
+  { _dstvName    :: !Text
+  , _dstvVersion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteSlotTypeVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dstvName' - The name of the slot type.
+--
+-- * 'dstvVersion' - The version of the slot type to delete. You cannot delete the @> LATEST@ version of the slot type. To delete the @> LATEST@ version, use the 'DeleteSlotType' operation.
+deleteSlotTypeVersion
+    :: Text -- ^ 'dstvName'
+    -> Text -- ^ 'dstvVersion'
+    -> DeleteSlotTypeVersion
+deleteSlotTypeVersion pName_ pVersion_ =
+  DeleteSlotTypeVersion' {_dstvName = pName_, _dstvVersion = pVersion_}
+
+
+-- | The name of the slot type.
+dstvName :: Lens' DeleteSlotTypeVersion Text
+dstvName = lens _dstvName (\ s a -> s{_dstvName = a});
+
+-- | The version of the slot type to delete. You cannot delete the @> LATEST@ version of the slot type. To delete the @> LATEST@ version, use the 'DeleteSlotType' operation.
+dstvVersion :: Lens' DeleteSlotTypeVersion Text
+dstvVersion = lens _dstvVersion (\ s a -> s{_dstvVersion = a});
+
+instance AWSRequest DeleteSlotTypeVersion where
+        type Rs DeleteSlotTypeVersion =
+             DeleteSlotTypeVersionResponse
+        request = delete lexModels
+        response = receiveNull DeleteSlotTypeVersionResponse'
+
+instance Hashable DeleteSlotTypeVersion where
+
+instance NFData DeleteSlotTypeVersion where
+
+instance ToHeaders DeleteSlotTypeVersion where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteSlotTypeVersion where
+        toPath DeleteSlotTypeVersion'{..}
+          = mconcat
+              ["/slottypes/", toBS _dstvName, "/version/",
+               toBS _dstvVersion]
+
+instance ToQuery DeleteSlotTypeVersion where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteSlotTypeVersionResponse' smart constructor.
+data DeleteSlotTypeVersionResponse =
+  DeleteSlotTypeVersionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteSlotTypeVersionResponse' with the minimum fields required to make a request.
+--
+deleteSlotTypeVersionResponse
+    :: DeleteSlotTypeVersionResponse
+deleteSlotTypeVersionResponse = DeleteSlotTypeVersionResponse'
+
+
+instance NFData DeleteSlotTypeVersionResponse where
diff --git a/gen/Network/AWS/LexModels/DeleteUtterances.hs b/gen/Network/AWS/LexModels/DeleteUtterances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/DeleteUtterances.hs
@@ -0,0 +1,119 @@
+{-# 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.LexModels.DeleteUtterances
+-- Copyright   : (c) 2013-2017 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 stored utterances.
+--
+--
+-- Amazon Lex stores the utterances that users send to your bot unless the @childDirected@ field in the bot is set to @true@ . Utterances are stored for 15 days for use with the 'GetUtterancesView' operation, and then stored indefinately for use in improving the ability of your bot to respond to user input.
+--
+-- Use the @DeleteStoredUtterances@ operation to manually delete stored utterances for a specific user.
+--
+-- This operation requires permissions for the @lex:DeleteUtterances@ action.
+--
+module Network.AWS.LexModels.DeleteUtterances
+    (
+    -- * Creating a Request
+      deleteUtterances
+    , DeleteUtterances
+    -- * Request Lenses
+    , duBotName
+    , duUserId
+
+    -- * Destructuring the Response
+    , deleteUtterancesResponse
+    , DeleteUtterancesResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteUtterances' smart constructor.
+data DeleteUtterances = DeleteUtterances'
+  { _duBotName :: !Text
+  , _duUserId  :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteUtterances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'duBotName' - The name of the bot that stored the utterances.
+--
+-- * 'duUserId' - The unique identifier for the user that made the utterances. This is the user ID that was sent in the <http://docs.aws.amazon.com/lex/latest/dg/API_runtime_PostContent.html PostContent> or <http://docs.aws.amazon.com/lex/latest/dg/API_runtime_PostText.html PostText> operation request that contained the utterance.
+deleteUtterances
+    :: Text -- ^ 'duBotName'
+    -> Text -- ^ 'duUserId'
+    -> DeleteUtterances
+deleteUtterances pBotName_ pUserId_ =
+  DeleteUtterances' {_duBotName = pBotName_, _duUserId = pUserId_}
+
+
+-- | The name of the bot that stored the utterances.
+duBotName :: Lens' DeleteUtterances Text
+duBotName = lens _duBotName (\ s a -> s{_duBotName = a});
+
+-- | The unique identifier for the user that made the utterances. This is the user ID that was sent in the <http://docs.aws.amazon.com/lex/latest/dg/API_runtime_PostContent.html PostContent> or <http://docs.aws.amazon.com/lex/latest/dg/API_runtime_PostText.html PostText> operation request that contained the utterance.
+duUserId :: Lens' DeleteUtterances Text
+duUserId = lens _duUserId (\ s a -> s{_duUserId = a});
+
+instance AWSRequest DeleteUtterances where
+        type Rs DeleteUtterances = DeleteUtterancesResponse
+        request = delete lexModels
+        response = receiveNull DeleteUtterancesResponse'
+
+instance Hashable DeleteUtterances where
+
+instance NFData DeleteUtterances where
+
+instance ToHeaders DeleteUtterances where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteUtterances where
+        toPath DeleteUtterances'{..}
+          = mconcat
+              ["/bots/", toBS _duBotName, "/utterances/",
+               toBS _duUserId]
+
+instance ToQuery DeleteUtterances where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteUtterancesResponse' smart constructor.
+data DeleteUtterancesResponse =
+  DeleteUtterancesResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteUtterancesResponse' with the minimum fields required to make a request.
+--
+deleteUtterancesResponse
+    :: DeleteUtterancesResponse
+deleteUtterancesResponse = DeleteUtterancesResponse'
+
+
+instance NFData DeleteUtterancesResponse where
diff --git a/gen/Network/AWS/LexModels/GetBot.hs b/gen/Network/AWS/LexModels/GetBot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBot.hs
@@ -0,0 +1,281 @@
+{-# 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.LexModels.GetBot
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns metadata information for a specific bot. You must provide the bot name and the bot version or alias.
+--
+--
+-- This operation requires permissions for the @lex:GetBot@ action.
+--
+module Network.AWS.LexModels.GetBot
+    (
+    -- * Creating a Request
+      getBot
+    , GetBot
+    -- * Request Lenses
+    , gbName
+    , gbVersionOrAlias
+
+    -- * Destructuring the Response
+    , getBotResponse
+    , GetBotResponse
+    -- * Response Lenses
+    , gbrsFailureReason
+    , gbrsStatus
+    , gbrsAbortStatement
+    , gbrsIntents
+    , gbrsChecksum
+    , gbrsLocale
+    , gbrsCreatedDate
+    , gbrsName
+    , gbrsVersion
+    , gbrsIdleSessionTTLInSeconds
+    , gbrsClarificationPrompt
+    , gbrsVoiceId
+    , gbrsLastUpdatedDate
+    , gbrsChildDirected
+    , gbrsDescription
+    , gbrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBot' smart constructor.
+data GetBot = GetBot'
+  { _gbName           :: !Text
+  , _gbVersionOrAlias :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbName' - The name of the bot. The name is case sensitive.
+--
+-- * 'gbVersionOrAlias' - The version or alias of the bot.
+getBot
+    :: Text -- ^ 'gbName'
+    -> Text -- ^ 'gbVersionOrAlias'
+    -> GetBot
+getBot pName_ pVersionOrAlias_ =
+  GetBot' {_gbName = pName_, _gbVersionOrAlias = pVersionOrAlias_}
+
+
+-- | The name of the bot. The name is case sensitive.
+gbName :: Lens' GetBot Text
+gbName = lens _gbName (\ s a -> s{_gbName = a});
+
+-- | The version or alias of the bot.
+gbVersionOrAlias :: Lens' GetBot Text
+gbVersionOrAlias = lens _gbVersionOrAlias (\ s a -> s{_gbVersionOrAlias = a});
+
+instance AWSRequest GetBot where
+        type Rs GetBot = GetBotResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBotResponse' <$>
+                   (x .?> "failureReason") <*> (x .?> "status") <*>
+                     (x .?> "abortStatement")
+                     <*> (x .?> "intents" .!@ mempty)
+                     <*> (x .?> "checksum")
+                     <*> (x .?> "locale")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "idleSessionTTLInSeconds")
+                     <*> (x .?> "clarificationPrompt")
+                     <*> (x .?> "voiceId")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "childDirected")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBot where
+
+instance NFData GetBot where
+
+instance ToHeaders GetBot where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBot where
+        toPath GetBot'{..}
+          = mconcat
+              ["/bots/", toBS _gbName, "/versions/",
+               toBS _gbVersionOrAlias]
+
+instance ToQuery GetBot where
+        toQuery = const mempty
+
+-- | /See:/ 'getBotResponse' smart constructor.
+data GetBotResponse = GetBotResponse'
+  { _gbrsFailureReason           :: !(Maybe Text)
+  , _gbrsStatus                  :: !(Maybe LexStatus)
+  , _gbrsAbortStatement          :: !(Maybe Statement)
+  , _gbrsIntents                 :: !(Maybe [Intent])
+  , _gbrsChecksum                :: !(Maybe Text)
+  , _gbrsLocale                  :: !(Maybe Locale)
+  , _gbrsCreatedDate             :: !(Maybe POSIX)
+  , _gbrsName                    :: !(Maybe Text)
+  , _gbrsVersion                 :: !(Maybe Text)
+  , _gbrsIdleSessionTTLInSeconds :: !(Maybe Nat)
+  , _gbrsClarificationPrompt     :: !(Maybe Prompt)
+  , _gbrsVoiceId                 :: !(Maybe Text)
+  , _gbrsLastUpdatedDate         :: !(Maybe POSIX)
+  , _gbrsChildDirected           :: !(Maybe Bool)
+  , _gbrsDescription             :: !(Maybe Text)
+  , _gbrsResponseStatus          :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbrsFailureReason' - If @status@ is @FAILED@ , Amazon Lex explains why it failed to build the bot.
+--
+-- * 'gbrsStatus' - The status of the bot. If the bot is ready to run, the status is @READY@ . If there was a problem with building the bot, the status is @FAILED@ and the @failureReason@ explains why the bot did not build. If the bot was saved but not built, the status is @NOT BUILT@ .
+--
+-- * 'gbrsAbortStatement' - The message that Amazon Lex returns when the user elects to end the conversation without completing it. For more information, see 'PutBot' .
+--
+-- * 'gbrsIntents' - An array of @intent@ objects. For more information, see 'PutBot' .
+--
+-- * 'gbrsChecksum' - Checksum of the bot used to identify a specific revision of the bot's @> LATEST@ version.
+--
+-- * 'gbrsLocale' - The target locale for the bot.
+--
+-- * 'gbrsCreatedDate' - The date that the bot was created.
+--
+-- * 'gbrsName' - The name of the bot.
+--
+-- * 'gbrsVersion' - The version of the bot. For a new bot, the version is always @> LATEST@ .
+--
+-- * 'gbrsIdleSessionTTLInSeconds' - The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. For more information, see 'PutBot' .
+--
+-- * 'gbrsClarificationPrompt' - The message Amazon Lex uses when it doesn't understand the user's request. For more information, see 'PutBot' .
+--
+-- * 'gbrsVoiceId' - The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. For more information, see 'PutBot' .
+--
+-- * 'gbrsLastUpdatedDate' - The date that the bot was updated. When you create a resource, the creation date and last updated date are the same.
+--
+-- * 'gbrsChildDirected' - For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+--
+-- * 'gbrsDescription' - A description of the bot.
+--
+-- * 'gbrsResponseStatus' - -- | The response status code.
+getBotResponse
+    :: Int -- ^ 'gbrsResponseStatus'
+    -> GetBotResponse
+getBotResponse pResponseStatus_ =
+  GetBotResponse'
+  { _gbrsFailureReason = Nothing
+  , _gbrsStatus = Nothing
+  , _gbrsAbortStatement = Nothing
+  , _gbrsIntents = Nothing
+  , _gbrsChecksum = Nothing
+  , _gbrsLocale = Nothing
+  , _gbrsCreatedDate = Nothing
+  , _gbrsName = Nothing
+  , _gbrsVersion = Nothing
+  , _gbrsIdleSessionTTLInSeconds = Nothing
+  , _gbrsClarificationPrompt = Nothing
+  , _gbrsVoiceId = Nothing
+  , _gbrsLastUpdatedDate = Nothing
+  , _gbrsChildDirected = Nothing
+  , _gbrsDescription = Nothing
+  , _gbrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | If @status@ is @FAILED@ , Amazon Lex explains why it failed to build the bot.
+gbrsFailureReason :: Lens' GetBotResponse (Maybe Text)
+gbrsFailureReason = lens _gbrsFailureReason (\ s a -> s{_gbrsFailureReason = a});
+
+-- | The status of the bot. If the bot is ready to run, the status is @READY@ . If there was a problem with building the bot, the status is @FAILED@ and the @failureReason@ explains why the bot did not build. If the bot was saved but not built, the status is @NOT BUILT@ .
+gbrsStatus :: Lens' GetBotResponse (Maybe LexStatus)
+gbrsStatus = lens _gbrsStatus (\ s a -> s{_gbrsStatus = a});
+
+-- | The message that Amazon Lex returns when the user elects to end the conversation without completing it. For more information, see 'PutBot' .
+gbrsAbortStatement :: Lens' GetBotResponse (Maybe Statement)
+gbrsAbortStatement = lens _gbrsAbortStatement (\ s a -> s{_gbrsAbortStatement = a});
+
+-- | An array of @intent@ objects. For more information, see 'PutBot' .
+gbrsIntents :: Lens' GetBotResponse [Intent]
+gbrsIntents = lens _gbrsIntents (\ s a -> s{_gbrsIntents = a}) . _Default . _Coerce;
+
+-- | Checksum of the bot used to identify a specific revision of the bot's @> LATEST@ version.
+gbrsChecksum :: Lens' GetBotResponse (Maybe Text)
+gbrsChecksum = lens _gbrsChecksum (\ s a -> s{_gbrsChecksum = a});
+
+-- | The target locale for the bot.
+gbrsLocale :: Lens' GetBotResponse (Maybe Locale)
+gbrsLocale = lens _gbrsLocale (\ s a -> s{_gbrsLocale = a});
+
+-- | The date that the bot was created.
+gbrsCreatedDate :: Lens' GetBotResponse (Maybe UTCTime)
+gbrsCreatedDate = lens _gbrsCreatedDate (\ s a -> s{_gbrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the bot.
+gbrsName :: Lens' GetBotResponse (Maybe Text)
+gbrsName = lens _gbrsName (\ s a -> s{_gbrsName = a});
+
+-- | The version of the bot. For a new bot, the version is always @> LATEST@ .
+gbrsVersion :: Lens' GetBotResponse (Maybe Text)
+gbrsVersion = lens _gbrsVersion (\ s a -> s{_gbrsVersion = a});
+
+-- | The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. For more information, see 'PutBot' .
+gbrsIdleSessionTTLInSeconds :: Lens' GetBotResponse (Maybe Natural)
+gbrsIdleSessionTTLInSeconds = lens _gbrsIdleSessionTTLInSeconds (\ s a -> s{_gbrsIdleSessionTTLInSeconds = a}) . mapping _Nat;
+
+-- | The message Amazon Lex uses when it doesn't understand the user's request. For more information, see 'PutBot' .
+gbrsClarificationPrompt :: Lens' GetBotResponse (Maybe Prompt)
+gbrsClarificationPrompt = lens _gbrsClarificationPrompt (\ s a -> s{_gbrsClarificationPrompt = a});
+
+-- | The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. For more information, see 'PutBot' .
+gbrsVoiceId :: Lens' GetBotResponse (Maybe Text)
+gbrsVoiceId = lens _gbrsVoiceId (\ s a -> s{_gbrsVoiceId = a});
+
+-- | The date that the bot was updated. When you create a resource, the creation date and last updated date are the same.
+gbrsLastUpdatedDate :: Lens' GetBotResponse (Maybe UTCTime)
+gbrsLastUpdatedDate = lens _gbrsLastUpdatedDate (\ s a -> s{_gbrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+gbrsChildDirected :: Lens' GetBotResponse (Maybe Bool)
+gbrsChildDirected = lens _gbrsChildDirected (\ s a -> s{_gbrsChildDirected = a});
+
+-- | A description of the bot.
+gbrsDescription :: Lens' GetBotResponse (Maybe Text)
+gbrsDescription = lens _gbrsDescription (\ s a -> s{_gbrsDescription = a});
+
+-- | -- | The response status code.
+gbrsResponseStatus :: Lens' GetBotResponse Int
+gbrsResponseStatus = lens _gbrsResponseStatus (\ s a -> s{_gbrsResponseStatus = a});
+
+instance NFData GetBotResponse where
diff --git a/gen/Network/AWS/LexModels/GetBotAlias.hs b/gen/Network/AWS/LexModels/GetBotAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBotAlias.hs
@@ -0,0 +1,201 @@
+{-# 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.LexModels.GetBotAlias
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns information about an Amazon Lex bot alias. For more information about aliases, see 'versioning-aliases' .
+--
+--
+-- This operation requires permissions for the @lex:GetBotAlias@ action.
+--
+module Network.AWS.LexModels.GetBotAlias
+    (
+    -- * Creating a Request
+      getBotAlias
+    , GetBotAlias
+    -- * Request Lenses
+    , gbasName
+    , gbasBotName
+
+    -- * Destructuring the Response
+    , getBotAliasResponse
+    , GetBotAliasResponse
+    -- * Response Lenses
+    , gbasrsChecksum
+    , gbasrsBotVersion
+    , gbasrsBotName
+    , gbasrsCreatedDate
+    , gbasrsName
+    , gbasrsLastUpdatedDate
+    , gbasrsDescription
+    , gbasrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBotAlias' smart constructor.
+data GetBotAlias = GetBotAlias'
+  { _gbasName    :: !Text
+  , _gbasBotName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbasName' - The name of the bot alias. The name is case sensitive.
+--
+-- * 'gbasBotName' - The name of the bot.
+getBotAlias
+    :: Text -- ^ 'gbasName'
+    -> Text -- ^ 'gbasBotName'
+    -> GetBotAlias
+getBotAlias pName_ pBotName_ =
+  GetBotAlias' {_gbasName = pName_, _gbasBotName = pBotName_}
+
+
+-- | The name of the bot alias. The name is case sensitive.
+gbasName :: Lens' GetBotAlias Text
+gbasName = lens _gbasName (\ s a -> s{_gbasName = a});
+
+-- | The name of the bot.
+gbasBotName :: Lens' GetBotAlias Text
+gbasBotName = lens _gbasBotName (\ s a -> s{_gbasBotName = a});
+
+instance AWSRequest GetBotAlias where
+        type Rs GetBotAlias = GetBotAliasResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBotAliasResponse' <$>
+                   (x .?> "checksum") <*> (x .?> "botVersion") <*>
+                     (x .?> "botName")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBotAlias where
+
+instance NFData GetBotAlias where
+
+instance ToHeaders GetBotAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBotAlias where
+        toPath GetBotAlias'{..}
+          = mconcat
+              ["/bots/", toBS _gbasBotName, "/aliases/",
+               toBS _gbasName]
+
+instance ToQuery GetBotAlias where
+        toQuery = const mempty
+
+-- | /See:/ 'getBotAliasResponse' smart constructor.
+data GetBotAliasResponse = GetBotAliasResponse'
+  { _gbasrsChecksum        :: !(Maybe Text)
+  , _gbasrsBotVersion      :: !(Maybe Text)
+  , _gbasrsBotName         :: !(Maybe Text)
+  , _gbasrsCreatedDate     :: !(Maybe POSIX)
+  , _gbasrsName            :: !(Maybe Text)
+  , _gbasrsLastUpdatedDate :: !(Maybe POSIX)
+  , _gbasrsDescription     :: !(Maybe Text)
+  , _gbasrsResponseStatus  :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotAliasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbasrsChecksum' - Checksum of the bot alias.
+--
+-- * 'gbasrsBotVersion' - The version of the bot that the alias points to.
+--
+-- * 'gbasrsBotName' - The name of the bot that the alias points to.
+--
+-- * 'gbasrsCreatedDate' - The date that the bot alias was created.
+--
+-- * 'gbasrsName' - The name of the bot alias.
+--
+-- * 'gbasrsLastUpdatedDate' - The date that the bot alias was updated. When you create a resource, the creation date and the last updated date are the same.
+--
+-- * 'gbasrsDescription' - A description of the bot alias.
+--
+-- * 'gbasrsResponseStatus' - -- | The response status code.
+getBotAliasResponse
+    :: Int -- ^ 'gbasrsResponseStatus'
+    -> GetBotAliasResponse
+getBotAliasResponse pResponseStatus_ =
+  GetBotAliasResponse'
+  { _gbasrsChecksum = Nothing
+  , _gbasrsBotVersion = Nothing
+  , _gbasrsBotName = Nothing
+  , _gbasrsCreatedDate = Nothing
+  , _gbasrsName = Nothing
+  , _gbasrsLastUpdatedDate = Nothing
+  , _gbasrsDescription = Nothing
+  , _gbasrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Checksum of the bot alias.
+gbasrsChecksum :: Lens' GetBotAliasResponse (Maybe Text)
+gbasrsChecksum = lens _gbasrsChecksum (\ s a -> s{_gbasrsChecksum = a});
+
+-- | The version of the bot that the alias points to.
+gbasrsBotVersion :: Lens' GetBotAliasResponse (Maybe Text)
+gbasrsBotVersion = lens _gbasrsBotVersion (\ s a -> s{_gbasrsBotVersion = a});
+
+-- | The name of the bot that the alias points to.
+gbasrsBotName :: Lens' GetBotAliasResponse (Maybe Text)
+gbasrsBotName = lens _gbasrsBotName (\ s a -> s{_gbasrsBotName = a});
+
+-- | The date that the bot alias was created.
+gbasrsCreatedDate :: Lens' GetBotAliasResponse (Maybe UTCTime)
+gbasrsCreatedDate = lens _gbasrsCreatedDate (\ s a -> s{_gbasrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the bot alias.
+gbasrsName :: Lens' GetBotAliasResponse (Maybe Text)
+gbasrsName = lens _gbasrsName (\ s a -> s{_gbasrsName = a});
+
+-- | The date that the bot alias was updated. When you create a resource, the creation date and the last updated date are the same.
+gbasrsLastUpdatedDate :: Lens' GetBotAliasResponse (Maybe UTCTime)
+gbasrsLastUpdatedDate = lens _gbasrsLastUpdatedDate (\ s a -> s{_gbasrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the bot alias.
+gbasrsDescription :: Lens' GetBotAliasResponse (Maybe Text)
+gbasrsDescription = lens _gbasrsDescription (\ s a -> s{_gbasrsDescription = a});
+
+-- | -- | The response status code.
+gbasrsResponseStatus :: Lens' GetBotAliasResponse Int
+gbasrsResponseStatus = lens _gbasrsResponseStatus (\ s a -> s{_gbasrsResponseStatus = a});
+
+instance NFData GetBotAliasResponse where
diff --git a/gen/Network/AWS/LexModels/GetBotAliases.hs b/gen/Network/AWS/LexModels/GetBotAliases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBotAliases.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.LexModels.GetBotAliases
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns a list of aliases for a specified Amazon Lex bot.
+--
+--
+-- This operation requires permissions for the @lex:GetBotAliases@ action.
+--
+module Network.AWS.LexModels.GetBotAliases
+    (
+    -- * Creating a Request
+      getBotAliases
+    , GetBotAliases
+    -- * Request Lenses
+    , gbaNameContains
+    , gbaNextToken
+    , gbaMaxResults
+    , gbaBotName
+
+    -- * Destructuring the Response
+    , getBotAliasesResponse
+    , GetBotAliasesResponse
+    -- * Response Lenses
+    , gbarsNextToken
+    , gbarsBotAliases
+    , gbarsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBotAliases' smart constructor.
+data GetBotAliases = GetBotAliases'
+  { _gbaNameContains :: !(Maybe Text)
+  , _gbaNextToken    :: !(Maybe Text)
+  , _gbaMaxResults   :: !(Maybe Nat)
+  , _gbaBotName      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotAliases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbaNameContains' - Substring to match in bot alias names. An alias will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+--
+-- * 'gbaNextToken' - A pagination token for fetching the next page of aliases. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of aliases, specify the pagination token in the next request.
+--
+-- * 'gbaMaxResults' - The maximum number of aliases to return in the response. The default is 50. .
+--
+-- * 'gbaBotName' - The name of the bot.
+getBotAliases
+    :: Text -- ^ 'gbaBotName'
+    -> GetBotAliases
+getBotAliases pBotName_ =
+  GetBotAliases'
+  { _gbaNameContains = Nothing
+  , _gbaNextToken = Nothing
+  , _gbaMaxResults = Nothing
+  , _gbaBotName = pBotName_
+  }
+
+
+-- | Substring to match in bot alias names. An alias will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+gbaNameContains :: Lens' GetBotAliases (Maybe Text)
+gbaNameContains = lens _gbaNameContains (\ s a -> s{_gbaNameContains = a});
+
+-- | A pagination token for fetching the next page of aliases. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of aliases, specify the pagination token in the next request.
+gbaNextToken :: Lens' GetBotAliases (Maybe Text)
+gbaNextToken = lens _gbaNextToken (\ s a -> s{_gbaNextToken = a});
+
+-- | The maximum number of aliases to return in the response. The default is 50. .
+gbaMaxResults :: Lens' GetBotAliases (Maybe Natural)
+gbaMaxResults = lens _gbaMaxResults (\ s a -> s{_gbaMaxResults = a}) . mapping _Nat;
+
+-- | The name of the bot.
+gbaBotName :: Lens' GetBotAliases Text
+gbaBotName = lens _gbaBotName (\ s a -> s{_gbaBotName = a});
+
+instance AWSRequest GetBotAliases where
+        type Rs GetBotAliases = GetBotAliasesResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBotAliasesResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "BotAliases" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBotAliases where
+
+instance NFData GetBotAliases where
+
+instance ToHeaders GetBotAliases where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBotAliases where
+        toPath GetBotAliases'{..}
+          = mconcat ["/bots/", toBS _gbaBotName, "/aliases/"]
+
+instance ToQuery GetBotAliases where
+        toQuery GetBotAliases'{..}
+          = mconcat
+              ["nameContains" =: _gbaNameContains,
+               "nextToken" =: _gbaNextToken,
+               "maxResults" =: _gbaMaxResults]
+
+-- | /See:/ 'getBotAliasesResponse' smart constructor.
+data GetBotAliasesResponse = GetBotAliasesResponse'
+  { _gbarsNextToken      :: !(Maybe Text)
+  , _gbarsBotAliases     :: !(Maybe [BotAliasMetadata])
+  , _gbarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotAliasesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbarsNextToken' - A pagination token for fetching next page of aliases. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of aliases, specify the pagination token in the next request.
+--
+-- * 'gbarsBotAliases' - An array of @BotAliasMetadata@ objects, each describing a bot alias.
+--
+-- * 'gbarsResponseStatus' - -- | The response status code.
+getBotAliasesResponse
+    :: Int -- ^ 'gbarsResponseStatus'
+    -> GetBotAliasesResponse
+getBotAliasesResponse pResponseStatus_ =
+  GetBotAliasesResponse'
+  { _gbarsNextToken = Nothing
+  , _gbarsBotAliases = Nothing
+  , _gbarsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A pagination token for fetching next page of aliases. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of aliases, specify the pagination token in the next request.
+gbarsNextToken :: Lens' GetBotAliasesResponse (Maybe Text)
+gbarsNextToken = lens _gbarsNextToken (\ s a -> s{_gbarsNextToken = a});
+
+-- | An array of @BotAliasMetadata@ objects, each describing a bot alias.
+gbarsBotAliases :: Lens' GetBotAliasesResponse [BotAliasMetadata]
+gbarsBotAliases = lens _gbarsBotAliases (\ s a -> s{_gbarsBotAliases = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gbarsResponseStatus :: Lens' GetBotAliasesResponse Int
+gbarsResponseStatus = lens _gbarsResponseStatus (\ s a -> s{_gbarsResponseStatus = a});
+
+instance NFData GetBotAliasesResponse where
diff --git a/gen/Network/AWS/LexModels/GetBotChannelAssociation.hs b/gen/Network/AWS/LexModels/GetBotChannelAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBotChannelAssociation.hs
@@ -0,0 +1,213 @@
+{-# 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.LexModels.GetBotChannelAssociation
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns information about the association between an Amazon Lex bot and a messaging platform.
+--
+--
+-- This operation requires permissions for the @lex:GetBotChannelAssociation@ action.
+--
+module Network.AWS.LexModels.GetBotChannelAssociation
+    (
+    -- * Creating a Request
+      getBotChannelAssociation
+    , GetBotChannelAssociation
+    -- * Request Lenses
+    , gName
+    , gBotName
+    , gBotAlias
+
+    -- * Destructuring the Response
+    , getBotChannelAssociationResponse
+    , GetBotChannelAssociationResponse
+    -- * Response Lenses
+    , gbcarsBotAlias
+    , gbcarsBotName
+    , gbcarsBotConfiguration
+    , gbcarsCreatedDate
+    , gbcarsName
+    , gbcarsType
+    , gbcarsDescription
+    , gbcarsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBotChannelAssociation' smart constructor.
+data GetBotChannelAssociation = GetBotChannelAssociation'
+  { _gName     :: !Text
+  , _gBotName  :: !Text
+  , _gBotAlias :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotChannelAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gName' - The name of the association between the bot and the channel. The name is case sensitive.
+--
+-- * 'gBotName' - The name of the Amazon Lex bot.
+--
+-- * 'gBotAlias' - An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+getBotChannelAssociation
+    :: Text -- ^ 'gName'
+    -> Text -- ^ 'gBotName'
+    -> Text -- ^ 'gBotAlias'
+    -> GetBotChannelAssociation
+getBotChannelAssociation pName_ pBotName_ pBotAlias_ =
+  GetBotChannelAssociation'
+  {_gName = pName_, _gBotName = pBotName_, _gBotAlias = pBotAlias_}
+
+
+-- | The name of the association between the bot and the channel. The name is case sensitive.
+gName :: Lens' GetBotChannelAssociation Text
+gName = lens _gName (\ s a -> s{_gName = a});
+
+-- | The name of the Amazon Lex bot.
+gBotName :: Lens' GetBotChannelAssociation Text
+gBotName = lens _gBotName (\ s a -> s{_gBotName = a});
+
+-- | An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+gBotAlias :: Lens' GetBotChannelAssociation Text
+gBotAlias = lens _gBotAlias (\ s a -> s{_gBotAlias = a});
+
+instance AWSRequest GetBotChannelAssociation where
+        type Rs GetBotChannelAssociation =
+             GetBotChannelAssociationResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBotChannelAssociationResponse' <$>
+                   (x .?> "botAlias") <*> (x .?> "botName") <*>
+                     (x .?> "botConfiguration" .!@ mempty)
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "type")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBotChannelAssociation where
+
+instance NFData GetBotChannelAssociation where
+
+instance ToHeaders GetBotChannelAssociation where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBotChannelAssociation where
+        toPath GetBotChannelAssociation'{..}
+          = mconcat
+              ["/bots/", toBS _gBotName, "/aliases/",
+               toBS _gBotAlias, "/channels/", toBS _gName]
+
+instance ToQuery GetBotChannelAssociation where
+        toQuery = const mempty
+
+-- | /See:/ 'getBotChannelAssociationResponse' smart constructor.
+data GetBotChannelAssociationResponse = GetBotChannelAssociationResponse'
+  { _gbcarsBotAlias         :: !(Maybe Text)
+  , _gbcarsBotName          :: !(Maybe Text)
+  , _gbcarsBotConfiguration :: !(Maybe (Sensitive (Map Text Text)))
+  , _gbcarsCreatedDate      :: !(Maybe POSIX)
+  , _gbcarsName             :: !(Maybe Text)
+  , _gbcarsType             :: !(Maybe ChannelType)
+  , _gbcarsDescription      :: !(Maybe Text)
+  , _gbcarsResponseStatus   :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotChannelAssociationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbcarsBotAlias' - An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+--
+-- * 'gbcarsBotName' - The name of the Amazon Lex bot.
+--
+-- * 'gbcarsBotConfiguration' - Provides information that the messaging platform needs to communicate with the Amazon Lex bot.
+--
+-- * 'gbcarsCreatedDate' - The date that the association between the bot and the channel was created.
+--
+-- * 'gbcarsName' - The name of the association between the bot and the channel.
+--
+-- * 'gbcarsType' - The type of the messaging platform.
+--
+-- * 'gbcarsDescription' - A description of the association between the bot and the channel.
+--
+-- * 'gbcarsResponseStatus' - -- | The response status code.
+getBotChannelAssociationResponse
+    :: Int -- ^ 'gbcarsResponseStatus'
+    -> GetBotChannelAssociationResponse
+getBotChannelAssociationResponse pResponseStatus_ =
+  GetBotChannelAssociationResponse'
+  { _gbcarsBotAlias = Nothing
+  , _gbcarsBotName = Nothing
+  , _gbcarsBotConfiguration = Nothing
+  , _gbcarsCreatedDate = Nothing
+  , _gbcarsName = Nothing
+  , _gbcarsType = Nothing
+  , _gbcarsDescription = Nothing
+  , _gbcarsResponseStatus = pResponseStatus_
+  }
+
+
+-- | An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+gbcarsBotAlias :: Lens' GetBotChannelAssociationResponse (Maybe Text)
+gbcarsBotAlias = lens _gbcarsBotAlias (\ s a -> s{_gbcarsBotAlias = a});
+
+-- | The name of the Amazon Lex bot.
+gbcarsBotName :: Lens' GetBotChannelAssociationResponse (Maybe Text)
+gbcarsBotName = lens _gbcarsBotName (\ s a -> s{_gbcarsBotName = a});
+
+-- | Provides information that the messaging platform needs to communicate with the Amazon Lex bot.
+gbcarsBotConfiguration :: Lens' GetBotChannelAssociationResponse (Maybe (HashMap Text Text))
+gbcarsBotConfiguration = lens _gbcarsBotConfiguration (\ s a -> s{_gbcarsBotConfiguration = a}) . mapping (_Sensitive . _Map);
+
+-- | The date that the association between the bot and the channel was created.
+gbcarsCreatedDate :: Lens' GetBotChannelAssociationResponse (Maybe UTCTime)
+gbcarsCreatedDate = lens _gbcarsCreatedDate (\ s a -> s{_gbcarsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the association between the bot and the channel.
+gbcarsName :: Lens' GetBotChannelAssociationResponse (Maybe Text)
+gbcarsName = lens _gbcarsName (\ s a -> s{_gbcarsName = a});
+
+-- | The type of the messaging platform.
+gbcarsType :: Lens' GetBotChannelAssociationResponse (Maybe ChannelType)
+gbcarsType = lens _gbcarsType (\ s a -> s{_gbcarsType = a});
+
+-- | A description of the association between the bot and the channel.
+gbcarsDescription :: Lens' GetBotChannelAssociationResponse (Maybe Text)
+gbcarsDescription = lens _gbcarsDescription (\ s a -> s{_gbcarsDescription = a});
+
+-- | -- | The response status code.
+gbcarsResponseStatus :: Lens' GetBotChannelAssociationResponse Int
+gbcarsResponseStatus = lens _gbcarsResponseStatus (\ s a -> s{_gbcarsResponseStatus = a});
+
+instance NFData GetBotChannelAssociationResponse
+         where
diff --git a/gen/Network/AWS/LexModels/GetBotChannelAssociations.hs b/gen/Network/AWS/LexModels/GetBotChannelAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBotChannelAssociations.hs
@@ -0,0 +1,188 @@
+{-# 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.LexModels.GetBotChannelAssociations
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns a list of all of the channels associated with the specified bot.
+--
+--
+-- The @GetBotChannelAssociations@ operation requires permissions for the @lex:GetBotChannelAssociations@ action.
+--
+module Network.AWS.LexModels.GetBotChannelAssociations
+    (
+    -- * Creating a Request
+      getBotChannelAssociations
+    , GetBotChannelAssociations
+    -- * Request Lenses
+    , gbcaNameContains
+    , gbcaNextToken
+    , gbcaMaxResults
+    , gbcaBotName
+    , gbcaBotAlias
+
+    -- * Destructuring the Response
+    , getBotChannelAssociationsResponse
+    , GetBotChannelAssociationsResponse
+    -- * Response Lenses
+    , gbcasrsBotChannelAssociations
+    , gbcasrsNextToken
+    , gbcasrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBotChannelAssociations' smart constructor.
+data GetBotChannelAssociations = GetBotChannelAssociations'
+  { _gbcaNameContains :: !(Maybe Text)
+  , _gbcaNextToken    :: !(Maybe Text)
+  , _gbcaMaxResults   :: !(Maybe Nat)
+  , _gbcaBotName      :: !Text
+  , _gbcaBotAlias     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotChannelAssociations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbcaNameContains' - Substring to match in channel association names. An association will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz." To return all bot channel associations, use a hyphen ("-") as the @nameContains@ parameter.
+--
+-- * 'gbcaNextToken' - A pagination token for fetching the next page of associations. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of associations, specify the pagination token in the next request.
+--
+-- * 'gbcaMaxResults' - The maximum number of associations to return in the response. The default is 50.
+--
+-- * 'gbcaBotName' - The name of the Amazon Lex bot in the association.
+--
+-- * 'gbcaBotAlias' - An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+getBotChannelAssociations
+    :: Text -- ^ 'gbcaBotName'
+    -> Text -- ^ 'gbcaBotAlias'
+    -> GetBotChannelAssociations
+getBotChannelAssociations pBotName_ pBotAlias_ =
+  GetBotChannelAssociations'
+  { _gbcaNameContains = Nothing
+  , _gbcaNextToken = Nothing
+  , _gbcaMaxResults = Nothing
+  , _gbcaBotName = pBotName_
+  , _gbcaBotAlias = pBotAlias_
+  }
+
+
+-- | Substring to match in channel association names. An association will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz." To return all bot channel associations, use a hyphen ("-") as the @nameContains@ parameter.
+gbcaNameContains :: Lens' GetBotChannelAssociations (Maybe Text)
+gbcaNameContains = lens _gbcaNameContains (\ s a -> s{_gbcaNameContains = a});
+
+-- | A pagination token for fetching the next page of associations. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of associations, specify the pagination token in the next request.
+gbcaNextToken :: Lens' GetBotChannelAssociations (Maybe Text)
+gbcaNextToken = lens _gbcaNextToken (\ s a -> s{_gbcaNextToken = a});
+
+-- | The maximum number of associations to return in the response. The default is 50.
+gbcaMaxResults :: Lens' GetBotChannelAssociations (Maybe Natural)
+gbcaMaxResults = lens _gbcaMaxResults (\ s a -> s{_gbcaMaxResults = a}) . mapping _Nat;
+
+-- | The name of the Amazon Lex bot in the association.
+gbcaBotName :: Lens' GetBotChannelAssociations Text
+gbcaBotName = lens _gbcaBotName (\ s a -> s{_gbcaBotName = a});
+
+-- | An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+gbcaBotAlias :: Lens' GetBotChannelAssociations Text
+gbcaBotAlias = lens _gbcaBotAlias (\ s a -> s{_gbcaBotAlias = a});
+
+instance AWSRequest GetBotChannelAssociations where
+        type Rs GetBotChannelAssociations =
+             GetBotChannelAssociationsResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBotChannelAssociationsResponse' <$>
+                   (x .?> "botChannelAssociations" .!@ mempty) <*>
+                     (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBotChannelAssociations where
+
+instance NFData GetBotChannelAssociations where
+
+instance ToHeaders GetBotChannelAssociations where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBotChannelAssociations where
+        toPath GetBotChannelAssociations'{..}
+          = mconcat
+              ["/bots/", toBS _gbcaBotName, "/aliases/",
+               toBS _gbcaBotAlias, "/channels/"]
+
+instance ToQuery GetBotChannelAssociations where
+        toQuery GetBotChannelAssociations'{..}
+          = mconcat
+              ["nameContains" =: _gbcaNameContains,
+               "nextToken" =: _gbcaNextToken,
+               "maxResults" =: _gbcaMaxResults]
+
+-- | /See:/ 'getBotChannelAssociationsResponse' smart constructor.
+data GetBotChannelAssociationsResponse = GetBotChannelAssociationsResponse'
+  { _gbcasrsBotChannelAssociations :: !(Maybe [BotChannelAssociation])
+  , _gbcasrsNextToken              :: !(Maybe Text)
+  , _gbcasrsResponseStatus         :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotChannelAssociationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbcasrsBotChannelAssociations' - An array of objects, one for each association, that provides information about the Amazon Lex bot and its association with the channel.
+--
+-- * 'gbcasrsNextToken' - A pagination token that fetches the next page of associations. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of associations, specify the pagination token in the next request.
+--
+-- * 'gbcasrsResponseStatus' - -- | The response status code.
+getBotChannelAssociationsResponse
+    :: Int -- ^ 'gbcasrsResponseStatus'
+    -> GetBotChannelAssociationsResponse
+getBotChannelAssociationsResponse pResponseStatus_ =
+  GetBotChannelAssociationsResponse'
+  { _gbcasrsBotChannelAssociations = Nothing
+  , _gbcasrsNextToken = Nothing
+  , _gbcasrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | An array of objects, one for each association, that provides information about the Amazon Lex bot and its association with the channel.
+gbcasrsBotChannelAssociations :: Lens' GetBotChannelAssociationsResponse [BotChannelAssociation]
+gbcasrsBotChannelAssociations = lens _gbcasrsBotChannelAssociations (\ s a -> s{_gbcasrsBotChannelAssociations = a}) . _Default . _Coerce;
+
+-- | A pagination token that fetches the next page of associations. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of associations, specify the pagination token in the next request.
+gbcasrsNextToken :: Lens' GetBotChannelAssociationsResponse (Maybe Text)
+gbcasrsNextToken = lens _gbcasrsNextToken (\ s a -> s{_gbcasrsNextToken = a});
+
+-- | -- | The response status code.
+gbcasrsResponseStatus :: Lens' GetBotChannelAssociationsResponse Int
+gbcasrsResponseStatus = lens _gbcasrsResponseStatus (\ s a -> s{_gbcasrsResponseStatus = a});
+
+instance NFData GetBotChannelAssociationsResponse
+         where
diff --git a/gen/Network/AWS/LexModels/GetBotVersions.hs b/gen/Network/AWS/LexModels/GetBotVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBotVersions.hs
@@ -0,0 +1,164 @@
+{-# 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.LexModels.GetBotVersions
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Gets information about all of the versions of a bot.
+--
+--
+-- The @GetBotVersions@ operation returns a @BotMetadata@ object for each version of a bot. For example, if a bot has three numbered versions, the @GetBotVersions@ operation returns four @BotMetadata@ objects in the response, one for each numbered version and one for the @> LATEST@ version.
+--
+-- The @GetBotVersions@ operation always returns at least one version, the @> LATEST@ version.
+--
+-- This operation requires permissions for the @lex:GetBotVersions@ action.
+--
+module Network.AWS.LexModels.GetBotVersions
+    (
+    -- * Creating a Request
+      getBotVersions
+    , GetBotVersions
+    -- * Request Lenses
+    , gbvNextToken
+    , gbvMaxResults
+    , gbvName
+
+    -- * Destructuring the Response
+    , getBotVersionsResponse
+    , GetBotVersionsResponse
+    -- * Response Lenses
+    , gbvrsBots
+    , gbvrsNextToken
+    , gbvrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBotVersions' smart constructor.
+data GetBotVersions = GetBotVersions'
+  { _gbvNextToken  :: !(Maybe Text)
+  , _gbvMaxResults :: !(Maybe Nat)
+  , _gbvName       :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotVersions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbvNextToken' - A pagination token for fetching the next page of bot versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+--
+-- * 'gbvMaxResults' - The maximum number of bot versions to return in the response. The default is 10.
+--
+-- * 'gbvName' - The name of the bot for which versions should be returned.
+getBotVersions
+    :: Text -- ^ 'gbvName'
+    -> GetBotVersions
+getBotVersions pName_ =
+  GetBotVersions'
+  {_gbvNextToken = Nothing, _gbvMaxResults = Nothing, _gbvName = pName_}
+
+
+-- | A pagination token for fetching the next page of bot versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+gbvNextToken :: Lens' GetBotVersions (Maybe Text)
+gbvNextToken = lens _gbvNextToken (\ s a -> s{_gbvNextToken = a});
+
+-- | The maximum number of bot versions to return in the response. The default is 10.
+gbvMaxResults :: Lens' GetBotVersions (Maybe Natural)
+gbvMaxResults = lens _gbvMaxResults (\ s a -> s{_gbvMaxResults = a}) . mapping _Nat;
+
+-- | The name of the bot for which versions should be returned.
+gbvName :: Lens' GetBotVersions Text
+gbvName = lens _gbvName (\ s a -> s{_gbvName = a});
+
+instance AWSRequest GetBotVersions where
+        type Rs GetBotVersions = GetBotVersionsResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBotVersionsResponse' <$>
+                   (x .?> "bots" .!@ mempty) <*> (x .?> "nextToken") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable GetBotVersions where
+
+instance NFData GetBotVersions where
+
+instance ToHeaders GetBotVersions where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBotVersions where
+        toPath GetBotVersions'{..}
+          = mconcat ["/bots/", toBS _gbvName, "/versions/"]
+
+instance ToQuery GetBotVersions where
+        toQuery GetBotVersions'{..}
+          = mconcat
+              ["nextToken" =: _gbvNextToken,
+               "maxResults" =: _gbvMaxResults]
+
+-- | /See:/ 'getBotVersionsResponse' smart constructor.
+data GetBotVersionsResponse = GetBotVersionsResponse'
+  { _gbvrsBots           :: !(Maybe [BotMetadata])
+  , _gbvrsNextToken      :: !(Maybe Text)
+  , _gbvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbvrsBots' - An array of @BotMetadata@ objects, one for each numbered version of the bot plus one for the @> LATEST@ version.
+--
+-- * 'gbvrsNextToken' - A pagination token for fetching the next page of bot versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+--
+-- * 'gbvrsResponseStatus' - -- | The response status code.
+getBotVersionsResponse
+    :: Int -- ^ 'gbvrsResponseStatus'
+    -> GetBotVersionsResponse
+getBotVersionsResponse pResponseStatus_ =
+  GetBotVersionsResponse'
+  { _gbvrsBots = Nothing
+  , _gbvrsNextToken = Nothing
+  , _gbvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | An array of @BotMetadata@ objects, one for each numbered version of the bot plus one for the @> LATEST@ version.
+gbvrsBots :: Lens' GetBotVersionsResponse [BotMetadata]
+gbvrsBots = lens _gbvrsBots (\ s a -> s{_gbvrsBots = a}) . _Default . _Coerce;
+
+-- | A pagination token for fetching the next page of bot versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+gbvrsNextToken :: Lens' GetBotVersionsResponse (Maybe Text)
+gbvrsNextToken = lens _gbvrsNextToken (\ s a -> s{_gbvrsNextToken = a});
+
+-- | -- | The response status code.
+gbvrsResponseStatus :: Lens' GetBotVersionsResponse Int
+gbvrsResponseStatus = lens _gbvrsResponseStatus (\ s a -> s{_gbvrsResponseStatus = a});
+
+instance NFData GetBotVersionsResponse where
diff --git a/gen/Network/AWS/LexModels/GetBots.hs b/gen/Network/AWS/LexModels/GetBots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBots.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.LexModels.GetBots
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns bot information as follows:
+--
+--
+--     * If you provide the @nameContains@ field, the response includes information for the @> LATEST@ version of all bots whose name contains the specified string.
+--
+--     * If you don't specify the @nameContains@ field, the operation returns information about the @> LATEST@ version of all of your bots.
+--
+--
+--
+-- This operation requires permission for the @lex:GetBots@ action.
+--
+module Network.AWS.LexModels.GetBots
+    (
+    -- * Creating a Request
+      getBots
+    , GetBots
+    -- * Request Lenses
+    , gbNameContains
+    , gbNextToken
+    , gbMaxResults
+
+    -- * Destructuring the Response
+    , getBotsResponse
+    , GetBotsResponse
+    -- * Response Lenses
+    , gbsrsBots
+    , gbsrsNextToken
+    , gbsrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBots' smart constructor.
+data GetBots = GetBots'
+  { _gbNameContains :: !(Maybe Text)
+  , _gbNextToken    :: !(Maybe Text)
+  , _gbMaxResults   :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBots' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbNameContains' - Substring to match in bot names. A bot will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+--
+-- * 'gbNextToken' - A pagination token that fetches the next page of bots. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of bots, specify the pagination token in the next request.
+--
+-- * 'gbMaxResults' - The maximum number of bots to return in the response that the request will return. The default is 10.
+getBots
+    :: GetBots
+getBots =
+  GetBots'
+  {_gbNameContains = Nothing, _gbNextToken = Nothing, _gbMaxResults = Nothing}
+
+
+-- | Substring to match in bot names. A bot will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+gbNameContains :: Lens' GetBots (Maybe Text)
+gbNameContains = lens _gbNameContains (\ s a -> s{_gbNameContains = a});
+
+-- | A pagination token that fetches the next page of bots. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of bots, specify the pagination token in the next request.
+gbNextToken :: Lens' GetBots (Maybe Text)
+gbNextToken = lens _gbNextToken (\ s a -> s{_gbNextToken = a});
+
+-- | The maximum number of bots to return in the response that the request will return. The default is 10.
+gbMaxResults :: Lens' GetBots (Maybe Natural)
+gbMaxResults = lens _gbMaxResults (\ s a -> s{_gbMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetBots where
+        type Rs GetBots = GetBotsResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBotsResponse' <$>
+                   (x .?> "bots" .!@ mempty) <*> (x .?> "nextToken") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable GetBots where
+
+instance NFData GetBots where
+
+instance ToHeaders GetBots where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBots where
+        toPath = const "/bots/"
+
+instance ToQuery GetBots where
+        toQuery GetBots'{..}
+          = mconcat
+              ["nameContains" =: _gbNameContains,
+               "nextToken" =: _gbNextToken,
+               "maxResults" =: _gbMaxResults]
+
+-- | /See:/ 'getBotsResponse' smart constructor.
+data GetBotsResponse = GetBotsResponse'
+  { _gbsrsBots           :: !(Maybe [BotMetadata])
+  , _gbsrsNextToken      :: !(Maybe Text)
+  , _gbsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBotsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbsrsBots' - An array of @botMetadata@ objects, with one entry for each bot.
+--
+-- * 'gbsrsNextToken' - If the response is truncated, it includes a pagination token that you can specify in your next request to fetch the next page of bots.
+--
+-- * 'gbsrsResponseStatus' - -- | The response status code.
+getBotsResponse
+    :: Int -- ^ 'gbsrsResponseStatus'
+    -> GetBotsResponse
+getBotsResponse pResponseStatus_ =
+  GetBotsResponse'
+  { _gbsrsBots = Nothing
+  , _gbsrsNextToken = Nothing
+  , _gbsrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | An array of @botMetadata@ objects, with one entry for each bot.
+gbsrsBots :: Lens' GetBotsResponse [BotMetadata]
+gbsrsBots = lens _gbsrsBots (\ s a -> s{_gbsrsBots = a}) . _Default . _Coerce;
+
+-- | If the response is truncated, it includes a pagination token that you can specify in your next request to fetch the next page of bots.
+gbsrsNextToken :: Lens' GetBotsResponse (Maybe Text)
+gbsrsNextToken = lens _gbsrsNextToken (\ s a -> s{_gbsrsNextToken = a});
+
+-- | -- | The response status code.
+gbsrsResponseStatus :: Lens' GetBotsResponse Int
+gbsrsResponseStatus = lens _gbsrsResponseStatus (\ s a -> s{_gbsrsResponseStatus = a});
+
+instance NFData GetBotsResponse where
diff --git a/gen/Network/AWS/LexModels/GetBuiltinIntent.hs b/gen/Network/AWS/LexModels/GetBuiltinIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBuiltinIntent.hs
@@ -0,0 +1,149 @@
+{-# 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.LexModels.GetBuiltinIntent
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns information about a built-in intent.
+--
+--
+-- This operation requires permission for the @lex:GetBuiltinIntent@ action.
+--
+module Network.AWS.LexModels.GetBuiltinIntent
+    (
+    -- * Creating a Request
+      getBuiltinIntent
+    , GetBuiltinIntent
+    -- * Request Lenses
+    , gbiSignature
+
+    -- * Destructuring the Response
+    , getBuiltinIntentResponse
+    , GetBuiltinIntentResponse
+    -- * Response Lenses
+    , gbirsSignature
+    , gbirsSlots
+    , gbirsSupportedLocales
+    , gbirsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBuiltinIntent' smart constructor.
+newtype GetBuiltinIntent = GetBuiltinIntent'
+  { _gbiSignature :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBuiltinIntent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbiSignature' - The unique identifier for a built-in intent. To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+getBuiltinIntent
+    :: Text -- ^ 'gbiSignature'
+    -> GetBuiltinIntent
+getBuiltinIntent pSignature_ = GetBuiltinIntent' {_gbiSignature = pSignature_}
+
+
+-- | The unique identifier for a built-in intent. To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+gbiSignature :: Lens' GetBuiltinIntent Text
+gbiSignature = lens _gbiSignature (\ s a -> s{_gbiSignature = a});
+
+instance AWSRequest GetBuiltinIntent where
+        type Rs GetBuiltinIntent = GetBuiltinIntentResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBuiltinIntentResponse' <$>
+                   (x .?> "signature") <*> (x .?> "slots" .!@ mempty)
+                     <*> (x .?> "supportedLocales" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBuiltinIntent where
+
+instance NFData GetBuiltinIntent where
+
+instance ToHeaders GetBuiltinIntent where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBuiltinIntent where
+        toPath GetBuiltinIntent'{..}
+          = mconcat ["/builtins/intents/", toBS _gbiSignature]
+
+instance ToQuery GetBuiltinIntent where
+        toQuery = const mempty
+
+-- | /See:/ 'getBuiltinIntentResponse' smart constructor.
+data GetBuiltinIntentResponse = GetBuiltinIntentResponse'
+  { _gbirsSignature        :: !(Maybe Text)
+  , _gbirsSlots            :: !(Maybe [BuiltinIntentSlot])
+  , _gbirsSupportedLocales :: !(Maybe [Locale])
+  , _gbirsResponseStatus   :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBuiltinIntentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbirsSignature' - The unique identifier for a built-in intent.
+--
+-- * 'gbirsSlots' - An array of @BuiltinIntentSlot@ objects, one entry for each slot type in the intent.
+--
+-- * 'gbirsSupportedLocales' - A list of locales that the intent supports.
+--
+-- * 'gbirsResponseStatus' - -- | The response status code.
+getBuiltinIntentResponse
+    :: Int -- ^ 'gbirsResponseStatus'
+    -> GetBuiltinIntentResponse
+getBuiltinIntentResponse pResponseStatus_ =
+  GetBuiltinIntentResponse'
+  { _gbirsSignature = Nothing
+  , _gbirsSlots = Nothing
+  , _gbirsSupportedLocales = Nothing
+  , _gbirsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The unique identifier for a built-in intent.
+gbirsSignature :: Lens' GetBuiltinIntentResponse (Maybe Text)
+gbirsSignature = lens _gbirsSignature (\ s a -> s{_gbirsSignature = a});
+
+-- | An array of @BuiltinIntentSlot@ objects, one entry for each slot type in the intent.
+gbirsSlots :: Lens' GetBuiltinIntentResponse [BuiltinIntentSlot]
+gbirsSlots = lens _gbirsSlots (\ s a -> s{_gbirsSlots = a}) . _Default . _Coerce;
+
+-- | A list of locales that the intent supports.
+gbirsSupportedLocales :: Lens' GetBuiltinIntentResponse [Locale]
+gbirsSupportedLocales = lens _gbirsSupportedLocales (\ s a -> s{_gbirsSupportedLocales = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gbirsResponseStatus :: Lens' GetBuiltinIntentResponse Int
+gbirsResponseStatus = lens _gbirsResponseStatus (\ s a -> s{_gbirsResponseStatus = a});
+
+instance NFData GetBuiltinIntentResponse where
diff --git a/gen/Network/AWS/LexModels/GetBuiltinIntents.hs b/gen/Network/AWS/LexModels/GetBuiltinIntents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBuiltinIntents.hs
@@ -0,0 +1,172 @@
+{-# 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.LexModels.GetBuiltinIntents
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Gets a list of built-in intents that meet the specified criteria.
+--
+--
+-- This operation requires permission for the @lex:GetBuiltinIntents@ action.
+--
+module Network.AWS.LexModels.GetBuiltinIntents
+    (
+    -- * Creating a Request
+      getBuiltinIntents
+    , GetBuiltinIntents
+    -- * Request Lenses
+    , gbiLocale
+    , gbiNextToken
+    , gbiSignatureContains
+    , gbiMaxResults
+
+    -- * Destructuring the Response
+    , getBuiltinIntentsResponse
+    , GetBuiltinIntentsResponse
+    -- * Response Lenses
+    , grsIntents
+    , grsNextToken
+    , grsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBuiltinIntents' smart constructor.
+data GetBuiltinIntents = GetBuiltinIntents'
+  { _gbiLocale            :: !(Maybe Locale)
+  , _gbiNextToken         :: !(Maybe Text)
+  , _gbiSignatureContains :: !(Maybe Text)
+  , _gbiMaxResults        :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBuiltinIntents' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbiLocale' - A list of locales that the intent supports.
+--
+-- * 'gbiNextToken' - A pagination token that fetches the next page of intents. If this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of intents, use the pagination token in the next request.
+--
+-- * 'gbiSignatureContains' - Substring to match in built-in intent signatures. An intent will be returned if any part of its signature matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz." To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+--
+-- * 'gbiMaxResults' - The maximum number of intents to return in the response. The default is 10.
+getBuiltinIntents
+    :: GetBuiltinIntents
+getBuiltinIntents =
+  GetBuiltinIntents'
+  { _gbiLocale = Nothing
+  , _gbiNextToken = Nothing
+  , _gbiSignatureContains = Nothing
+  , _gbiMaxResults = Nothing
+  }
+
+
+-- | A list of locales that the intent supports.
+gbiLocale :: Lens' GetBuiltinIntents (Maybe Locale)
+gbiLocale = lens _gbiLocale (\ s a -> s{_gbiLocale = a});
+
+-- | A pagination token that fetches the next page of intents. If this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of intents, use the pagination token in the next request.
+gbiNextToken :: Lens' GetBuiltinIntents (Maybe Text)
+gbiNextToken = lens _gbiNextToken (\ s a -> s{_gbiNextToken = a});
+
+-- | Substring to match in built-in intent signatures. An intent will be returned if any part of its signature matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz." To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+gbiSignatureContains :: Lens' GetBuiltinIntents (Maybe Text)
+gbiSignatureContains = lens _gbiSignatureContains (\ s a -> s{_gbiSignatureContains = a});
+
+-- | The maximum number of intents to return in the response. The default is 10.
+gbiMaxResults :: Lens' GetBuiltinIntents (Maybe Natural)
+gbiMaxResults = lens _gbiMaxResults (\ s a -> s{_gbiMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetBuiltinIntents where
+        type Rs GetBuiltinIntents = GetBuiltinIntentsResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBuiltinIntentsResponse' <$>
+                   (x .?> "intents" .!@ mempty) <*> (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBuiltinIntents where
+
+instance NFData GetBuiltinIntents where
+
+instance ToHeaders GetBuiltinIntents where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBuiltinIntents where
+        toPath = const "/builtins/intents/"
+
+instance ToQuery GetBuiltinIntents where
+        toQuery GetBuiltinIntents'{..}
+          = mconcat
+              ["locale" =: _gbiLocale,
+               "nextToken" =: _gbiNextToken,
+               "signatureContains" =: _gbiSignatureContains,
+               "maxResults" =: _gbiMaxResults]
+
+-- | /See:/ 'getBuiltinIntentsResponse' smart constructor.
+data GetBuiltinIntentsResponse = GetBuiltinIntentsResponse'
+  { _grsIntents        :: !(Maybe [BuiltinIntentMetadata])
+  , _grsNextToken      :: !(Maybe Text)
+  , _grsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBuiltinIntentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grsIntents' - An array of @builtinIntentMetadata@ objects, one for each intent in the response.
+--
+-- * 'grsNextToken' - A pagination token that fetches the next page of intents. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of intents, specify the pagination token in the next request.
+--
+-- * 'grsResponseStatus' - -- | The response status code.
+getBuiltinIntentsResponse
+    :: Int -- ^ 'grsResponseStatus'
+    -> GetBuiltinIntentsResponse
+getBuiltinIntentsResponse pResponseStatus_ =
+  GetBuiltinIntentsResponse'
+  { _grsIntents = Nothing
+  , _grsNextToken = Nothing
+  , _grsResponseStatus = pResponseStatus_
+  }
+
+
+-- | An array of @builtinIntentMetadata@ objects, one for each intent in the response.
+grsIntents :: Lens' GetBuiltinIntentsResponse [BuiltinIntentMetadata]
+grsIntents = lens _grsIntents (\ s a -> s{_grsIntents = a}) . _Default . _Coerce;
+
+-- | A pagination token that fetches the next page of intents. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of intents, specify the pagination token in the next request.
+grsNextToken :: Lens' GetBuiltinIntentsResponse (Maybe Text)
+grsNextToken = lens _grsNextToken (\ s a -> s{_grsNextToken = a});
+
+-- | -- | The response status code.
+grsResponseStatus :: Lens' GetBuiltinIntentsResponse Int
+grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
+
+instance NFData GetBuiltinIntentsResponse where
diff --git a/gen/Network/AWS/LexModels/GetBuiltinSlotTypes.hs b/gen/Network/AWS/LexModels/GetBuiltinSlotTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetBuiltinSlotTypes.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.LexModels.GetBuiltinSlotTypes
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Gets a list of built-in slot types that meet the specified criteria.
+--
+--
+-- For a list of built-in slot types, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/slot-type-reference Slot Type Reference> in the /Alexa Skills Kit/ .
+--
+-- This operation requires permission for the @lex:GetBuiltInSlotTypes@ action.
+--
+module Network.AWS.LexModels.GetBuiltinSlotTypes
+    (
+    -- * Creating a Request
+      getBuiltinSlotTypes
+    , GetBuiltinSlotTypes
+    -- * Request Lenses
+    , gbstLocale
+    , gbstNextToken
+    , gbstSignatureContains
+    , gbstMaxResults
+
+    -- * Destructuring the Response
+    , getBuiltinSlotTypesResponse
+    , GetBuiltinSlotTypesResponse
+    -- * Response Lenses
+    , gbstrsNextToken
+    , gbstrsSlotTypes
+    , gbstrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getBuiltinSlotTypes' smart constructor.
+data GetBuiltinSlotTypes = GetBuiltinSlotTypes'
+  { _gbstLocale            :: !(Maybe Locale)
+  , _gbstNextToken         :: !(Maybe Text)
+  , _gbstSignatureContains :: !(Maybe Text)
+  , _gbstMaxResults        :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBuiltinSlotTypes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbstLocale' - A list of locales that the slot type supports.
+--
+-- * 'gbstNextToken' - A pagination token that fetches the next page of slot types. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of slot types, specify the pagination token in the next request.
+--
+-- * 'gbstSignatureContains' - Substring to match in built-in slot type signatures. A slot type will be returned if any part of its signature matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+--
+-- * 'gbstMaxResults' - The maximum number of slot types to return in the response. The default is 10.
+getBuiltinSlotTypes
+    :: GetBuiltinSlotTypes
+getBuiltinSlotTypes =
+  GetBuiltinSlotTypes'
+  { _gbstLocale = Nothing
+  , _gbstNextToken = Nothing
+  , _gbstSignatureContains = Nothing
+  , _gbstMaxResults = Nothing
+  }
+
+
+-- | A list of locales that the slot type supports.
+gbstLocale :: Lens' GetBuiltinSlotTypes (Maybe Locale)
+gbstLocale = lens _gbstLocale (\ s a -> s{_gbstLocale = a});
+
+-- | A pagination token that fetches the next page of slot types. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of slot types, specify the pagination token in the next request.
+gbstNextToken :: Lens' GetBuiltinSlotTypes (Maybe Text)
+gbstNextToken = lens _gbstNextToken (\ s a -> s{_gbstNextToken = a});
+
+-- | Substring to match in built-in slot type signatures. A slot type will be returned if any part of its signature matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+gbstSignatureContains :: Lens' GetBuiltinSlotTypes (Maybe Text)
+gbstSignatureContains = lens _gbstSignatureContains (\ s a -> s{_gbstSignatureContains = a});
+
+-- | The maximum number of slot types to return in the response. The default is 10.
+gbstMaxResults :: Lens' GetBuiltinSlotTypes (Maybe Natural)
+gbstMaxResults = lens _gbstMaxResults (\ s a -> s{_gbstMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetBuiltinSlotTypes where
+        type Rs GetBuiltinSlotTypes =
+             GetBuiltinSlotTypesResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetBuiltinSlotTypesResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "slotTypes" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetBuiltinSlotTypes where
+
+instance NFData GetBuiltinSlotTypes where
+
+instance ToHeaders GetBuiltinSlotTypes where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetBuiltinSlotTypes where
+        toPath = const "/builtins/slottypes/"
+
+instance ToQuery GetBuiltinSlotTypes where
+        toQuery GetBuiltinSlotTypes'{..}
+          = mconcat
+              ["locale" =: _gbstLocale,
+               "nextToken" =: _gbstNextToken,
+               "signatureContains" =: _gbstSignatureContains,
+               "maxResults" =: _gbstMaxResults]
+
+-- | /See:/ 'getBuiltinSlotTypesResponse' smart constructor.
+data GetBuiltinSlotTypesResponse = GetBuiltinSlotTypesResponse'
+  { _gbstrsNextToken      :: !(Maybe Text)
+  , _gbstrsSlotTypes      :: !(Maybe [BuiltinSlotTypeMetadata])
+  , _gbstrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBuiltinSlotTypesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbstrsNextToken' - If the response is truncated, the response includes a pagination token that you can use in your next request to fetch the next page of slot types.
+--
+-- * 'gbstrsSlotTypes' - An array of @BuiltInSlotTypeMetadata@ objects, one entry for each slot type returned.
+--
+-- * 'gbstrsResponseStatus' - -- | The response status code.
+getBuiltinSlotTypesResponse
+    :: Int -- ^ 'gbstrsResponseStatus'
+    -> GetBuiltinSlotTypesResponse
+getBuiltinSlotTypesResponse pResponseStatus_ =
+  GetBuiltinSlotTypesResponse'
+  { _gbstrsNextToken = Nothing
+  , _gbstrsSlotTypes = Nothing
+  , _gbstrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | If the response is truncated, the response includes a pagination token that you can use in your next request to fetch the next page of slot types.
+gbstrsNextToken :: Lens' GetBuiltinSlotTypesResponse (Maybe Text)
+gbstrsNextToken = lens _gbstrsNextToken (\ s a -> s{_gbstrsNextToken = a});
+
+-- | An array of @BuiltInSlotTypeMetadata@ objects, one entry for each slot type returned.
+gbstrsSlotTypes :: Lens' GetBuiltinSlotTypesResponse [BuiltinSlotTypeMetadata]
+gbstrsSlotTypes = lens _gbstrsSlotTypes (\ s a -> s{_gbstrsSlotTypes = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gbstrsResponseStatus :: Lens' GetBuiltinSlotTypesResponse Int
+gbstrsResponseStatus = lens _gbstrsResponseStatus (\ s a -> s{_gbstrsResponseStatus = a});
+
+instance NFData GetBuiltinSlotTypesResponse where
diff --git a/gen/Network/AWS/LexModels/GetExport.hs b/gen/Network/AWS/LexModels/GetExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetExport.hs
@@ -0,0 +1,223 @@
+{-# 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.LexModels.GetExport
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Exports the contents of a Amazon Lex resource in a specified format.
+--
+--
+module Network.AWS.LexModels.GetExport
+    (
+    -- * Creating a Request
+      getExport
+    , GetExport
+    -- * Request Lenses
+    , geName
+    , geVersion
+    , geResourceType
+    , geExportType
+
+    -- * Destructuring the Response
+    , getExportResponse
+    , GetExportResponse
+    -- * Response Lenses
+    , gersFailureReason
+    , gersResourceType
+    , gersExportStatus
+    , gersUrl
+    , gersExportType
+    , gersName
+    , gersVersion
+    , gersResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getExport' smart constructor.
+data GetExport = GetExport'
+  { _geName         :: !Text
+  , _geVersion      :: !Text
+  , _geResourceType :: !ResourceType
+  , _geExportType   :: !ExportType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetExport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'geName' - The name of the bot to export.
+--
+-- * 'geVersion' - The version of the bot to export.
+--
+-- * 'geResourceType' - The type of resource to export.
+--
+-- * 'geExportType' - The format of the exported data.
+getExport
+    :: Text -- ^ 'geName'
+    -> Text -- ^ 'geVersion'
+    -> ResourceType -- ^ 'geResourceType'
+    -> ExportType -- ^ 'geExportType'
+    -> GetExport
+getExport pName_ pVersion_ pResourceType_ pExportType_ =
+  GetExport'
+  { _geName = pName_
+  , _geVersion = pVersion_
+  , _geResourceType = pResourceType_
+  , _geExportType = pExportType_
+  }
+
+
+-- | The name of the bot to export.
+geName :: Lens' GetExport Text
+geName = lens _geName (\ s a -> s{_geName = a});
+
+-- | The version of the bot to export.
+geVersion :: Lens' GetExport Text
+geVersion = lens _geVersion (\ s a -> s{_geVersion = a});
+
+-- | The type of resource to export.
+geResourceType :: Lens' GetExport ResourceType
+geResourceType = lens _geResourceType (\ s a -> s{_geResourceType = a});
+
+-- | The format of the exported data.
+geExportType :: Lens' GetExport ExportType
+geExportType = lens _geExportType (\ s a -> s{_geExportType = a});
+
+instance AWSRequest GetExport where
+        type Rs GetExport = GetExportResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetExportResponse' <$>
+                   (x .?> "failureReason") <*> (x .?> "resourceType")
+                     <*> (x .?> "exportStatus")
+                     <*> (x .?> "url")
+                     <*> (x .?> "exportType")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetExport where
+
+instance NFData GetExport where
+
+instance ToHeaders GetExport where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetExport where
+        toPath = const "/exports/"
+
+instance ToQuery GetExport where
+        toQuery GetExport'{..}
+          = mconcat
+              ["name" =: _geName, "version" =: _geVersion,
+               "resourceType" =: _geResourceType,
+               "exportType" =: _geExportType]
+
+-- | /See:/ 'getExportResponse' smart constructor.
+data GetExportResponse = GetExportResponse'
+  { _gersFailureReason  :: !(Maybe Text)
+  , _gersResourceType   :: !(Maybe ResourceType)
+  , _gersExportStatus   :: !(Maybe ExportStatus)
+  , _gersUrl            :: !(Maybe Text)
+  , _gersExportType     :: !(Maybe ExportType)
+  , _gersName           :: !(Maybe Text)
+  , _gersVersion        :: !(Maybe Text)
+  , _gersResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetExportResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gersFailureReason' - If @status@ is @FAILED@ , Amazon Lex provides the reason that it failed to export the resource.
+--
+-- * 'gersResourceType' - The type of the exported resource.
+--
+-- * 'gersExportStatus' - The status of the export.      * @IN_PROGRESS@ - The export is in progress.     * @READY@ - The export is complete.     * @FAILED@ - The export could not be completed.
+--
+-- * 'gersUrl' - An S3 pre-signed URL that provides the location of the exported resource. The exported resource is a ZIP archive that contains the exported resource in JSON format. The structure of the archive may change. Your code should not rely on the archive structure.
+--
+-- * 'gersExportType' - The format of the exported data.
+--
+-- * 'gersName' - The name of the bot being exported.
+--
+-- * 'gersVersion' - The version of the bot being exported.
+--
+-- * 'gersResponseStatus' - -- | The response status code.
+getExportResponse
+    :: Int -- ^ 'gersResponseStatus'
+    -> GetExportResponse
+getExportResponse pResponseStatus_ =
+  GetExportResponse'
+  { _gersFailureReason = Nothing
+  , _gersResourceType = Nothing
+  , _gersExportStatus = Nothing
+  , _gersUrl = Nothing
+  , _gersExportType = Nothing
+  , _gersName = Nothing
+  , _gersVersion = Nothing
+  , _gersResponseStatus = pResponseStatus_
+  }
+
+
+-- | If @status@ is @FAILED@ , Amazon Lex provides the reason that it failed to export the resource.
+gersFailureReason :: Lens' GetExportResponse (Maybe Text)
+gersFailureReason = lens _gersFailureReason (\ s a -> s{_gersFailureReason = a});
+
+-- | The type of the exported resource.
+gersResourceType :: Lens' GetExportResponse (Maybe ResourceType)
+gersResourceType = lens _gersResourceType (\ s a -> s{_gersResourceType = a});
+
+-- | The status of the export.      * @IN_PROGRESS@ - The export is in progress.     * @READY@ - The export is complete.     * @FAILED@ - The export could not be completed.
+gersExportStatus :: Lens' GetExportResponse (Maybe ExportStatus)
+gersExportStatus = lens _gersExportStatus (\ s a -> s{_gersExportStatus = a});
+
+-- | An S3 pre-signed URL that provides the location of the exported resource. The exported resource is a ZIP archive that contains the exported resource in JSON format. The structure of the archive may change. Your code should not rely on the archive structure.
+gersUrl :: Lens' GetExportResponse (Maybe Text)
+gersUrl = lens _gersUrl (\ s a -> s{_gersUrl = a});
+
+-- | The format of the exported data.
+gersExportType :: Lens' GetExportResponse (Maybe ExportType)
+gersExportType = lens _gersExportType (\ s a -> s{_gersExportType = a});
+
+-- | The name of the bot being exported.
+gersName :: Lens' GetExportResponse (Maybe Text)
+gersName = lens _gersName (\ s a -> s{_gersName = a});
+
+-- | The version of the bot being exported.
+gersVersion :: Lens' GetExportResponse (Maybe Text)
+gersVersion = lens _gersVersion (\ s a -> s{_gersVersion = a});
+
+-- | -- | The response status code.
+gersResponseStatus :: Lens' GetExportResponse Int
+gersResponseStatus = lens _gersResponseStatus (\ s a -> s{_gersResponseStatus = a});
+
+instance NFData GetExportResponse where
diff --git a/gen/Network/AWS/LexModels/GetIntent.hs b/gen/Network/AWS/LexModels/GetIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetIntent.hs
@@ -0,0 +1,282 @@
+{-# 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.LexModels.GetIntent
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns information about an intent. In addition to the intent name, you must specify the intent version.
+--
+--
+-- This operation requires permissions to perform the @lex:GetIntent@ action.
+--
+module Network.AWS.LexModels.GetIntent
+    (
+    -- * Creating a Request
+      getIntent
+    , GetIntent
+    -- * Request Lenses
+    , giName
+    , giVersion
+
+    -- * Destructuring the Response
+    , getIntentResponse
+    , GetIntentResponse
+    -- * Response Lenses
+    , girsFulfillmentActivity
+    , girsSlots
+    , girsRejectionStatement
+    , girsChecksum
+    , girsConclusionStatement
+    , girsSampleUtterances
+    , girsParentIntentSignature
+    , girsCreatedDate
+    , girsName
+    , girsVersion
+    , girsFollowUpPrompt
+    , girsLastUpdatedDate
+    , girsConfirmationPrompt
+    , girsDialogCodeHook
+    , girsDescription
+    , girsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getIntent' smart constructor.
+data GetIntent = GetIntent'
+  { _giName    :: !Text
+  , _giVersion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'giName' - The name of the intent. The name is case sensitive.
+--
+-- * 'giVersion' - The version of the intent.
+getIntent
+    :: Text -- ^ 'giName'
+    -> Text -- ^ 'giVersion'
+    -> GetIntent
+getIntent pName_ pVersion_ =
+  GetIntent' {_giName = pName_, _giVersion = pVersion_}
+
+
+-- | The name of the intent. The name is case sensitive.
+giName :: Lens' GetIntent Text
+giName = lens _giName (\ s a -> s{_giName = a});
+
+-- | The version of the intent.
+giVersion :: Lens' GetIntent Text
+giVersion = lens _giVersion (\ s a -> s{_giVersion = a});
+
+instance AWSRequest GetIntent where
+        type Rs GetIntent = GetIntentResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetIntentResponse' <$>
+                   (x .?> "fulfillmentActivity") <*>
+                     (x .?> "slots" .!@ mempty)
+                     <*> (x .?> "rejectionStatement")
+                     <*> (x .?> "checksum")
+                     <*> (x .?> "conclusionStatement")
+                     <*> (x .?> "sampleUtterances" .!@ mempty)
+                     <*> (x .?> "parentIntentSignature")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "followUpPrompt")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "confirmationPrompt")
+                     <*> (x .?> "dialogCodeHook")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetIntent where
+
+instance NFData GetIntent where
+
+instance ToHeaders GetIntent where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetIntent where
+        toPath GetIntent'{..}
+          = mconcat
+              ["/intents/", toBS _giName, "/versions/",
+               toBS _giVersion]
+
+instance ToQuery GetIntent where
+        toQuery = const mempty
+
+-- | /See:/ 'getIntentResponse' smart constructor.
+data GetIntentResponse = GetIntentResponse'
+  { _girsFulfillmentActivity   :: !(Maybe FulfillmentActivity)
+  , _girsSlots                 :: !(Maybe [Slot])
+  , _girsRejectionStatement    :: !(Maybe Statement)
+  , _girsChecksum              :: !(Maybe Text)
+  , _girsConclusionStatement   :: !(Maybe Statement)
+  , _girsSampleUtterances      :: !(Maybe [Text])
+  , _girsParentIntentSignature :: !(Maybe Text)
+  , _girsCreatedDate           :: !(Maybe POSIX)
+  , _girsName                  :: !(Maybe Text)
+  , _girsVersion               :: !(Maybe Text)
+  , _girsFollowUpPrompt        :: !(Maybe FollowUpPrompt)
+  , _girsLastUpdatedDate       :: !(Maybe POSIX)
+  , _girsConfirmationPrompt    :: !(Maybe Prompt)
+  , _girsDialogCodeHook        :: !(Maybe CodeHook)
+  , _girsDescription           :: !(Maybe Text)
+  , _girsResponseStatus        :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'girsFulfillmentActivity' - Describes how the intent is fulfilled. For more information, see 'PutIntent' .
+--
+-- * 'girsSlots' - An array of intent slots configured for the intent.
+--
+-- * 'girsRejectionStatement' - If the user answers "no" to the question defined in @confirmationPrompt@ , Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+--
+-- * 'girsChecksum' - Checksum of the intent.
+--
+-- * 'girsConclusionStatement' - After the Lambda function specified in the @fulfillmentActivity@ element fulfills the intent, Amazon Lex conveys this statement to the user.
+--
+-- * 'girsSampleUtterances' - An array of sample utterances configured for the intent.
+--
+-- * 'girsParentIntentSignature' - A unique identifier for a built-in intent.
+--
+-- * 'girsCreatedDate' - The date that the intent was created.
+--
+-- * 'girsName' - The name of the intent.
+--
+-- * 'girsVersion' - The version of the intent.
+--
+-- * 'girsFollowUpPrompt' - If defined in the bot, Amazon Lex uses this prompt to solicit additional user activity after the intent is fulfilled. For more information, see 'PutIntent' .
+--
+-- * 'girsLastUpdatedDate' - The date that the intent was updated. When you create a resource, the creation date and the last updated date are the same.
+--
+-- * 'girsConfirmationPrompt' - If defined in the bot, Amazon Lex uses prompt to confirm the intent before fulfilling the user's request. For more information, see 'PutIntent' .
+--
+-- * 'girsDialogCodeHook' - If defined in the bot, Amazon Amazon Lex invokes this Lambda function for each user input. For more information, see 'PutIntent' .
+--
+-- * 'girsDescription' - A description of the intent.
+--
+-- * 'girsResponseStatus' - -- | The response status code.
+getIntentResponse
+    :: Int -- ^ 'girsResponseStatus'
+    -> GetIntentResponse
+getIntentResponse pResponseStatus_ =
+  GetIntentResponse'
+  { _girsFulfillmentActivity = Nothing
+  , _girsSlots = Nothing
+  , _girsRejectionStatement = Nothing
+  , _girsChecksum = Nothing
+  , _girsConclusionStatement = Nothing
+  , _girsSampleUtterances = Nothing
+  , _girsParentIntentSignature = Nothing
+  , _girsCreatedDate = Nothing
+  , _girsName = Nothing
+  , _girsVersion = Nothing
+  , _girsFollowUpPrompt = Nothing
+  , _girsLastUpdatedDate = Nothing
+  , _girsConfirmationPrompt = Nothing
+  , _girsDialogCodeHook = Nothing
+  , _girsDescription = Nothing
+  , _girsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Describes how the intent is fulfilled. For more information, see 'PutIntent' .
+girsFulfillmentActivity :: Lens' GetIntentResponse (Maybe FulfillmentActivity)
+girsFulfillmentActivity = lens _girsFulfillmentActivity (\ s a -> s{_girsFulfillmentActivity = a});
+
+-- | An array of intent slots configured for the intent.
+girsSlots :: Lens' GetIntentResponse [Slot]
+girsSlots = lens _girsSlots (\ s a -> s{_girsSlots = a}) . _Default . _Coerce;
+
+-- | If the user answers "no" to the question defined in @confirmationPrompt@ , Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+girsRejectionStatement :: Lens' GetIntentResponse (Maybe Statement)
+girsRejectionStatement = lens _girsRejectionStatement (\ s a -> s{_girsRejectionStatement = a});
+
+-- | Checksum of the intent.
+girsChecksum :: Lens' GetIntentResponse (Maybe Text)
+girsChecksum = lens _girsChecksum (\ s a -> s{_girsChecksum = a});
+
+-- | After the Lambda function specified in the @fulfillmentActivity@ element fulfills the intent, Amazon Lex conveys this statement to the user.
+girsConclusionStatement :: Lens' GetIntentResponse (Maybe Statement)
+girsConclusionStatement = lens _girsConclusionStatement (\ s a -> s{_girsConclusionStatement = a});
+
+-- | An array of sample utterances configured for the intent.
+girsSampleUtterances :: Lens' GetIntentResponse [Text]
+girsSampleUtterances = lens _girsSampleUtterances (\ s a -> s{_girsSampleUtterances = a}) . _Default . _Coerce;
+
+-- | A unique identifier for a built-in intent.
+girsParentIntentSignature :: Lens' GetIntentResponse (Maybe Text)
+girsParentIntentSignature = lens _girsParentIntentSignature (\ s a -> s{_girsParentIntentSignature = a});
+
+-- | The date that the intent was created.
+girsCreatedDate :: Lens' GetIntentResponse (Maybe UTCTime)
+girsCreatedDate = lens _girsCreatedDate (\ s a -> s{_girsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the intent.
+girsName :: Lens' GetIntentResponse (Maybe Text)
+girsName = lens _girsName (\ s a -> s{_girsName = a});
+
+-- | The version of the intent.
+girsVersion :: Lens' GetIntentResponse (Maybe Text)
+girsVersion = lens _girsVersion (\ s a -> s{_girsVersion = a});
+
+-- | If defined in the bot, Amazon Lex uses this prompt to solicit additional user activity after the intent is fulfilled. For more information, see 'PutIntent' .
+girsFollowUpPrompt :: Lens' GetIntentResponse (Maybe FollowUpPrompt)
+girsFollowUpPrompt = lens _girsFollowUpPrompt (\ s a -> s{_girsFollowUpPrompt = a});
+
+-- | The date that the intent was updated. When you create a resource, the creation date and the last updated date are the same.
+girsLastUpdatedDate :: Lens' GetIntentResponse (Maybe UTCTime)
+girsLastUpdatedDate = lens _girsLastUpdatedDate (\ s a -> s{_girsLastUpdatedDate = a}) . mapping _Time;
+
+-- | If defined in the bot, Amazon Lex uses prompt to confirm the intent before fulfilling the user's request. For more information, see 'PutIntent' .
+girsConfirmationPrompt :: Lens' GetIntentResponse (Maybe Prompt)
+girsConfirmationPrompt = lens _girsConfirmationPrompt (\ s a -> s{_girsConfirmationPrompt = a});
+
+-- | If defined in the bot, Amazon Amazon Lex invokes this Lambda function for each user input. For more information, see 'PutIntent' .
+girsDialogCodeHook :: Lens' GetIntentResponse (Maybe CodeHook)
+girsDialogCodeHook = lens _girsDialogCodeHook (\ s a -> s{_girsDialogCodeHook = a});
+
+-- | A description of the intent.
+girsDescription :: Lens' GetIntentResponse (Maybe Text)
+girsDescription = lens _girsDescription (\ s a -> s{_girsDescription = a});
+
+-- | -- | The response status code.
+girsResponseStatus :: Lens' GetIntentResponse Int
+girsResponseStatus = lens _girsResponseStatus (\ s a -> s{_girsResponseStatus = a});
+
+instance NFData GetIntentResponse where
diff --git a/gen/Network/AWS/LexModels/GetIntentVersions.hs b/gen/Network/AWS/LexModels/GetIntentVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetIntentVersions.hs
@@ -0,0 +1,164 @@
+{-# 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.LexModels.GetIntentVersions
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Gets information about all of the versions of an intent.
+--
+--
+-- The @GetIntentVersions@ operation returns an @IntentMetadata@ object for each version of an intent. For example, if an intent has three numbered versions, the @GetIntentVersions@ operation returns four @IntentMetadata@ objects in the response, one for each numbered version and one for the @> LATEST@ version.
+--
+-- The @GetIntentVersions@ operation always returns at least one version, the @> LATEST@ version.
+--
+-- This operation requires permissions for the @lex:GetIntentVersions@ action.
+--
+module Network.AWS.LexModels.GetIntentVersions
+    (
+    -- * Creating a Request
+      getIntentVersions
+    , GetIntentVersions
+    -- * Request Lenses
+    , givNextToken
+    , givMaxResults
+    , givName
+
+    -- * Destructuring the Response
+    , getIntentVersionsResponse
+    , GetIntentVersionsResponse
+    -- * Response Lenses
+    , givrsIntents
+    , givrsNextToken
+    , givrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getIntentVersions' smart constructor.
+data GetIntentVersions = GetIntentVersions'
+  { _givNextToken  :: !(Maybe Text)
+  , _givMaxResults :: !(Maybe Nat)
+  , _givName       :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntentVersions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givNextToken' - A pagination token for fetching the next page of intent versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+--
+-- * 'givMaxResults' - The maximum number of intent versions to return in the response. The default is 10.
+--
+-- * 'givName' - The name of the intent for which versions should be returned.
+getIntentVersions
+    :: Text -- ^ 'givName'
+    -> GetIntentVersions
+getIntentVersions pName_ =
+  GetIntentVersions'
+  {_givNextToken = Nothing, _givMaxResults = Nothing, _givName = pName_}
+
+
+-- | A pagination token for fetching the next page of intent versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+givNextToken :: Lens' GetIntentVersions (Maybe Text)
+givNextToken = lens _givNextToken (\ s a -> s{_givNextToken = a});
+
+-- | The maximum number of intent versions to return in the response. The default is 10.
+givMaxResults :: Lens' GetIntentVersions (Maybe Natural)
+givMaxResults = lens _givMaxResults (\ s a -> s{_givMaxResults = a}) . mapping _Nat;
+
+-- | The name of the intent for which versions should be returned.
+givName :: Lens' GetIntentVersions Text
+givName = lens _givName (\ s a -> s{_givName = a});
+
+instance AWSRequest GetIntentVersions where
+        type Rs GetIntentVersions = GetIntentVersionsResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetIntentVersionsResponse' <$>
+                   (x .?> "intents" .!@ mempty) <*> (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetIntentVersions where
+
+instance NFData GetIntentVersions where
+
+instance ToHeaders GetIntentVersions where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetIntentVersions where
+        toPath GetIntentVersions'{..}
+          = mconcat ["/intents/", toBS _givName, "/versions/"]
+
+instance ToQuery GetIntentVersions where
+        toQuery GetIntentVersions'{..}
+          = mconcat
+              ["nextToken" =: _givNextToken,
+               "maxResults" =: _givMaxResults]
+
+-- | /See:/ 'getIntentVersionsResponse' smart constructor.
+data GetIntentVersionsResponse = GetIntentVersionsResponse'
+  { _givrsIntents        :: !(Maybe [IntentMetadata])
+  , _givrsNextToken      :: !(Maybe Text)
+  , _givrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntentVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'givrsIntents' - An array of @IntentMetadata@ objects, one for each numbered version of the intent plus one for the @> LATEST@ version.
+--
+-- * 'givrsNextToken' - A pagination token for fetching the next page of intent versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+--
+-- * 'givrsResponseStatus' - -- | The response status code.
+getIntentVersionsResponse
+    :: Int -- ^ 'givrsResponseStatus'
+    -> GetIntentVersionsResponse
+getIntentVersionsResponse pResponseStatus_ =
+  GetIntentVersionsResponse'
+  { _givrsIntents = Nothing
+  , _givrsNextToken = Nothing
+  , _givrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | An array of @IntentMetadata@ objects, one for each numbered version of the intent plus one for the @> LATEST@ version.
+givrsIntents :: Lens' GetIntentVersionsResponse [IntentMetadata]
+givrsIntents = lens _givrsIntents (\ s a -> s{_givrsIntents = a}) . _Default . _Coerce;
+
+-- | A pagination token for fetching the next page of intent versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+givrsNextToken :: Lens' GetIntentVersionsResponse (Maybe Text)
+givrsNextToken = lens _givrsNextToken (\ s a -> s{_givrsNextToken = a});
+
+-- | -- | The response status code.
+givrsResponseStatus :: Lens' GetIntentVersionsResponse Int
+givrsResponseStatus = lens _givrsResponseStatus (\ s a -> s{_givrsResponseStatus = a});
+
+instance NFData GetIntentVersionsResponse where
diff --git a/gen/Network/AWS/LexModels/GetIntents.hs b/gen/Network/AWS/LexModels/GetIntents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetIntents.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.LexModels.GetIntents
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns intent information as follows:
+--
+--
+--     * If you specify the @nameContains@ field, returns the @> LATEST@ version of all intents that contain the specified string.
+--
+--     * If you don't specify the @nameContains@ field, returns information about the @> LATEST@ version of all intents.
+--
+--
+--
+-- The operation requires permission for the @lex:GetIntents@ action.
+--
+module Network.AWS.LexModels.GetIntents
+    (
+    -- * Creating a Request
+      getIntents
+    , GetIntents
+    -- * Request Lenses
+    , giNameContains
+    , giNextToken
+    , giMaxResults
+
+    -- * Destructuring the Response
+    , getIntentsResponse
+    , GetIntentsResponse
+    -- * Response Lenses
+    , gisrsIntents
+    , gisrsNextToken
+    , gisrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getIntents' smart constructor.
+data GetIntents = GetIntents'
+  { _giNameContains :: !(Maybe Text)
+  , _giNextToken    :: !(Maybe Text)
+  , _giMaxResults   :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntents' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'giNameContains' - Substring to match in intent names. An intent will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+--
+-- * 'giNextToken' - A pagination token that fetches the next page of intents. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of intents, specify the pagination token in the next request.
+--
+-- * 'giMaxResults' - The maximum number of intents to return in the response. The default is 10.
+getIntents
+    :: GetIntents
+getIntents =
+  GetIntents'
+  {_giNameContains = Nothing, _giNextToken = Nothing, _giMaxResults = Nothing}
+
+
+-- | Substring to match in intent names. An intent will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+giNameContains :: Lens' GetIntents (Maybe Text)
+giNameContains = lens _giNameContains (\ s a -> s{_giNameContains = a});
+
+-- | A pagination token that fetches the next page of intents. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of intents, specify the pagination token in the next request.
+giNextToken :: Lens' GetIntents (Maybe Text)
+giNextToken = lens _giNextToken (\ s a -> s{_giNextToken = a});
+
+-- | The maximum number of intents to return in the response. The default is 10.
+giMaxResults :: Lens' GetIntents (Maybe Natural)
+giMaxResults = lens _giMaxResults (\ s a -> s{_giMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetIntents where
+        type Rs GetIntents = GetIntentsResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetIntentsResponse' <$>
+                   (x .?> "intents" .!@ mempty) <*> (x .?> "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetIntents where
+
+instance NFData GetIntents where
+
+instance ToHeaders GetIntents where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetIntents where
+        toPath = const "/intents/"
+
+instance ToQuery GetIntents where
+        toQuery GetIntents'{..}
+          = mconcat
+              ["nameContains" =: _giNameContains,
+               "nextToken" =: _giNextToken,
+               "maxResults" =: _giMaxResults]
+
+-- | /See:/ 'getIntentsResponse' smart constructor.
+data GetIntentsResponse = GetIntentsResponse'
+  { _gisrsIntents        :: !(Maybe [IntentMetadata])
+  , _gisrsNextToken      :: !(Maybe Text)
+  , _gisrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetIntentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gisrsIntents' - An array of @Intent@ objects. For more information, see 'PutBot' .
+--
+-- * 'gisrsNextToken' - If the response is truncated, the response includes a pagination token that you can specify in your next request to fetch the next page of intents.
+--
+-- * 'gisrsResponseStatus' - -- | The response status code.
+getIntentsResponse
+    :: Int -- ^ 'gisrsResponseStatus'
+    -> GetIntentsResponse
+getIntentsResponse pResponseStatus_ =
+  GetIntentsResponse'
+  { _gisrsIntents = Nothing
+  , _gisrsNextToken = Nothing
+  , _gisrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | An array of @Intent@ objects. For more information, see 'PutBot' .
+gisrsIntents :: Lens' GetIntentsResponse [IntentMetadata]
+gisrsIntents = lens _gisrsIntents (\ s a -> s{_gisrsIntents = a}) . _Default . _Coerce;
+
+-- | If the response is truncated, the response includes a pagination token that you can specify in your next request to fetch the next page of intents.
+gisrsNextToken :: Lens' GetIntentsResponse (Maybe Text)
+gisrsNextToken = lens _gisrsNextToken (\ s a -> s{_gisrsNextToken = a});
+
+-- | -- | The response status code.
+gisrsResponseStatus :: Lens' GetIntentsResponse Int
+gisrsResponseStatus = lens _gisrsResponseStatus (\ s a -> s{_gisrsResponseStatus = a});
+
+instance NFData GetIntentsResponse where
diff --git a/gen/Network/AWS/LexModels/GetSlotType.hs b/gen/Network/AWS/LexModels/GetSlotType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetSlotType.hs
@@ -0,0 +1,212 @@
+{-# 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.LexModels.GetSlotType
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns information about a specific version of a slot type. In addition to specifying the slot type name, you must specify the slot type version.
+--
+--
+-- This operation requires permissions for the @lex:GetSlotType@ action.
+--
+module Network.AWS.LexModels.GetSlotType
+    (
+    -- * Creating a Request
+      getSlotType
+    , GetSlotType
+    -- * Request Lenses
+    , gstName
+    , gstVersion
+
+    -- * Destructuring the Response
+    , getSlotTypeResponse
+    , GetSlotTypeResponse
+    -- * Response Lenses
+    , getrsChecksum
+    , getrsValueSelectionStrategy
+    , getrsCreatedDate
+    , getrsName
+    , getrsVersion
+    , getrsLastUpdatedDate
+    , getrsDescription
+    , getrsEnumerationValues
+    , getrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getSlotType' smart constructor.
+data GetSlotType = GetSlotType'
+  { _gstName    :: !Text
+  , _gstVersion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSlotType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gstName' - The name of the slot type. The name is case sensitive.
+--
+-- * 'gstVersion' - The version of the slot type.
+getSlotType
+    :: Text -- ^ 'gstName'
+    -> Text -- ^ 'gstVersion'
+    -> GetSlotType
+getSlotType pName_ pVersion_ =
+  GetSlotType' {_gstName = pName_, _gstVersion = pVersion_}
+
+
+-- | The name of the slot type. The name is case sensitive.
+gstName :: Lens' GetSlotType Text
+gstName = lens _gstName (\ s a -> s{_gstName = a});
+
+-- | The version of the slot type.
+gstVersion :: Lens' GetSlotType Text
+gstVersion = lens _gstVersion (\ s a -> s{_gstVersion = a});
+
+instance AWSRequest GetSlotType where
+        type Rs GetSlotType = GetSlotTypeResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetSlotTypeResponse' <$>
+                   (x .?> "checksum") <*>
+                     (x .?> "valueSelectionStrategy")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "description")
+                     <*> (x .?> "enumerationValues")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetSlotType where
+
+instance NFData GetSlotType where
+
+instance ToHeaders GetSlotType where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetSlotType where
+        toPath GetSlotType'{..}
+          = mconcat
+              ["/slottypes/", toBS _gstName, "/versions/",
+               toBS _gstVersion]
+
+instance ToQuery GetSlotType where
+        toQuery = const mempty
+
+-- | /See:/ 'getSlotTypeResponse' smart constructor.
+data GetSlotTypeResponse = GetSlotTypeResponse'
+  { _getrsChecksum               :: !(Maybe Text)
+  , _getrsValueSelectionStrategy :: !(Maybe SlotValueSelectionStrategy)
+  , _getrsCreatedDate            :: !(Maybe POSIX)
+  , _getrsName                   :: !(Maybe Text)
+  , _getrsVersion                :: !(Maybe Text)
+  , _getrsLastUpdatedDate        :: !(Maybe POSIX)
+  , _getrsDescription            :: !(Maybe Text)
+  , _getrsEnumerationValues      :: !(Maybe (List1 EnumerationValue))
+  , _getrsResponseStatus         :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSlotTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'getrsChecksum' - Checksum of the @> LATEST@ version of the slot type.
+--
+-- * 'getrsValueSelectionStrategy' - The strategy that Amazon Lex uses to determine the value of the slot. For more information, see 'PutSlotType' .
+--
+-- * 'getrsCreatedDate' - The date that the slot type was created.
+--
+-- * 'getrsName' - The name of the slot type.
+--
+-- * 'getrsVersion' - The version of the slot type.
+--
+-- * 'getrsLastUpdatedDate' - The date that the slot type was updated. When you create a resource, the creation date and last update date are the same.
+--
+-- * 'getrsDescription' - A description of the slot type.
+--
+-- * 'getrsEnumerationValues' - A list of @EnumerationValue@ objects that defines the values that the slot type can take.
+--
+-- * 'getrsResponseStatus' - -- | The response status code.
+getSlotTypeResponse
+    :: Int -- ^ 'getrsResponseStatus'
+    -> GetSlotTypeResponse
+getSlotTypeResponse pResponseStatus_ =
+  GetSlotTypeResponse'
+  { _getrsChecksum = Nothing
+  , _getrsValueSelectionStrategy = Nothing
+  , _getrsCreatedDate = Nothing
+  , _getrsName = Nothing
+  , _getrsVersion = Nothing
+  , _getrsLastUpdatedDate = Nothing
+  , _getrsDescription = Nothing
+  , _getrsEnumerationValues = Nothing
+  , _getrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Checksum of the @> LATEST@ version of the slot type.
+getrsChecksum :: Lens' GetSlotTypeResponse (Maybe Text)
+getrsChecksum = lens _getrsChecksum (\ s a -> s{_getrsChecksum = a});
+
+-- | The strategy that Amazon Lex uses to determine the value of the slot. For more information, see 'PutSlotType' .
+getrsValueSelectionStrategy :: Lens' GetSlotTypeResponse (Maybe SlotValueSelectionStrategy)
+getrsValueSelectionStrategy = lens _getrsValueSelectionStrategy (\ s a -> s{_getrsValueSelectionStrategy = a});
+
+-- | The date that the slot type was created.
+getrsCreatedDate :: Lens' GetSlotTypeResponse (Maybe UTCTime)
+getrsCreatedDate = lens _getrsCreatedDate (\ s a -> s{_getrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the slot type.
+getrsName :: Lens' GetSlotTypeResponse (Maybe Text)
+getrsName = lens _getrsName (\ s a -> s{_getrsName = a});
+
+-- | The version of the slot type.
+getrsVersion :: Lens' GetSlotTypeResponse (Maybe Text)
+getrsVersion = lens _getrsVersion (\ s a -> s{_getrsVersion = a});
+
+-- | The date that the slot type was updated. When you create a resource, the creation date and last update date are the same.
+getrsLastUpdatedDate :: Lens' GetSlotTypeResponse (Maybe UTCTime)
+getrsLastUpdatedDate = lens _getrsLastUpdatedDate (\ s a -> s{_getrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the slot type.
+getrsDescription :: Lens' GetSlotTypeResponse (Maybe Text)
+getrsDescription = lens _getrsDescription (\ s a -> s{_getrsDescription = a});
+
+-- | A list of @EnumerationValue@ objects that defines the values that the slot type can take.
+getrsEnumerationValues :: Lens' GetSlotTypeResponse (Maybe (NonEmpty EnumerationValue))
+getrsEnumerationValues = lens _getrsEnumerationValues (\ s a -> s{_getrsEnumerationValues = a}) . mapping _List1;
+
+-- | -- | The response status code.
+getrsResponseStatus :: Lens' GetSlotTypeResponse Int
+getrsResponseStatus = lens _getrsResponseStatus (\ s a -> s{_getrsResponseStatus = a});
+
+instance NFData GetSlotTypeResponse where
diff --git a/gen/Network/AWS/LexModels/GetSlotTypeVersions.hs b/gen/Network/AWS/LexModels/GetSlotTypeVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetSlotTypeVersions.hs
@@ -0,0 +1,167 @@
+{-# 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.LexModels.GetSlotTypeVersions
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Gets information about all versions of a slot type.
+--
+--
+-- The @GetSlotTypeVersions@ operation returns a @SlotTypeMetadata@ object for each version of a slot type. For example, if a slot type has three numbered versions, the @GetSlotTypeVersions@ operation returns four @SlotTypeMetadata@ objects in the response, one for each numbered version and one for the @> LATEST@ version.
+--
+-- The @GetSlotTypeVersions@ operation always returns at least one version, the @> LATEST@ version.
+--
+-- This operation requires permissions for the @lex:GetSlotTypeVersions@ action.
+--
+module Network.AWS.LexModels.GetSlotTypeVersions
+    (
+    -- * Creating a Request
+      getSlotTypeVersions
+    , GetSlotTypeVersions
+    -- * Request Lenses
+    , gstvNextToken
+    , gstvMaxResults
+    , gstvName
+
+    -- * Destructuring the Response
+    , getSlotTypeVersionsResponse
+    , GetSlotTypeVersionsResponse
+    -- * Response Lenses
+    , gstvrsNextToken
+    , gstvrsSlotTypes
+    , gstvrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getSlotTypeVersions' smart constructor.
+data GetSlotTypeVersions = GetSlotTypeVersions'
+  { _gstvNextToken  :: !(Maybe Text)
+  , _gstvMaxResults :: !(Maybe Nat)
+  , _gstvName       :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSlotTypeVersions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gstvNextToken' - A pagination token for fetching the next page of slot type versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+--
+-- * 'gstvMaxResults' - The maximum number of slot type versions to return in the response. The default is 10.
+--
+-- * 'gstvName' - The name of the slot type for which versions should be returned.
+getSlotTypeVersions
+    :: Text -- ^ 'gstvName'
+    -> GetSlotTypeVersions
+getSlotTypeVersions pName_ =
+  GetSlotTypeVersions'
+  {_gstvNextToken = Nothing, _gstvMaxResults = Nothing, _gstvName = pName_}
+
+
+-- | A pagination token for fetching the next page of slot type versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+gstvNextToken :: Lens' GetSlotTypeVersions (Maybe Text)
+gstvNextToken = lens _gstvNextToken (\ s a -> s{_gstvNextToken = a});
+
+-- | The maximum number of slot type versions to return in the response. The default is 10.
+gstvMaxResults :: Lens' GetSlotTypeVersions (Maybe Natural)
+gstvMaxResults = lens _gstvMaxResults (\ s a -> s{_gstvMaxResults = a}) . mapping _Nat;
+
+-- | The name of the slot type for which versions should be returned.
+gstvName :: Lens' GetSlotTypeVersions Text
+gstvName = lens _gstvName (\ s a -> s{_gstvName = a});
+
+instance AWSRequest GetSlotTypeVersions where
+        type Rs GetSlotTypeVersions =
+             GetSlotTypeVersionsResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetSlotTypeVersionsResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "slotTypes" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetSlotTypeVersions where
+
+instance NFData GetSlotTypeVersions where
+
+instance ToHeaders GetSlotTypeVersions where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetSlotTypeVersions where
+        toPath GetSlotTypeVersions'{..}
+          = mconcat
+              ["/slottypes/", toBS _gstvName, "/versions/"]
+
+instance ToQuery GetSlotTypeVersions where
+        toQuery GetSlotTypeVersions'{..}
+          = mconcat
+              ["nextToken" =: _gstvNextToken,
+               "maxResults" =: _gstvMaxResults]
+
+-- | /See:/ 'getSlotTypeVersionsResponse' smart constructor.
+data GetSlotTypeVersionsResponse = GetSlotTypeVersionsResponse'
+  { _gstvrsNextToken      :: !(Maybe Text)
+  , _gstvrsSlotTypes      :: !(Maybe [SlotTypeMetadata])
+  , _gstvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSlotTypeVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gstvrsNextToken' - A pagination token for fetching the next page of slot type versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+--
+-- * 'gstvrsSlotTypes' - An array of @SlotTypeMetadata@ objects, one for each numbered version of the slot type plus one for the @> LATEST@ version.
+--
+-- * 'gstvrsResponseStatus' - -- | The response status code.
+getSlotTypeVersionsResponse
+    :: Int -- ^ 'gstvrsResponseStatus'
+    -> GetSlotTypeVersionsResponse
+getSlotTypeVersionsResponse pResponseStatus_ =
+  GetSlotTypeVersionsResponse'
+  { _gstvrsNextToken = Nothing
+  , _gstvrsSlotTypes = Nothing
+  , _gstvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A pagination token for fetching the next page of slot type versions. If the response to this call is truncated, Amazon Lex returns a pagination token in the response. To fetch the next page of versions, specify the pagination token in the next request.
+gstvrsNextToken :: Lens' GetSlotTypeVersionsResponse (Maybe Text)
+gstvrsNextToken = lens _gstvrsNextToken (\ s a -> s{_gstvrsNextToken = a});
+
+-- | An array of @SlotTypeMetadata@ objects, one for each numbered version of the slot type plus one for the @> LATEST@ version.
+gstvrsSlotTypes :: Lens' GetSlotTypeVersionsResponse [SlotTypeMetadata]
+gstvrsSlotTypes = lens _gstvrsSlotTypes (\ s a -> s{_gstvrsSlotTypes = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gstvrsResponseStatus :: Lens' GetSlotTypeVersionsResponse Int
+gstvrsResponseStatus = lens _gstvrsResponseStatus (\ s a -> s{_gstvrsResponseStatus = a});
+
+instance NFData GetSlotTypeVersionsResponse where
diff --git a/gen/Network/AWS/LexModels/GetSlotTypes.hs b/gen/Network/AWS/LexModels/GetSlotTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetSlotTypes.hs
@@ -0,0 +1,169 @@
+{-# 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.LexModels.GetSlotTypes
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Returns slot type information as follows:
+--
+--
+--     * If you specify the @nameContains@ field, returns the @> LATEST@ version of all slot types that contain the specified string.
+--
+--     * If you don't specify the @nameContains@ field, returns information about the @> LATEST@ version of all slot types.
+--
+--
+--
+-- The operation requires permission for the @lex:GetSlotTypes@ action.
+--
+module Network.AWS.LexModels.GetSlotTypes
+    (
+    -- * Creating a Request
+      getSlotTypes
+    , GetSlotTypes
+    -- * Request Lenses
+    , gstNameContains
+    , gstNextToken
+    , gstMaxResults
+
+    -- * Destructuring the Response
+    , getSlotTypesResponse
+    , GetSlotTypesResponse
+    -- * Response Lenses
+    , gstrsNextToken
+    , gstrsSlotTypes
+    , gstrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getSlotTypes' smart constructor.
+data GetSlotTypes = GetSlotTypes'
+  { _gstNameContains :: !(Maybe Text)
+  , _gstNextToken    :: !(Maybe Text)
+  , _gstMaxResults   :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSlotTypes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gstNameContains' - Substring to match in slot type names. A slot type will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+--
+-- * 'gstNextToken' - A pagination token that fetches the next page of slot types. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch next page of slot types, specify the pagination token in the next request.
+--
+-- * 'gstMaxResults' - The maximum number of slot types to return in the response. The default is 10.
+getSlotTypes
+    :: GetSlotTypes
+getSlotTypes =
+  GetSlotTypes'
+  { _gstNameContains = Nothing
+  , _gstNextToken = Nothing
+  , _gstMaxResults = Nothing
+  }
+
+
+-- | Substring to match in slot type names. A slot type will be returned if any part of its name matches the substring. For example, "xyz" matches both "xyzabc" and "abcxyz."
+gstNameContains :: Lens' GetSlotTypes (Maybe Text)
+gstNameContains = lens _gstNameContains (\ s a -> s{_gstNameContains = a});
+
+-- | A pagination token that fetches the next page of slot types. If the response to this API call is truncated, Amazon Lex returns a pagination token in the response. To fetch next page of slot types, specify the pagination token in the next request.
+gstNextToken :: Lens' GetSlotTypes (Maybe Text)
+gstNextToken = lens _gstNextToken (\ s a -> s{_gstNextToken = a});
+
+-- | The maximum number of slot types to return in the response. The default is 10.
+gstMaxResults :: Lens' GetSlotTypes (Maybe Natural)
+gstMaxResults = lens _gstMaxResults (\ s a -> s{_gstMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetSlotTypes where
+        type Rs GetSlotTypes = GetSlotTypesResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetSlotTypesResponse' <$>
+                   (x .?> "nextToken") <*>
+                     (x .?> "slotTypes" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetSlotTypes where
+
+instance NFData GetSlotTypes where
+
+instance ToHeaders GetSlotTypes where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetSlotTypes where
+        toPath = const "/slottypes/"
+
+instance ToQuery GetSlotTypes where
+        toQuery GetSlotTypes'{..}
+          = mconcat
+              ["nameContains" =: _gstNameContains,
+               "nextToken" =: _gstNextToken,
+               "maxResults" =: _gstMaxResults]
+
+-- | /See:/ 'getSlotTypesResponse' smart constructor.
+data GetSlotTypesResponse = GetSlotTypesResponse'
+  { _gstrsNextToken      :: !(Maybe Text)
+  , _gstrsSlotTypes      :: !(Maybe [SlotTypeMetadata])
+  , _gstrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetSlotTypesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gstrsNextToken' - If the response is truncated, it includes a pagination token that you can specify in your next request to fetch the next page of slot types.
+--
+-- * 'gstrsSlotTypes' - An array of objects, one for each slot type, that provides information such as the name of the slot type, the version, and a description.
+--
+-- * 'gstrsResponseStatus' - -- | The response status code.
+getSlotTypesResponse
+    :: Int -- ^ 'gstrsResponseStatus'
+    -> GetSlotTypesResponse
+getSlotTypesResponse pResponseStatus_ =
+  GetSlotTypesResponse'
+  { _gstrsNextToken = Nothing
+  , _gstrsSlotTypes = Nothing
+  , _gstrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | If the response is truncated, it includes a pagination token that you can specify in your next request to fetch the next page of slot types.
+gstrsNextToken :: Lens' GetSlotTypesResponse (Maybe Text)
+gstrsNextToken = lens _gstrsNextToken (\ s a -> s{_gstrsNextToken = a});
+
+-- | An array of objects, one for each slot type, that provides information such as the name of the slot type, the version, and a description.
+gstrsSlotTypes :: Lens' GetSlotTypesResponse [SlotTypeMetadata]
+gstrsSlotTypes = lens _gstrsSlotTypes (\ s a -> s{_gstrsSlotTypes = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gstrsResponseStatus :: Lens' GetSlotTypesResponse Int
+gstrsResponseStatus = lens _gstrsResponseStatus (\ s a -> s{_gstrsResponseStatus = a});
+
+instance NFData GetSlotTypesResponse where
diff --git a/gen/Network/AWS/LexModels/GetUtterancesView.hs b/gen/Network/AWS/LexModels/GetUtterancesView.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/GetUtterancesView.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.LexModels.GetUtterancesView
+-- Copyright   : (c) 2013-2017 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)
+--
+-- Use the @GetUtterancesView@ operation to get information about the utterances that your users have made to your bot. You can use this list to tune the utterances that your bot responds to.
+--
+--
+-- For example, say that you have created a bot to order flowers. After your users have used your bot for a while, use the @GetUtterancesView@ operation to see the requests that they have made and whether they have been successful. You might find that the utterance "I want flowers" is not being recognized. You could add this utterance to the @OrderFlowers@ intent so that your bot recognizes that utterance.
+--
+-- After you publish a new version of a bot, you can get information about the old version and the new so that you can compare the performance across the two versions.
+--
+-- Data is available for the last 15 days. You can request information for up to 5 versions in each request. The response contains information about a maximum of 100 utterances for each version.
+--
+-- If the bot's @childDirected@ field is set to @true@ , utterances for the bot are not stored and cannot be retrieved with the @GetUtterancesView@ operation. For more information, see 'PutBot' .
+--
+-- This operation requires permissions for the @lex:GetUtterancesView@ action.
+--
+module Network.AWS.LexModels.GetUtterancesView
+    (
+    -- * Creating a Request
+      getUtterancesView
+    , GetUtterancesView
+    -- * Request Lenses
+    , guvBotName
+    , guvBotVersions
+    , guvStatusType
+
+    -- * Destructuring the Response
+    , getUtterancesViewResponse
+    , GetUtterancesViewResponse
+    -- * Response Lenses
+    , guvrsBotName
+    , guvrsUtterances
+    , guvrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getUtterancesView' smart constructor.
+data GetUtterancesView = GetUtterancesView'
+  { _guvBotName     :: !Text
+  , _guvBotVersions :: !(List1 Text)
+  , _guvStatusType  :: !StatusType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetUtterancesView' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'guvBotName' - The name of the bot for which utterance information should be returned.
+--
+-- * 'guvBotVersions' - An array of bot versions for which utterance information should be returned. The limit is 5 versions per request.
+--
+-- * 'guvStatusType' - To return utterances that were recognized and handled, use@Detected@ . To return utterances that were not recognized, use @Missed@ .
+getUtterancesView
+    :: Text -- ^ 'guvBotName'
+    -> NonEmpty Text -- ^ 'guvBotVersions'
+    -> StatusType -- ^ 'guvStatusType'
+    -> GetUtterancesView
+getUtterancesView pBotName_ pBotVersions_ pStatusType_ =
+  GetUtterancesView'
+  { _guvBotName = pBotName_
+  , _guvBotVersions = _List1 # pBotVersions_
+  , _guvStatusType = pStatusType_
+  }
+
+
+-- | The name of the bot for which utterance information should be returned.
+guvBotName :: Lens' GetUtterancesView Text
+guvBotName = lens _guvBotName (\ s a -> s{_guvBotName = a});
+
+-- | An array of bot versions for which utterance information should be returned. The limit is 5 versions per request.
+guvBotVersions :: Lens' GetUtterancesView (NonEmpty Text)
+guvBotVersions = lens _guvBotVersions (\ s a -> s{_guvBotVersions = a}) . _List1;
+
+-- | To return utterances that were recognized and handled, use@Detected@ . To return utterances that were not recognized, use @Missed@ .
+guvStatusType :: Lens' GetUtterancesView StatusType
+guvStatusType = lens _guvStatusType (\ s a -> s{_guvStatusType = a});
+
+instance AWSRequest GetUtterancesView where
+        type Rs GetUtterancesView = GetUtterancesViewResponse
+        request = get lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetUtterancesViewResponse' <$>
+                   (x .?> "botName") <*> (x .?> "utterances" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetUtterancesView where
+
+instance NFData GetUtterancesView where
+
+instance ToHeaders GetUtterancesView where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath GetUtterancesView where
+        toPath GetUtterancesView'{..}
+          = mconcat ["/bots/", toBS _guvBotName, "/utterances"]
+
+instance ToQuery GetUtterancesView where
+        toQuery GetUtterancesView'{..}
+          = mconcat
+              ["bot_versions" =:
+                 toQueryList "member" _guvBotVersions,
+               "status_type" =: _guvStatusType, "view=aggregation"]
+
+-- | /See:/ 'getUtterancesViewResponse' smart constructor.
+data GetUtterancesViewResponse = GetUtterancesViewResponse'
+  { _guvrsBotName        :: !(Maybe Text)
+  , _guvrsUtterances     :: !(Maybe [UtteranceList])
+  , _guvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetUtterancesViewResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'guvrsBotName' - The name of the bot for which utterance information was returned.
+--
+-- * 'guvrsUtterances' - An array of 'UtteranceList' objects, each containing a list of 'UtteranceData' objects describing the utterances that were processed by your bot. The response contains a maximum of 100 @UtteranceData@ objects for each version.
+--
+-- * 'guvrsResponseStatus' - -- | The response status code.
+getUtterancesViewResponse
+    :: Int -- ^ 'guvrsResponseStatus'
+    -> GetUtterancesViewResponse
+getUtterancesViewResponse pResponseStatus_ =
+  GetUtterancesViewResponse'
+  { _guvrsBotName = Nothing
+  , _guvrsUtterances = Nothing
+  , _guvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The name of the bot for which utterance information was returned.
+guvrsBotName :: Lens' GetUtterancesViewResponse (Maybe Text)
+guvrsBotName = lens _guvrsBotName (\ s a -> s{_guvrsBotName = a});
+
+-- | An array of 'UtteranceList' objects, each containing a list of 'UtteranceData' objects describing the utterances that were processed by your bot. The response contains a maximum of 100 @UtteranceData@ objects for each version.
+guvrsUtterances :: Lens' GetUtterancesViewResponse [UtteranceList]
+guvrsUtterances = lens _guvrsUtterances (\ s a -> s{_guvrsUtterances = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+guvrsResponseStatus :: Lens' GetUtterancesViewResponse Int
+guvrsResponseStatus = lens _guvrsResponseStatus (\ s a -> s{_guvrsResponseStatus = a});
+
+instance NFData GetUtterancesViewResponse where
diff --git a/gen/Network/AWS/LexModels/PutBot.hs b/gen/Network/AWS/LexModels/PutBot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/PutBot.hs
@@ -0,0 +1,384 @@
+{-# 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.LexModels.PutBot
+-- Copyright   : (c) 2013-2017 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 an Amazon Lex conversational bot or replaces an existing bot. When you create or update a bot you are only required to specify a name. You can use this to add intents later, or to remove intents from an existing bot. When you create a bot with a name only, the bot is created or updated but Amazon Lex returns the response @FAILED@ . You can build the bot after you add one or more intents. For more information about Amazon Lex bots, see 'how-it-works' .
+--
+--
+-- If you specify the name of an existing bot, the fields in the request replace the existing values in the @> LATEST@ version of the bot. Amazon Lex removes any fields that you don't provide values for in the request, except for the @idleTTLInSeconds@ and @privacySettings@ fields, which are set to their default values. If you don't specify values for required fields, Amazon Lex throws an exception.
+--
+-- This operation requires permissions for the @lex:PutBot@ action. For more information, see 'auth-and-access-control' .
+--
+module Network.AWS.LexModels.PutBot
+    (
+    -- * Creating a Request
+      putBot
+    , PutBot
+    -- * Request Lenses
+    , pbAbortStatement
+    , pbIntents
+    , pbChecksum
+    , pbProcessBehavior
+    , pbIdleSessionTTLInSeconds
+    , pbClarificationPrompt
+    , pbVoiceId
+    , pbDescription
+    , pbName
+    , pbLocale
+    , pbChildDirected
+
+    -- * Destructuring the Response
+    , putBotResponse
+    , PutBotResponse
+    -- * Response Lenses
+    , pbrsFailureReason
+    , pbrsStatus
+    , pbrsAbortStatement
+    , pbrsIntents
+    , pbrsChecksum
+    , pbrsLocale
+    , pbrsCreatedDate
+    , pbrsName
+    , pbrsVersion
+    , pbrsIdleSessionTTLInSeconds
+    , pbrsClarificationPrompt
+    , pbrsVoiceId
+    , pbrsLastUpdatedDate
+    , pbrsChildDirected
+    , pbrsDescription
+    , pbrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'putBot' smart constructor.
+data PutBot = PutBot'
+  { _pbAbortStatement          :: !(Maybe Statement)
+  , _pbIntents                 :: !(Maybe [Intent])
+  , _pbChecksum                :: !(Maybe Text)
+  , _pbProcessBehavior         :: !(Maybe ProcessBehavior)
+  , _pbIdleSessionTTLInSeconds :: !(Maybe Nat)
+  , _pbClarificationPrompt     :: !(Maybe Prompt)
+  , _pbVoiceId                 :: !(Maybe Text)
+  , _pbDescription             :: !(Maybe Text)
+  , _pbName                    :: !Text
+  , _pbLocale                  :: !Locale
+  , _pbChildDirected           :: !Bool
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutBot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbAbortStatement' - When Amazon Lex can't understand the user's input in context, it tries to elicit the information a few times. After that, Amazon Lex sends the message defined in @abortStatement@ to the user, and then aborts the conversation. To set the number of retries, use the @valueElicitationPrompt@ field for the slot type.  For example, in a pizza ordering bot, Amazon Lex might ask a user "What type of crust would you like?" If the user's response is not one of the expected responses (for example, "thin crust, "deep dish," etc.), Amazon Lex tries to elicit a correct response a few more times.  For example, in a pizza ordering application, @OrderPizza@ might be one of the intents. This intent might require the @CrustType@ slot. You specify the @valueElicitationPrompt@ field when you create the @CrustType@ slot.
+--
+-- * 'pbIntents' - An array of @Intent@ objects. Each intent represents a command that a user can express. For example, a pizza ordering bot might support an OrderPizza intent. For more information, see 'how-it-works' .
+--
+-- * 'pbChecksum' - Identifies a specific revision of the @> LATEST@ version. When you create a new bot, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a bot, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+--
+-- * 'pbProcessBehavior' - If you set the @processBehavior@ element to @Build@ , Amazon Lex builds the bot so that it can be run. If you set the element to @Save@ Amazon Lex saves the bot, but doesn't build it.  If you don't specify this value, the default value is @Save@ .
+--
+-- * 'pbIdleSessionTTLInSeconds' - The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. A user interaction session remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Lex deletes any data provided before the timeout. For example, suppose that a user chooses the OrderPizza intent, but gets sidetracked halfway through placing an order. If the user doesn't complete the order within the specified time, Amazon Lex discards the slot information that it gathered, and the user must start over. If you don't include the @idleSessionTTLInSeconds@ element in a @PutBot@ operation request, Amazon Lex uses the default value. This is also true if the request replaces an existing bot. The default is 300 seconds (5 minutes).
+--
+-- * 'pbClarificationPrompt' - When Amazon Lex doesn't understand the user's intent, it uses this message to get clarification. To specify how many times Amazon Lex should repeate the clarification prompt, use the @maxAttempts@ field. If Amazon Lex still doesn't understand, it sends the message in the @abortStatement@ field.  When you create a clarification prompt, make sure that it suggests the correct response from the user. for example, for a bot that orders pizza and drinks, you might create this clarification prompt: "What would you like to do? You can say 'Order a pizza' or 'Order a drink.'"
+--
+-- * 'pbVoiceId' - The Amazon Polly voice ID that you want Amazon Lex to use for voice interactions with the user. The locale configured for the voice must match the locale of the bot. For more information, see <http://docs.aws.amazon.com/polly/latest/dg/voicelist.html Available Voices> in the /Amazon Polly Developer Guide/ .
+--
+-- * 'pbDescription' - A description of the bot.
+--
+-- * 'pbName' - The name of the bot. The name is /not/ case sensitive.
+--
+-- * 'pbLocale' - Specifies the target locale for the bot. Any intent used in the bot must be compatible with the locale of the bot.  The default is @en-US@ .
+--
+-- * 'pbChildDirected' - For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+putBot
+    :: Text -- ^ 'pbName'
+    -> Locale -- ^ 'pbLocale'
+    -> Bool -- ^ 'pbChildDirected'
+    -> PutBot
+putBot pName_ pLocale_ pChildDirected_ =
+  PutBot'
+  { _pbAbortStatement = Nothing
+  , _pbIntents = Nothing
+  , _pbChecksum = Nothing
+  , _pbProcessBehavior = Nothing
+  , _pbIdleSessionTTLInSeconds = Nothing
+  , _pbClarificationPrompt = Nothing
+  , _pbVoiceId = Nothing
+  , _pbDescription = Nothing
+  , _pbName = pName_
+  , _pbLocale = pLocale_
+  , _pbChildDirected = pChildDirected_
+  }
+
+
+-- | When Amazon Lex can't understand the user's input in context, it tries to elicit the information a few times. After that, Amazon Lex sends the message defined in @abortStatement@ to the user, and then aborts the conversation. To set the number of retries, use the @valueElicitationPrompt@ field for the slot type.  For example, in a pizza ordering bot, Amazon Lex might ask a user "What type of crust would you like?" If the user's response is not one of the expected responses (for example, "thin crust, "deep dish," etc.), Amazon Lex tries to elicit a correct response a few more times.  For example, in a pizza ordering application, @OrderPizza@ might be one of the intents. This intent might require the @CrustType@ slot. You specify the @valueElicitationPrompt@ field when you create the @CrustType@ slot.
+pbAbortStatement :: Lens' PutBot (Maybe Statement)
+pbAbortStatement = lens _pbAbortStatement (\ s a -> s{_pbAbortStatement = a});
+
+-- | An array of @Intent@ objects. Each intent represents a command that a user can express. For example, a pizza ordering bot might support an OrderPizza intent. For more information, see 'how-it-works' .
+pbIntents :: Lens' PutBot [Intent]
+pbIntents = lens _pbIntents (\ s a -> s{_pbIntents = a}) . _Default . _Coerce;
+
+-- | Identifies a specific revision of the @> LATEST@ version. When you create a new bot, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a bot, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+pbChecksum :: Lens' PutBot (Maybe Text)
+pbChecksum = lens _pbChecksum (\ s a -> s{_pbChecksum = a});
+
+-- | If you set the @processBehavior@ element to @Build@ , Amazon Lex builds the bot so that it can be run. If you set the element to @Save@ Amazon Lex saves the bot, but doesn't build it.  If you don't specify this value, the default value is @Save@ .
+pbProcessBehavior :: Lens' PutBot (Maybe ProcessBehavior)
+pbProcessBehavior = lens _pbProcessBehavior (\ s a -> s{_pbProcessBehavior = a});
+
+-- | The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. A user interaction session remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Lex deletes any data provided before the timeout. For example, suppose that a user chooses the OrderPizza intent, but gets sidetracked halfway through placing an order. If the user doesn't complete the order within the specified time, Amazon Lex discards the slot information that it gathered, and the user must start over. If you don't include the @idleSessionTTLInSeconds@ element in a @PutBot@ operation request, Amazon Lex uses the default value. This is also true if the request replaces an existing bot. The default is 300 seconds (5 minutes).
+pbIdleSessionTTLInSeconds :: Lens' PutBot (Maybe Natural)
+pbIdleSessionTTLInSeconds = lens _pbIdleSessionTTLInSeconds (\ s a -> s{_pbIdleSessionTTLInSeconds = a}) . mapping _Nat;
+
+-- | When Amazon Lex doesn't understand the user's intent, it uses this message to get clarification. To specify how many times Amazon Lex should repeate the clarification prompt, use the @maxAttempts@ field. If Amazon Lex still doesn't understand, it sends the message in the @abortStatement@ field.  When you create a clarification prompt, make sure that it suggests the correct response from the user. for example, for a bot that orders pizza and drinks, you might create this clarification prompt: "What would you like to do? You can say 'Order a pizza' or 'Order a drink.'"
+pbClarificationPrompt :: Lens' PutBot (Maybe Prompt)
+pbClarificationPrompt = lens _pbClarificationPrompt (\ s a -> s{_pbClarificationPrompt = a});
+
+-- | The Amazon Polly voice ID that you want Amazon Lex to use for voice interactions with the user. The locale configured for the voice must match the locale of the bot. For more information, see <http://docs.aws.amazon.com/polly/latest/dg/voicelist.html Available Voices> in the /Amazon Polly Developer Guide/ .
+pbVoiceId :: Lens' PutBot (Maybe Text)
+pbVoiceId = lens _pbVoiceId (\ s a -> s{_pbVoiceId = a});
+
+-- | A description of the bot.
+pbDescription :: Lens' PutBot (Maybe Text)
+pbDescription = lens _pbDescription (\ s a -> s{_pbDescription = a});
+
+-- | The name of the bot. The name is /not/ case sensitive.
+pbName :: Lens' PutBot Text
+pbName = lens _pbName (\ s a -> s{_pbName = a});
+
+-- | Specifies the target locale for the bot. Any intent used in the bot must be compatible with the locale of the bot.  The default is @en-US@ .
+pbLocale :: Lens' PutBot Locale
+pbLocale = lens _pbLocale (\ s a -> s{_pbLocale = a});
+
+-- | For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+pbChildDirected :: Lens' PutBot Bool
+pbChildDirected = lens _pbChildDirected (\ s a -> s{_pbChildDirected = a});
+
+instance AWSRequest PutBot where
+        type Rs PutBot = PutBotResponse
+        request = putJSON lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutBotResponse' <$>
+                   (x .?> "failureReason") <*> (x .?> "status") <*>
+                     (x .?> "abortStatement")
+                     <*> (x .?> "intents" .!@ mempty)
+                     <*> (x .?> "checksum")
+                     <*> (x .?> "locale")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "idleSessionTTLInSeconds")
+                     <*> (x .?> "clarificationPrompt")
+                     <*> (x .?> "voiceId")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "childDirected")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable PutBot where
+
+instance NFData PutBot where
+
+instance ToHeaders PutBot where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutBot where
+        toJSON PutBot'{..}
+          = object
+              (catMaybes
+                 [("abortStatement" .=) <$> _pbAbortStatement,
+                  ("intents" .=) <$> _pbIntents,
+                  ("checksum" .=) <$> _pbChecksum,
+                  ("processBehavior" .=) <$> _pbProcessBehavior,
+                  ("idleSessionTTLInSeconds" .=) <$>
+                    _pbIdleSessionTTLInSeconds,
+                  ("clarificationPrompt" .=) <$>
+                    _pbClarificationPrompt,
+                  ("voiceId" .=) <$> _pbVoiceId,
+                  ("description" .=) <$> _pbDescription,
+                  Just ("locale" .= _pbLocale),
+                  Just ("childDirected" .= _pbChildDirected)])
+
+instance ToPath PutBot where
+        toPath PutBot'{..}
+          = mconcat
+              ["/bots/", toBS _pbName, "/versions/$LATEST"]
+
+instance ToQuery PutBot where
+        toQuery = const mempty
+
+-- | /See:/ 'putBotResponse' smart constructor.
+data PutBotResponse = PutBotResponse'
+  { _pbrsFailureReason           :: !(Maybe Text)
+  , _pbrsStatus                  :: !(Maybe LexStatus)
+  , _pbrsAbortStatement          :: !(Maybe Statement)
+  , _pbrsIntents                 :: !(Maybe [Intent])
+  , _pbrsChecksum                :: !(Maybe Text)
+  , _pbrsLocale                  :: !(Maybe Locale)
+  , _pbrsCreatedDate             :: !(Maybe POSIX)
+  , _pbrsName                    :: !(Maybe Text)
+  , _pbrsVersion                 :: !(Maybe Text)
+  , _pbrsIdleSessionTTLInSeconds :: !(Maybe Nat)
+  , _pbrsClarificationPrompt     :: !(Maybe Prompt)
+  , _pbrsVoiceId                 :: !(Maybe Text)
+  , _pbrsLastUpdatedDate         :: !(Maybe POSIX)
+  , _pbrsChildDirected           :: !(Maybe Bool)
+  , _pbrsDescription             :: !(Maybe Text)
+  , _pbrsResponseStatus          :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutBotResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbrsFailureReason' - If @status@ is @FAILED@ , Amazon Lex provides the reason that it failed to build the bot.
+--
+-- * 'pbrsStatus' - When you send a request to create a bot with @processBehavior@ set to @BUILD@ , Amazon Lex sets the @status@ response element to @BUILDING@ . After Amazon Lex builds the bot, it sets @status@ to @READY@ . If Amazon Lex can't build the bot, Amazon Lex sets @status@ to @FAILED@ . Amazon Lex returns the reason for the failure in the @failureReason@ response element.  When you set @processBehavior@ to @SAVE@ , Amazon Lex sets the status code to @NOT BUILT@ .
+--
+-- * 'pbrsAbortStatement' - The message that Amazon Lex uses to abort a conversation. For more information, see 'PutBot' .
+--
+-- * 'pbrsIntents' - An array of @Intent@ objects. For more information, see 'PutBot' .
+--
+-- * 'pbrsChecksum' - Checksum of the bot that you created.
+--
+-- * 'pbrsLocale' - The target locale for the bot.
+--
+-- * 'pbrsCreatedDate' - The date that the bot was created.
+--
+-- * 'pbrsName' - The name of the bot.
+--
+-- * 'pbrsVersion' - The version of the bot. For a new bot, the version is always @> LATEST@ .
+--
+-- * 'pbrsIdleSessionTTLInSeconds' - The maximum length of time that Amazon Lex retains the data gathered in a conversation. For more information, see 'PutBot' .
+--
+-- * 'pbrsClarificationPrompt' - The prompts that Amazon Lex uses when it doesn't understand the user's intent. For more information, see 'PutBot' .
+--
+-- * 'pbrsVoiceId' - The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. For more information, see 'PutBot' .
+--
+-- * 'pbrsLastUpdatedDate' - The date that the bot was updated. When you create a resource, the creation date and last updated date are the same.
+--
+-- * 'pbrsChildDirected' - For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+--
+-- * 'pbrsDescription' - A description of the bot.
+--
+-- * 'pbrsResponseStatus' - -- | The response status code.
+putBotResponse
+    :: Int -- ^ 'pbrsResponseStatus'
+    -> PutBotResponse
+putBotResponse pResponseStatus_ =
+  PutBotResponse'
+  { _pbrsFailureReason = Nothing
+  , _pbrsStatus = Nothing
+  , _pbrsAbortStatement = Nothing
+  , _pbrsIntents = Nothing
+  , _pbrsChecksum = Nothing
+  , _pbrsLocale = Nothing
+  , _pbrsCreatedDate = Nothing
+  , _pbrsName = Nothing
+  , _pbrsVersion = Nothing
+  , _pbrsIdleSessionTTLInSeconds = Nothing
+  , _pbrsClarificationPrompt = Nothing
+  , _pbrsVoiceId = Nothing
+  , _pbrsLastUpdatedDate = Nothing
+  , _pbrsChildDirected = Nothing
+  , _pbrsDescription = Nothing
+  , _pbrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | If @status@ is @FAILED@ , Amazon Lex provides the reason that it failed to build the bot.
+pbrsFailureReason :: Lens' PutBotResponse (Maybe Text)
+pbrsFailureReason = lens _pbrsFailureReason (\ s a -> s{_pbrsFailureReason = a});
+
+-- | When you send a request to create a bot with @processBehavior@ set to @BUILD@ , Amazon Lex sets the @status@ response element to @BUILDING@ . After Amazon Lex builds the bot, it sets @status@ to @READY@ . If Amazon Lex can't build the bot, Amazon Lex sets @status@ to @FAILED@ . Amazon Lex returns the reason for the failure in the @failureReason@ response element.  When you set @processBehavior@ to @SAVE@ , Amazon Lex sets the status code to @NOT BUILT@ .
+pbrsStatus :: Lens' PutBotResponse (Maybe LexStatus)
+pbrsStatus = lens _pbrsStatus (\ s a -> s{_pbrsStatus = a});
+
+-- | The message that Amazon Lex uses to abort a conversation. For more information, see 'PutBot' .
+pbrsAbortStatement :: Lens' PutBotResponse (Maybe Statement)
+pbrsAbortStatement = lens _pbrsAbortStatement (\ s a -> s{_pbrsAbortStatement = a});
+
+-- | An array of @Intent@ objects. For more information, see 'PutBot' .
+pbrsIntents :: Lens' PutBotResponse [Intent]
+pbrsIntents = lens _pbrsIntents (\ s a -> s{_pbrsIntents = a}) . _Default . _Coerce;
+
+-- | Checksum of the bot that you created.
+pbrsChecksum :: Lens' PutBotResponse (Maybe Text)
+pbrsChecksum = lens _pbrsChecksum (\ s a -> s{_pbrsChecksum = a});
+
+-- | The target locale for the bot.
+pbrsLocale :: Lens' PutBotResponse (Maybe Locale)
+pbrsLocale = lens _pbrsLocale (\ s a -> s{_pbrsLocale = a});
+
+-- | The date that the bot was created.
+pbrsCreatedDate :: Lens' PutBotResponse (Maybe UTCTime)
+pbrsCreatedDate = lens _pbrsCreatedDate (\ s a -> s{_pbrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the bot.
+pbrsName :: Lens' PutBotResponse (Maybe Text)
+pbrsName = lens _pbrsName (\ s a -> s{_pbrsName = a});
+
+-- | The version of the bot. For a new bot, the version is always @> LATEST@ .
+pbrsVersion :: Lens' PutBotResponse (Maybe Text)
+pbrsVersion = lens _pbrsVersion (\ s a -> s{_pbrsVersion = a});
+
+-- | The maximum length of time that Amazon Lex retains the data gathered in a conversation. For more information, see 'PutBot' .
+pbrsIdleSessionTTLInSeconds :: Lens' PutBotResponse (Maybe Natural)
+pbrsIdleSessionTTLInSeconds = lens _pbrsIdleSessionTTLInSeconds (\ s a -> s{_pbrsIdleSessionTTLInSeconds = a}) . mapping _Nat;
+
+-- | The prompts that Amazon Lex uses when it doesn't understand the user's intent. For more information, see 'PutBot' .
+pbrsClarificationPrompt :: Lens' PutBotResponse (Maybe Prompt)
+pbrsClarificationPrompt = lens _pbrsClarificationPrompt (\ s a -> s{_pbrsClarificationPrompt = a});
+
+-- | The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. For more information, see 'PutBot' .
+pbrsVoiceId :: Lens' PutBotResponse (Maybe Text)
+pbrsVoiceId = lens _pbrsVoiceId (\ s a -> s{_pbrsVoiceId = a});
+
+-- | The date that the bot was updated. When you create a resource, the creation date and last updated date are the same.
+pbrsLastUpdatedDate :: Lens' PutBotResponse (Maybe UTCTime)
+pbrsLastUpdatedDate = lens _pbrsLastUpdatedDate (\ s a -> s{_pbrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying @true@ or @false@ in the @childDirected@ field. By specifying @true@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying @false@ in the @childDirected@ field, you confirm that your use of Amazon Lex __is not__ related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the @childDirected@ field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ.>
+pbrsChildDirected :: Lens' PutBotResponse (Maybe Bool)
+pbrsChildDirected = lens _pbrsChildDirected (\ s a -> s{_pbrsChildDirected = a});
+
+-- | A description of the bot.
+pbrsDescription :: Lens' PutBotResponse (Maybe Text)
+pbrsDescription = lens _pbrsDescription (\ s a -> s{_pbrsDescription = a});
+
+-- | -- | The response status code.
+pbrsResponseStatus :: Lens' PutBotResponse Int
+pbrsResponseStatus = lens _pbrsResponseStatus (\ s a -> s{_pbrsResponseStatus = a});
+
+instance NFData PutBotResponse where
diff --git a/gen/Network/AWS/LexModels/PutBotAlias.hs b/gen/Network/AWS/LexModels/PutBotAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/PutBotAlias.hs
@@ -0,0 +1,240 @@
+{-# 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.LexModels.PutBotAlias
+-- Copyright   : (c) 2013-2017 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 an alias for the specified version of the bot or replaces an alias for the specified bot. To change the version of the bot that the alias points to, replace the alias. For more information about aliases, see 'versioning-aliases' .
+--
+--
+-- This operation requires permissions for the @lex:PutBotAlias@ action.
+--
+module Network.AWS.LexModels.PutBotAlias
+    (
+    -- * Creating a Request
+      putBotAlias
+    , PutBotAlias
+    -- * Request Lenses
+    , pbaChecksum
+    , pbaDescription
+    , pbaName
+    , pbaBotVersion
+    , pbaBotName
+
+    -- * Destructuring the Response
+    , putBotAliasResponse
+    , PutBotAliasResponse
+    -- * Response Lenses
+    , pbarsChecksum
+    , pbarsBotVersion
+    , pbarsBotName
+    , pbarsCreatedDate
+    , pbarsName
+    , pbarsLastUpdatedDate
+    , pbarsDescription
+    , pbarsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'putBotAlias' smart constructor.
+data PutBotAlias = PutBotAlias'
+  { _pbaChecksum    :: !(Maybe Text)
+  , _pbaDescription :: !(Maybe Text)
+  , _pbaName        :: !Text
+  , _pbaBotVersion  :: !Text
+  , _pbaBotName     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutBotAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbaChecksum' - Identifies a specific revision of the @> LATEST@ version. When you create a new bot alias, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a bot alias, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+--
+-- * 'pbaDescription' - A description of the alias.
+--
+-- * 'pbaName' - The name of the alias. The name is /not/ case sensitive.
+--
+-- * 'pbaBotVersion' - The version of the bot.
+--
+-- * 'pbaBotName' - The name of the bot.
+putBotAlias
+    :: Text -- ^ 'pbaName'
+    -> Text -- ^ 'pbaBotVersion'
+    -> Text -- ^ 'pbaBotName'
+    -> PutBotAlias
+putBotAlias pName_ pBotVersion_ pBotName_ =
+  PutBotAlias'
+  { _pbaChecksum = Nothing
+  , _pbaDescription = Nothing
+  , _pbaName = pName_
+  , _pbaBotVersion = pBotVersion_
+  , _pbaBotName = pBotName_
+  }
+
+
+-- | Identifies a specific revision of the @> LATEST@ version. When you create a new bot alias, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a bot alias, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+pbaChecksum :: Lens' PutBotAlias (Maybe Text)
+pbaChecksum = lens _pbaChecksum (\ s a -> s{_pbaChecksum = a});
+
+-- | A description of the alias.
+pbaDescription :: Lens' PutBotAlias (Maybe Text)
+pbaDescription = lens _pbaDescription (\ s a -> s{_pbaDescription = a});
+
+-- | The name of the alias. The name is /not/ case sensitive.
+pbaName :: Lens' PutBotAlias Text
+pbaName = lens _pbaName (\ s a -> s{_pbaName = a});
+
+-- | The version of the bot.
+pbaBotVersion :: Lens' PutBotAlias Text
+pbaBotVersion = lens _pbaBotVersion (\ s a -> s{_pbaBotVersion = a});
+
+-- | The name of the bot.
+pbaBotName :: Lens' PutBotAlias Text
+pbaBotName = lens _pbaBotName (\ s a -> s{_pbaBotName = a});
+
+instance AWSRequest PutBotAlias where
+        type Rs PutBotAlias = PutBotAliasResponse
+        request = putJSON lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutBotAliasResponse' <$>
+                   (x .?> "checksum") <*> (x .?> "botVersion") <*>
+                     (x .?> "botName")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable PutBotAlias where
+
+instance NFData PutBotAlias where
+
+instance ToHeaders PutBotAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutBotAlias where
+        toJSON PutBotAlias'{..}
+          = object
+              (catMaybes
+                 [("checksum" .=) <$> _pbaChecksum,
+                  ("description" .=) <$> _pbaDescription,
+                  Just ("botVersion" .= _pbaBotVersion)])
+
+instance ToPath PutBotAlias where
+        toPath PutBotAlias'{..}
+          = mconcat
+              ["/bots/", toBS _pbaBotName, "/aliases/",
+               toBS _pbaName]
+
+instance ToQuery PutBotAlias where
+        toQuery = const mempty
+
+-- | /See:/ 'putBotAliasResponse' smart constructor.
+data PutBotAliasResponse = PutBotAliasResponse'
+  { _pbarsChecksum        :: !(Maybe Text)
+  , _pbarsBotVersion      :: !(Maybe Text)
+  , _pbarsBotName         :: !(Maybe Text)
+  , _pbarsCreatedDate     :: !(Maybe POSIX)
+  , _pbarsName            :: !(Maybe Text)
+  , _pbarsLastUpdatedDate :: !(Maybe POSIX)
+  , _pbarsDescription     :: !(Maybe Text)
+  , _pbarsResponseStatus  :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutBotAliasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbarsChecksum' - The checksum for the current version of the alias.
+--
+-- * 'pbarsBotVersion' - The version of the bot that the alias points to.
+--
+-- * 'pbarsBotName' - The name of the bot that the alias points to.
+--
+-- * 'pbarsCreatedDate' - The date that the bot alias was created.
+--
+-- * 'pbarsName' - The name of the alias.
+--
+-- * 'pbarsLastUpdatedDate' - The date that the bot alias was updated. When you create a resource, the creation date and the last updated date are the same.
+--
+-- * 'pbarsDescription' - A description of the alias.
+--
+-- * 'pbarsResponseStatus' - -- | The response status code.
+putBotAliasResponse
+    :: Int -- ^ 'pbarsResponseStatus'
+    -> PutBotAliasResponse
+putBotAliasResponse pResponseStatus_ =
+  PutBotAliasResponse'
+  { _pbarsChecksum = Nothing
+  , _pbarsBotVersion = Nothing
+  , _pbarsBotName = Nothing
+  , _pbarsCreatedDate = Nothing
+  , _pbarsName = Nothing
+  , _pbarsLastUpdatedDate = Nothing
+  , _pbarsDescription = Nothing
+  , _pbarsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The checksum for the current version of the alias.
+pbarsChecksum :: Lens' PutBotAliasResponse (Maybe Text)
+pbarsChecksum = lens _pbarsChecksum (\ s a -> s{_pbarsChecksum = a});
+
+-- | The version of the bot that the alias points to.
+pbarsBotVersion :: Lens' PutBotAliasResponse (Maybe Text)
+pbarsBotVersion = lens _pbarsBotVersion (\ s a -> s{_pbarsBotVersion = a});
+
+-- | The name of the bot that the alias points to.
+pbarsBotName :: Lens' PutBotAliasResponse (Maybe Text)
+pbarsBotName = lens _pbarsBotName (\ s a -> s{_pbarsBotName = a});
+
+-- | The date that the bot alias was created.
+pbarsCreatedDate :: Lens' PutBotAliasResponse (Maybe UTCTime)
+pbarsCreatedDate = lens _pbarsCreatedDate (\ s a -> s{_pbarsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the alias.
+pbarsName :: Lens' PutBotAliasResponse (Maybe Text)
+pbarsName = lens _pbarsName (\ s a -> s{_pbarsName = a});
+
+-- | The date that the bot alias was updated. When you create a resource, the creation date and the last updated date are the same.
+pbarsLastUpdatedDate :: Lens' PutBotAliasResponse (Maybe UTCTime)
+pbarsLastUpdatedDate = lens _pbarsLastUpdatedDate (\ s a -> s{_pbarsLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the alias.
+pbarsDescription :: Lens' PutBotAliasResponse (Maybe Text)
+pbarsDescription = lens _pbarsDescription (\ s a -> s{_pbarsDescription = a});
+
+-- | -- | The response status code.
+pbarsResponseStatus :: Lens' PutBotAliasResponse Int
+pbarsResponseStatus = lens _pbarsResponseStatus (\ s a -> s{_pbarsResponseStatus = a});
+
+instance NFData PutBotAliasResponse where
diff --git a/gen/Network/AWS/LexModels/PutIntent.hs b/gen/Network/AWS/LexModels/PutIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/PutIntent.hs
@@ -0,0 +1,420 @@
+{-# 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.LexModels.PutIntent
+-- Copyright   : (c) 2013-2017 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 an intent or replaces an existing intent.
+--
+--
+-- To define the interaction between the user and your bot, you use one or more intents. For a pizza ordering bot, for example, you would create an @OrderPizza@ intent.
+--
+-- To create an intent or replace an existing intent, you must provide the following:
+--
+--     * Intent name. For example, @OrderPizza@ .
+--
+--     * Sample utterances. For example, "Can I order a pizza, please." and "I want to order a pizza."
+--
+--     * Information to be gathered. You specify slot types for the information that your bot will request from the user. You can specify standard slot types, such as a date or a time, or custom slot types such as the size and crust of a pizza.
+--
+--     * How the intent will be fulfilled. You can provide a Lambda function or configure the intent to return the intent information to the client application. If you use a Lambda function, when all of the intent information is available, Amazon Lex invokes your Lambda function. If you configure your intent to return the intent information to the client application.
+--
+--
+--
+-- You can specify other optional information in the request, such as:
+--
+--     * A confirmation prompt to ask the user to confirm an intent. For example, "Shall I order your pizza?"
+--
+--     * A conclusion statement to send to the user after the intent has been fulfilled. For example, "I placed your pizza order."
+--
+--     * A follow-up prompt that asks the user for additional activity. For example, asking "Do you want to order a drink with your pizza?"
+--
+--
+--
+-- If you specify an existing intent name to update the intent, Amazon Lex replaces the values in the @> LATEST@ version of the slot type with the values in the request. Amazon Lex removes fields that you don't provide in the request. If you don't specify the required fields, Amazon Lex throws an exception.
+--
+-- For more information, see 'how-it-works' .
+--
+-- This operation requires permissions for the @lex:PutIntent@ action.
+--
+module Network.AWS.LexModels.PutIntent
+    (
+    -- * Creating a Request
+      putIntent
+    , PutIntent
+    -- * Request Lenses
+    , piFulfillmentActivity
+    , piSlots
+    , piRejectionStatement
+    , piChecksum
+    , piConclusionStatement
+    , piSampleUtterances
+    , piParentIntentSignature
+    , piFollowUpPrompt
+    , piConfirmationPrompt
+    , piDialogCodeHook
+    , piDescription
+    , piName
+
+    -- * Destructuring the Response
+    , putIntentResponse
+    , PutIntentResponse
+    -- * Response Lenses
+    , pirsFulfillmentActivity
+    , pirsSlots
+    , pirsRejectionStatement
+    , pirsChecksum
+    , pirsConclusionStatement
+    , pirsSampleUtterances
+    , pirsParentIntentSignature
+    , pirsCreatedDate
+    , pirsName
+    , pirsVersion
+    , pirsFollowUpPrompt
+    , pirsLastUpdatedDate
+    , pirsConfirmationPrompt
+    , pirsDialogCodeHook
+    , pirsDescription
+    , pirsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'putIntent' smart constructor.
+data PutIntent = PutIntent'
+  { _piFulfillmentActivity   :: !(Maybe FulfillmentActivity)
+  , _piSlots                 :: !(Maybe [Slot])
+  , _piRejectionStatement    :: !(Maybe Statement)
+  , _piChecksum              :: !(Maybe Text)
+  , _piConclusionStatement   :: !(Maybe Statement)
+  , _piSampleUtterances      :: !(Maybe [Text])
+  , _piParentIntentSignature :: !(Maybe Text)
+  , _piFollowUpPrompt        :: !(Maybe FollowUpPrompt)
+  , _piConfirmationPrompt    :: !(Maybe Prompt)
+  , _piDialogCodeHook        :: !(Maybe CodeHook)
+  , _piDescription           :: !(Maybe Text)
+  , _piName                  :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutIntent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piFulfillmentActivity' - Required. Describes how the intent is fulfilled. For example, after a user provides all of the information for a pizza order, @fulfillmentActivity@ defines how the bot places an order with a local pizza store.  You might configure Amazon Lex to return all of the intent information to the client application, or direct it to invoke a Lambda function that can process the intent (for example, place an order with a pizzeria).
+--
+-- * 'piSlots' - An array of intent slots. At runtime, Amazon Lex elicits required slot values from the user using prompts defined in the slots. For more information, see 'how-it-works' .
+--
+-- * 'piRejectionStatement' - When the user answers "no" to the question defined in @confirmationPrompt@ , Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+--
+-- * 'piChecksum' - Identifies a specific revision of the @> LATEST@ version. When you create a new intent, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a intent, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+--
+-- * 'piConclusionStatement' - The statement that you want Amazon Lex to convey to the user after the intent is successfully fulfilled by the Lambda function.  This element is relevant only if you provide a Lambda function in the @fulfillmentActivity@ . If you return the intent to the client application, you can't specify this element.
+--
+-- * 'piSampleUtterances' - An array of utterances (strings) that a user might say to signal the intent. For example, "I want {PizzaSize} pizza", "Order {Quantity} {PizzaSize} pizzas".  In each utterance, a slot name is enclosed in curly braces.
+--
+-- * 'piParentIntentSignature' - A unique identifier for the built-in intent to base this intent on. To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+--
+-- * 'piFollowUpPrompt' - Amazon Lex uses this prompt to solicit additional activity after fulfilling an intent. For example, after the @OrderPizza@ intent is fulfilled, you might prompt the user to order a drink. The action that Amazon Lex takes depends on the user's response, as follows:     * If the user says "Yes" it responds with the clarification prompt that is configured for the bot.     * if the user says "Yes" and continues with an utterance that triggers an intent it starts a conversation for the intent.     * If the user says "No" it responds with the rejection statement configured for the the follow-up prompt.     * If it doesn't recognize the utterance it repeats the follow-up prompt again. The @followUpPrompt@ field and the @conclusionStatement@ field are mutually exclusive. You can specify only one.
+--
+-- * 'piConfirmationPrompt' - Prompts the user to confirm the intent. This question should have a yes or no answer. Amazon Lex uses this prompt to ensure that the user acknowledges that the intent is ready for fulfillment. For example, with the @OrderPizza@ intent, you might want to confirm that the order is correct before placing it. For other intents, such as intents that simply respond to user questions, you might not need to ask the user for confirmation before providing the information.
+--
+-- * 'piDialogCodeHook' - Specifies a Lambda function to invoke for each user input. You can invoke this Lambda function to personalize user interaction.  For example, suppose your bot determines that the user is John. Your Lambda function might retrieve John's information from a backend database and prepopulate some of the values. For example, if you find that John is gluten intolerant, you might set the corresponding intent slot, @GlutenIntolerant@ , to true. You might find John's phone number and set the corresponding session attribute.
+--
+-- * 'piDescription' - A description of the intent.
+--
+-- * 'piName' - The name of the intent. The name is /not/ case sensitive.  The name can't match a built-in intent name, or a built-in intent name with "AMAZON." removed. For example, because there is a built-in intent called @AMAZON.HelpIntent@ , you can't create a custom intent called @HelpIntent@ . For a list of built-in intents, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+putIntent
+    :: Text -- ^ 'piName'
+    -> PutIntent
+putIntent pName_ =
+  PutIntent'
+  { _piFulfillmentActivity = Nothing
+  , _piSlots = Nothing
+  , _piRejectionStatement = Nothing
+  , _piChecksum = Nothing
+  , _piConclusionStatement = Nothing
+  , _piSampleUtterances = Nothing
+  , _piParentIntentSignature = Nothing
+  , _piFollowUpPrompt = Nothing
+  , _piConfirmationPrompt = Nothing
+  , _piDialogCodeHook = Nothing
+  , _piDescription = Nothing
+  , _piName = pName_
+  }
+
+
+-- | Required. Describes how the intent is fulfilled. For example, after a user provides all of the information for a pizza order, @fulfillmentActivity@ defines how the bot places an order with a local pizza store.  You might configure Amazon Lex to return all of the intent information to the client application, or direct it to invoke a Lambda function that can process the intent (for example, place an order with a pizzeria).
+piFulfillmentActivity :: Lens' PutIntent (Maybe FulfillmentActivity)
+piFulfillmentActivity = lens _piFulfillmentActivity (\ s a -> s{_piFulfillmentActivity = a});
+
+-- | An array of intent slots. At runtime, Amazon Lex elicits required slot values from the user using prompts defined in the slots. For more information, see 'how-it-works' .
+piSlots :: Lens' PutIntent [Slot]
+piSlots = lens _piSlots (\ s a -> s{_piSlots = a}) . _Default . _Coerce;
+
+-- | When the user answers "no" to the question defined in @confirmationPrompt@ , Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+piRejectionStatement :: Lens' PutIntent (Maybe Statement)
+piRejectionStatement = lens _piRejectionStatement (\ s a -> s{_piRejectionStatement = a});
+
+-- | Identifies a specific revision of the @> LATEST@ version. When you create a new intent, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a intent, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+piChecksum :: Lens' PutIntent (Maybe Text)
+piChecksum = lens _piChecksum (\ s a -> s{_piChecksum = a});
+
+-- | The statement that you want Amazon Lex to convey to the user after the intent is successfully fulfilled by the Lambda function.  This element is relevant only if you provide a Lambda function in the @fulfillmentActivity@ . If you return the intent to the client application, you can't specify this element.
+piConclusionStatement :: Lens' PutIntent (Maybe Statement)
+piConclusionStatement = lens _piConclusionStatement (\ s a -> s{_piConclusionStatement = a});
+
+-- | An array of utterances (strings) that a user might say to signal the intent. For example, "I want {PizzaSize} pizza", "Order {Quantity} {PizzaSize} pizzas".  In each utterance, a slot name is enclosed in curly braces.
+piSampleUtterances :: Lens' PutIntent [Text]
+piSampleUtterances = lens _piSampleUtterances (\ s a -> s{_piSampleUtterances = a}) . _Default . _Coerce;
+
+-- | A unique identifier for the built-in intent to base this intent on. To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+piParentIntentSignature :: Lens' PutIntent (Maybe Text)
+piParentIntentSignature = lens _piParentIntentSignature (\ s a -> s{_piParentIntentSignature = a});
+
+-- | Amazon Lex uses this prompt to solicit additional activity after fulfilling an intent. For example, after the @OrderPizza@ intent is fulfilled, you might prompt the user to order a drink. The action that Amazon Lex takes depends on the user's response, as follows:     * If the user says "Yes" it responds with the clarification prompt that is configured for the bot.     * if the user says "Yes" and continues with an utterance that triggers an intent it starts a conversation for the intent.     * If the user says "No" it responds with the rejection statement configured for the the follow-up prompt.     * If it doesn't recognize the utterance it repeats the follow-up prompt again. The @followUpPrompt@ field and the @conclusionStatement@ field are mutually exclusive. You can specify only one.
+piFollowUpPrompt :: Lens' PutIntent (Maybe FollowUpPrompt)
+piFollowUpPrompt = lens _piFollowUpPrompt (\ s a -> s{_piFollowUpPrompt = a});
+
+-- | Prompts the user to confirm the intent. This question should have a yes or no answer. Amazon Lex uses this prompt to ensure that the user acknowledges that the intent is ready for fulfillment. For example, with the @OrderPizza@ intent, you might want to confirm that the order is correct before placing it. For other intents, such as intents that simply respond to user questions, you might not need to ask the user for confirmation before providing the information.
+piConfirmationPrompt :: Lens' PutIntent (Maybe Prompt)
+piConfirmationPrompt = lens _piConfirmationPrompt (\ s a -> s{_piConfirmationPrompt = a});
+
+-- | Specifies a Lambda function to invoke for each user input. You can invoke this Lambda function to personalize user interaction.  For example, suppose your bot determines that the user is John. Your Lambda function might retrieve John's information from a backend database and prepopulate some of the values. For example, if you find that John is gluten intolerant, you might set the corresponding intent slot, @GlutenIntolerant@ , to true. You might find John's phone number and set the corresponding session attribute.
+piDialogCodeHook :: Lens' PutIntent (Maybe CodeHook)
+piDialogCodeHook = lens _piDialogCodeHook (\ s a -> s{_piDialogCodeHook = a});
+
+-- | A description of the intent.
+piDescription :: Lens' PutIntent (Maybe Text)
+piDescription = lens _piDescription (\ s a -> s{_piDescription = a});
+
+-- | The name of the intent. The name is /not/ case sensitive.  The name can't match a built-in intent name, or a built-in intent name with "AMAZON." removed. For example, because there is a built-in intent called @AMAZON.HelpIntent@ , you can't create a custom intent called @HelpIntent@ . For a list of built-in intents, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+piName :: Lens' PutIntent Text
+piName = lens _piName (\ s a -> s{_piName = a});
+
+instance AWSRequest PutIntent where
+        type Rs PutIntent = PutIntentResponse
+        request = putJSON lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutIntentResponse' <$>
+                   (x .?> "fulfillmentActivity") <*>
+                     (x .?> "slots" .!@ mempty)
+                     <*> (x .?> "rejectionStatement")
+                     <*> (x .?> "checksum")
+                     <*> (x .?> "conclusionStatement")
+                     <*> (x .?> "sampleUtterances" .!@ mempty)
+                     <*> (x .?> "parentIntentSignature")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "followUpPrompt")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "confirmationPrompt")
+                     <*> (x .?> "dialogCodeHook")
+                     <*> (x .?> "description")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable PutIntent where
+
+instance NFData PutIntent where
+
+instance ToHeaders PutIntent where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutIntent where
+        toJSON PutIntent'{..}
+          = object
+              (catMaybes
+                 [("fulfillmentActivity" .=) <$>
+                    _piFulfillmentActivity,
+                  ("slots" .=) <$> _piSlots,
+                  ("rejectionStatement" .=) <$> _piRejectionStatement,
+                  ("checksum" .=) <$> _piChecksum,
+                  ("conclusionStatement" .=) <$>
+                    _piConclusionStatement,
+                  ("sampleUtterances" .=) <$> _piSampleUtterances,
+                  ("parentIntentSignature" .=) <$>
+                    _piParentIntentSignature,
+                  ("followUpPrompt" .=) <$> _piFollowUpPrompt,
+                  ("confirmationPrompt" .=) <$> _piConfirmationPrompt,
+                  ("dialogCodeHook" .=) <$> _piDialogCodeHook,
+                  ("description" .=) <$> _piDescription])
+
+instance ToPath PutIntent where
+        toPath PutIntent'{..}
+          = mconcat
+              ["/intents/", toBS _piName, "/versions/$LATEST"]
+
+instance ToQuery PutIntent where
+        toQuery = const mempty
+
+-- | /See:/ 'putIntentResponse' smart constructor.
+data PutIntentResponse = PutIntentResponse'
+  { _pirsFulfillmentActivity   :: !(Maybe FulfillmentActivity)
+  , _pirsSlots                 :: !(Maybe [Slot])
+  , _pirsRejectionStatement    :: !(Maybe Statement)
+  , _pirsChecksum              :: !(Maybe Text)
+  , _pirsConclusionStatement   :: !(Maybe Statement)
+  , _pirsSampleUtterances      :: !(Maybe [Text])
+  , _pirsParentIntentSignature :: !(Maybe Text)
+  , _pirsCreatedDate           :: !(Maybe POSIX)
+  , _pirsName                  :: !(Maybe Text)
+  , _pirsVersion               :: !(Maybe Text)
+  , _pirsFollowUpPrompt        :: !(Maybe FollowUpPrompt)
+  , _pirsLastUpdatedDate       :: !(Maybe POSIX)
+  , _pirsConfirmationPrompt    :: !(Maybe Prompt)
+  , _pirsDialogCodeHook        :: !(Maybe CodeHook)
+  , _pirsDescription           :: !(Maybe Text)
+  , _pirsResponseStatus        :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutIntentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pirsFulfillmentActivity' - If defined in the intent, Amazon Lex invokes this Lambda function to fulfill the intent after the user provides all of the information required by the intent.
+--
+-- * 'pirsSlots' - An array of intent slots that are configured for the intent.
+--
+-- * 'pirsRejectionStatement' - If the user answers "no" to the question defined in @confirmationPrompt@ Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+--
+-- * 'pirsChecksum' - Checksum of the @> LATEST@ version of the intent created or updated.
+--
+-- * 'pirsConclusionStatement' - After the Lambda function specified in the@fulfillmentActivity@ intent fulfills the intent, Amazon Lex conveys this statement to the user.
+--
+-- * 'pirsSampleUtterances' - An array of sample utterances that are configured for the intent.
+--
+-- * 'pirsParentIntentSignature' - A unique identifier for the built-in intent that this intent is based on.
+--
+-- * 'pirsCreatedDate' - The date that the intent was created.
+--
+-- * 'pirsName' - The name of the intent.
+--
+-- * 'pirsVersion' - The version of the intent. For a new intent, the version is always @> LATEST@ .
+--
+-- * 'pirsFollowUpPrompt' - If defined in the intent, Amazon Lex uses this prompt to solicit additional user activity after the intent is fulfilled.
+--
+-- * 'pirsLastUpdatedDate' - The date that the intent was updated. When you create a resource, the creation date and last update dates are the same.
+--
+-- * 'pirsConfirmationPrompt' - If defined in the intent, Amazon Lex prompts the user to confirm the intent before fulfilling it.
+--
+-- * 'pirsDialogCodeHook' - If defined in the intent, Amazon Lex invokes this Lambda function for each user input.
+--
+-- * 'pirsDescription' - A description of the intent.
+--
+-- * 'pirsResponseStatus' - -- | The response status code.
+putIntentResponse
+    :: Int -- ^ 'pirsResponseStatus'
+    -> PutIntentResponse
+putIntentResponse pResponseStatus_ =
+  PutIntentResponse'
+  { _pirsFulfillmentActivity = Nothing
+  , _pirsSlots = Nothing
+  , _pirsRejectionStatement = Nothing
+  , _pirsChecksum = Nothing
+  , _pirsConclusionStatement = Nothing
+  , _pirsSampleUtterances = Nothing
+  , _pirsParentIntentSignature = Nothing
+  , _pirsCreatedDate = Nothing
+  , _pirsName = Nothing
+  , _pirsVersion = Nothing
+  , _pirsFollowUpPrompt = Nothing
+  , _pirsLastUpdatedDate = Nothing
+  , _pirsConfirmationPrompt = Nothing
+  , _pirsDialogCodeHook = Nothing
+  , _pirsDescription = Nothing
+  , _pirsResponseStatus = pResponseStatus_
+  }
+
+
+-- | If defined in the intent, Amazon Lex invokes this Lambda function to fulfill the intent after the user provides all of the information required by the intent.
+pirsFulfillmentActivity :: Lens' PutIntentResponse (Maybe FulfillmentActivity)
+pirsFulfillmentActivity = lens _pirsFulfillmentActivity (\ s a -> s{_pirsFulfillmentActivity = a});
+
+-- | An array of intent slots that are configured for the intent.
+pirsSlots :: Lens' PutIntentResponse [Slot]
+pirsSlots = lens _pirsSlots (\ s a -> s{_pirsSlots = a}) . _Default . _Coerce;
+
+-- | If the user answers "no" to the question defined in @confirmationPrompt@ Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+pirsRejectionStatement :: Lens' PutIntentResponse (Maybe Statement)
+pirsRejectionStatement = lens _pirsRejectionStatement (\ s a -> s{_pirsRejectionStatement = a});
+
+-- | Checksum of the @> LATEST@ version of the intent created or updated.
+pirsChecksum :: Lens' PutIntentResponse (Maybe Text)
+pirsChecksum = lens _pirsChecksum (\ s a -> s{_pirsChecksum = a});
+
+-- | After the Lambda function specified in the@fulfillmentActivity@ intent fulfills the intent, Amazon Lex conveys this statement to the user.
+pirsConclusionStatement :: Lens' PutIntentResponse (Maybe Statement)
+pirsConclusionStatement = lens _pirsConclusionStatement (\ s a -> s{_pirsConclusionStatement = a});
+
+-- | An array of sample utterances that are configured for the intent.
+pirsSampleUtterances :: Lens' PutIntentResponse [Text]
+pirsSampleUtterances = lens _pirsSampleUtterances (\ s a -> s{_pirsSampleUtterances = a}) . _Default . _Coerce;
+
+-- | A unique identifier for the built-in intent that this intent is based on.
+pirsParentIntentSignature :: Lens' PutIntentResponse (Maybe Text)
+pirsParentIntentSignature = lens _pirsParentIntentSignature (\ s a -> s{_pirsParentIntentSignature = a});
+
+-- | The date that the intent was created.
+pirsCreatedDate :: Lens' PutIntentResponse (Maybe UTCTime)
+pirsCreatedDate = lens _pirsCreatedDate (\ s a -> s{_pirsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the intent.
+pirsName :: Lens' PutIntentResponse (Maybe Text)
+pirsName = lens _pirsName (\ s a -> s{_pirsName = a});
+
+-- | The version of the intent. For a new intent, the version is always @> LATEST@ .
+pirsVersion :: Lens' PutIntentResponse (Maybe Text)
+pirsVersion = lens _pirsVersion (\ s a -> s{_pirsVersion = a});
+
+-- | If defined in the intent, Amazon Lex uses this prompt to solicit additional user activity after the intent is fulfilled.
+pirsFollowUpPrompt :: Lens' PutIntentResponse (Maybe FollowUpPrompt)
+pirsFollowUpPrompt = lens _pirsFollowUpPrompt (\ s a -> s{_pirsFollowUpPrompt = a});
+
+-- | The date that the intent was updated. When you create a resource, the creation date and last update dates are the same.
+pirsLastUpdatedDate :: Lens' PutIntentResponse (Maybe UTCTime)
+pirsLastUpdatedDate = lens _pirsLastUpdatedDate (\ s a -> s{_pirsLastUpdatedDate = a}) . mapping _Time;
+
+-- | If defined in the intent, Amazon Lex prompts the user to confirm the intent before fulfilling it.
+pirsConfirmationPrompt :: Lens' PutIntentResponse (Maybe Prompt)
+pirsConfirmationPrompt = lens _pirsConfirmationPrompt (\ s a -> s{_pirsConfirmationPrompt = a});
+
+-- | If defined in the intent, Amazon Lex invokes this Lambda function for each user input.
+pirsDialogCodeHook :: Lens' PutIntentResponse (Maybe CodeHook)
+pirsDialogCodeHook = lens _pirsDialogCodeHook (\ s a -> s{_pirsDialogCodeHook = a});
+
+-- | A description of the intent.
+pirsDescription :: Lens' PutIntentResponse (Maybe Text)
+pirsDescription = lens _pirsDescription (\ s a -> s{_pirsDescription = a});
+
+-- | -- | The response status code.
+pirsResponseStatus :: Lens' PutIntentResponse Int
+pirsResponseStatus = lens _pirsResponseStatus (\ s a -> s{_pirsResponseStatus = a});
+
+instance NFData PutIntentResponse where
diff --git a/gen/Network/AWS/LexModels/PutSlotType.hs b/gen/Network/AWS/LexModels/PutSlotType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/PutSlotType.hs
@@ -0,0 +1,254 @@
+{-# 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.LexModels.PutSlotType
+-- Copyright   : (c) 2013-2017 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 custom slot type or replaces an existing custom slot type.
+--
+--
+-- To create a custom slot type, specify a name for the slot type and a set of enumeration values, which are the values that a slot of this type can assume. For more information, see 'how-it-works' .
+--
+-- If you specify the name of an existing slot type, the fields in the request replace the existing values in the @> LATEST@ version of the slot type. Amazon Lex removes the fields that you don't provide in the request. If you don't specify required fields, Amazon Lex throws an exception.
+--
+-- This operation requires permissions for the @lex:PutSlotType@ action.
+--
+module Network.AWS.LexModels.PutSlotType
+    (
+    -- * Creating a Request
+      putSlotType
+    , PutSlotType
+    -- * Request Lenses
+    , pstChecksum
+    , pstValueSelectionStrategy
+    , pstDescription
+    , pstEnumerationValues
+    , pstName
+
+    -- * Destructuring the Response
+    , putSlotTypeResponse
+    , PutSlotTypeResponse
+    -- * Response Lenses
+    , pstrsChecksum
+    , pstrsValueSelectionStrategy
+    , pstrsCreatedDate
+    , pstrsName
+    , pstrsVersion
+    , pstrsLastUpdatedDate
+    , pstrsDescription
+    , pstrsEnumerationValues
+    , pstrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'putSlotType' smart constructor.
+data PutSlotType = PutSlotType'
+  { _pstChecksum               :: !(Maybe Text)
+  , _pstValueSelectionStrategy :: !(Maybe SlotValueSelectionStrategy)
+  , _pstDescription            :: !(Maybe Text)
+  , _pstEnumerationValues      :: !(Maybe (List1 EnumerationValue))
+  , _pstName                   :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutSlotType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pstChecksum' - Identifies a specific revision of the @> LATEST@ version. When you create a new slot type, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a slot type, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+--
+-- * 'pstValueSelectionStrategy' - Determines the slot resolution strategy that Amazon Lex uses to return slot type values. The field can be set to one of the following values:     * @ORIGINAL_VALUE@ - Returns the value entered by the user, if the user value is similar to the slot value.     * @TOP_RESOLUTION@ - If there is a resolution list for the slot, return the first value in the resolution list as the slot type value. If there is no resolution list, null is returned. If you don't specify the @valueSelectionStrategy@ , the default is @ORIGINAL_VALUE@ .
+--
+-- * 'pstDescription' - A description of the slot type.
+--
+-- * 'pstEnumerationValues' - A list of @EnumerationValue@ objects that defines the values that the slot type can take. Each value can have a list of @synonyms@ , which are additional values that help train the machine learning model about the values that it resolves for a slot.  When Amazon Lex resolves a slot value, it generates a resolution list that contains up to five possible values for the slot. If you are using a Lambda function, this resolution list is passed to the function. If you are not using a Lambda function you can choose to return the value that the user entered or the first value in the resolution list as the slot value. The @valueSelectionStrategy@ field indicates the option to use.
+--
+-- * 'pstName' - The name of the slot type. The name is /not/ case sensitive.  The name can't match a built-in slot type name, or a built-in slot type name with "AMAZON." removed. For example, because there is a built-in slot type called @AMAZON.DATE@ , you can't create a custom slot type called @DATE@ . For a list of built-in slot types, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/slot-type-reference Slot Type Reference> in the /Alexa Skills Kit/ .
+putSlotType
+    :: Text -- ^ 'pstName'
+    -> PutSlotType
+putSlotType pName_ =
+  PutSlotType'
+  { _pstChecksum = Nothing
+  , _pstValueSelectionStrategy = Nothing
+  , _pstDescription = Nothing
+  , _pstEnumerationValues = Nothing
+  , _pstName = pName_
+  }
+
+
+-- | Identifies a specific revision of the @> LATEST@ version. When you create a new slot type, leave the @checksum@ field blank. If you specify a checksum you get a @BadRequestException@ exception. When you want to update a slot type, set the @checksum@ field to the checksum of the most recent revision of the @> LATEST@ version. If you don't specify the @checksum@ field, or if the checksum does not match the @> LATEST@ version, you get a @PreconditionFailedException@ exception.
+pstChecksum :: Lens' PutSlotType (Maybe Text)
+pstChecksum = lens _pstChecksum (\ s a -> s{_pstChecksum = a});
+
+-- | Determines the slot resolution strategy that Amazon Lex uses to return slot type values. The field can be set to one of the following values:     * @ORIGINAL_VALUE@ - Returns the value entered by the user, if the user value is similar to the slot value.     * @TOP_RESOLUTION@ - If there is a resolution list for the slot, return the first value in the resolution list as the slot type value. If there is no resolution list, null is returned. If you don't specify the @valueSelectionStrategy@ , the default is @ORIGINAL_VALUE@ .
+pstValueSelectionStrategy :: Lens' PutSlotType (Maybe SlotValueSelectionStrategy)
+pstValueSelectionStrategy = lens _pstValueSelectionStrategy (\ s a -> s{_pstValueSelectionStrategy = a});
+
+-- | A description of the slot type.
+pstDescription :: Lens' PutSlotType (Maybe Text)
+pstDescription = lens _pstDescription (\ s a -> s{_pstDescription = a});
+
+-- | A list of @EnumerationValue@ objects that defines the values that the slot type can take. Each value can have a list of @synonyms@ , which are additional values that help train the machine learning model about the values that it resolves for a slot.  When Amazon Lex resolves a slot value, it generates a resolution list that contains up to five possible values for the slot. If you are using a Lambda function, this resolution list is passed to the function. If you are not using a Lambda function you can choose to return the value that the user entered or the first value in the resolution list as the slot value. The @valueSelectionStrategy@ field indicates the option to use.
+pstEnumerationValues :: Lens' PutSlotType (Maybe (NonEmpty EnumerationValue))
+pstEnumerationValues = lens _pstEnumerationValues (\ s a -> s{_pstEnumerationValues = a}) . mapping _List1;
+
+-- | The name of the slot type. The name is /not/ case sensitive.  The name can't match a built-in slot type name, or a built-in slot type name with "AMAZON." removed. For example, because there is a built-in slot type called @AMAZON.DATE@ , you can't create a custom slot type called @DATE@ . For a list of built-in slot types, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/slot-type-reference Slot Type Reference> in the /Alexa Skills Kit/ .
+pstName :: Lens' PutSlotType Text
+pstName = lens _pstName (\ s a -> s{_pstName = a});
+
+instance AWSRequest PutSlotType where
+        type Rs PutSlotType = PutSlotTypeResponse
+        request = putJSON lexModels
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutSlotTypeResponse' <$>
+                   (x .?> "checksum") <*>
+                     (x .?> "valueSelectionStrategy")
+                     <*> (x .?> "createdDate")
+                     <*> (x .?> "name")
+                     <*> (x .?> "version")
+                     <*> (x .?> "lastUpdatedDate")
+                     <*> (x .?> "description")
+                     <*> (x .?> "enumerationValues")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable PutSlotType where
+
+instance NFData PutSlotType where
+
+instance ToHeaders PutSlotType where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutSlotType where
+        toJSON PutSlotType'{..}
+          = object
+              (catMaybes
+                 [("checksum" .=) <$> _pstChecksum,
+                  ("valueSelectionStrategy" .=) <$>
+                    _pstValueSelectionStrategy,
+                  ("description" .=) <$> _pstDescription,
+                  ("enumerationValues" .=) <$> _pstEnumerationValues])
+
+instance ToPath PutSlotType where
+        toPath PutSlotType'{..}
+          = mconcat
+              ["/slottypes/", toBS _pstName, "/versions/$LATEST"]
+
+instance ToQuery PutSlotType where
+        toQuery = const mempty
+
+-- | /See:/ 'putSlotTypeResponse' smart constructor.
+data PutSlotTypeResponse = PutSlotTypeResponse'
+  { _pstrsChecksum               :: !(Maybe Text)
+  , _pstrsValueSelectionStrategy :: !(Maybe SlotValueSelectionStrategy)
+  , _pstrsCreatedDate            :: !(Maybe POSIX)
+  , _pstrsName                   :: !(Maybe Text)
+  , _pstrsVersion                :: !(Maybe Text)
+  , _pstrsLastUpdatedDate        :: !(Maybe POSIX)
+  , _pstrsDescription            :: !(Maybe Text)
+  , _pstrsEnumerationValues      :: !(Maybe (List1 EnumerationValue))
+  , _pstrsResponseStatus         :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutSlotTypeResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pstrsChecksum' - Checksum of the @> LATEST@ version of the slot type.
+--
+-- * 'pstrsValueSelectionStrategy' - The slot resolution strategy that Amazon Lex uses to determine the value of the slot. For more information, see 'PutSlotType' .
+--
+-- * 'pstrsCreatedDate' - The date that the slot type was created.
+--
+-- * 'pstrsName' - The name of the slot type.
+--
+-- * 'pstrsVersion' - The version of the slot type. For a new slot type, the version is always @> LATEST@ .
+--
+-- * 'pstrsLastUpdatedDate' - The date that the slot type was updated. When you create a slot type, the creation date and last update date are the same.
+--
+-- * 'pstrsDescription' - A description of the slot type.
+--
+-- * 'pstrsEnumerationValues' - A list of @EnumerationValue@ objects that defines the values that the slot type can take.
+--
+-- * 'pstrsResponseStatus' - -- | The response status code.
+putSlotTypeResponse
+    :: Int -- ^ 'pstrsResponseStatus'
+    -> PutSlotTypeResponse
+putSlotTypeResponse pResponseStatus_ =
+  PutSlotTypeResponse'
+  { _pstrsChecksum = Nothing
+  , _pstrsValueSelectionStrategy = Nothing
+  , _pstrsCreatedDate = Nothing
+  , _pstrsName = Nothing
+  , _pstrsVersion = Nothing
+  , _pstrsLastUpdatedDate = Nothing
+  , _pstrsDescription = Nothing
+  , _pstrsEnumerationValues = Nothing
+  , _pstrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | Checksum of the @> LATEST@ version of the slot type.
+pstrsChecksum :: Lens' PutSlotTypeResponse (Maybe Text)
+pstrsChecksum = lens _pstrsChecksum (\ s a -> s{_pstrsChecksum = a});
+
+-- | The slot resolution strategy that Amazon Lex uses to determine the value of the slot. For more information, see 'PutSlotType' .
+pstrsValueSelectionStrategy :: Lens' PutSlotTypeResponse (Maybe SlotValueSelectionStrategy)
+pstrsValueSelectionStrategy = lens _pstrsValueSelectionStrategy (\ s a -> s{_pstrsValueSelectionStrategy = a});
+
+-- | The date that the slot type was created.
+pstrsCreatedDate :: Lens' PutSlotTypeResponse (Maybe UTCTime)
+pstrsCreatedDate = lens _pstrsCreatedDate (\ s a -> s{_pstrsCreatedDate = a}) . mapping _Time;
+
+-- | The name of the slot type.
+pstrsName :: Lens' PutSlotTypeResponse (Maybe Text)
+pstrsName = lens _pstrsName (\ s a -> s{_pstrsName = a});
+
+-- | The version of the slot type. For a new slot type, the version is always @> LATEST@ .
+pstrsVersion :: Lens' PutSlotTypeResponse (Maybe Text)
+pstrsVersion = lens _pstrsVersion (\ s a -> s{_pstrsVersion = a});
+
+-- | The date that the slot type was updated. When you create a slot type, the creation date and last update date are the same.
+pstrsLastUpdatedDate :: Lens' PutSlotTypeResponse (Maybe UTCTime)
+pstrsLastUpdatedDate = lens _pstrsLastUpdatedDate (\ s a -> s{_pstrsLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the slot type.
+pstrsDescription :: Lens' PutSlotTypeResponse (Maybe Text)
+pstrsDescription = lens _pstrsDescription (\ s a -> s{_pstrsDescription = a});
+
+-- | A list of @EnumerationValue@ objects that defines the values that the slot type can take.
+pstrsEnumerationValues :: Lens' PutSlotTypeResponse (Maybe (NonEmpty EnumerationValue))
+pstrsEnumerationValues = lens _pstrsEnumerationValues (\ s a -> s{_pstrsEnumerationValues = a}) . mapping _List1;
+
+-- | -- | The response status code.
+pstrsResponseStatus :: Lens' PutSlotTypeResponse Int
+pstrsResponseStatus = lens _pstrsResponseStatus (\ s a -> s{_pstrsResponseStatus = a});
+
+instance NFData PutSlotTypeResponse where
diff --git a/gen/Network/AWS/LexModels/Types.hs b/gen/Network/AWS/LexModels/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/Types.hs
@@ -0,0 +1,313 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.LexModels.Types
+-- Copyright   : (c) 2013-2017 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.LexModels.Types
+    (
+    -- * Service Configuration
+      lexModels
+
+    -- * Errors
+    , _PreconditionFailedException
+    , _ConflictException
+    , _NotFoundException
+    , _InternalFailureException
+    , _BadRequestException
+    , _LimitExceededException
+    , _ResourceInUseException
+
+    -- * ChannelType
+    , ChannelType (..)
+
+    -- * ContentType
+    , ContentType (..)
+
+    -- * ExportStatus
+    , ExportStatus (..)
+
+    -- * ExportType
+    , ExportType (..)
+
+    -- * FulfillmentActivityType
+    , FulfillmentActivityType (..)
+
+    -- * LexStatus
+    , LexStatus (..)
+
+    -- * Locale
+    , Locale (..)
+
+    -- * ProcessBehavior
+    , ProcessBehavior (..)
+
+    -- * ResourceType
+    , ResourceType (..)
+
+    -- * SlotConstraint
+    , SlotConstraint (..)
+
+    -- * SlotValueSelectionStrategy
+    , SlotValueSelectionStrategy (..)
+
+    -- * StatusType
+    , StatusType (..)
+
+    -- * BotAliasMetadata
+    , BotAliasMetadata
+    , botAliasMetadata
+    , bamChecksum
+    , bamBotVersion
+    , bamBotName
+    , bamCreatedDate
+    , bamName
+    , bamLastUpdatedDate
+    , bamDescription
+
+    -- * BotChannelAssociation
+    , BotChannelAssociation
+    , botChannelAssociation
+    , bcaBotAlias
+    , bcaBotName
+    , bcaBotConfiguration
+    , bcaCreatedDate
+    , bcaName
+    , bcaType
+    , bcaDescription
+
+    -- * BotMetadata
+    , BotMetadata
+    , botMetadata
+    , bmStatus
+    , bmCreatedDate
+    , bmName
+    , bmVersion
+    , bmLastUpdatedDate
+    , bmDescription
+
+    -- * BuiltinIntentMetadata
+    , BuiltinIntentMetadata
+    , builtinIntentMetadata
+    , bimSignature
+    , bimSupportedLocales
+
+    -- * BuiltinIntentSlot
+    , BuiltinIntentSlot
+    , builtinIntentSlot
+    , bisName
+
+    -- * BuiltinSlotTypeMetadata
+    , BuiltinSlotTypeMetadata
+    , builtinSlotTypeMetadata
+    , bstmSignature
+    , bstmSupportedLocales
+
+    -- * CodeHook
+    , CodeHook
+    , codeHook
+    , chUri
+    , chMessageVersion
+
+    -- * EnumerationValue
+    , EnumerationValue
+    , enumerationValue
+    , evSynonyms
+    , evValue
+
+    -- * FollowUpPrompt
+    , FollowUpPrompt
+    , followUpPrompt
+    , fupPrompt
+    , fupRejectionStatement
+
+    -- * FulfillmentActivity
+    , FulfillmentActivity
+    , fulfillmentActivity
+    , faCodeHook
+    , faType
+
+    -- * Intent
+    , Intent
+    , intent
+    , iIntentName
+    , iIntentVersion
+
+    -- * IntentMetadata
+    , IntentMetadata
+    , intentMetadata
+    , imCreatedDate
+    , imName
+    , imVersion
+    , imLastUpdatedDate
+    , imDescription
+
+    -- * Message
+    , Message
+    , message
+    , mContentType
+    , mContent
+
+    -- * Prompt
+    , Prompt
+    , prompt
+    , pResponseCard
+    , pMessages
+    , pMaxAttempts
+
+    -- * Slot
+    , Slot
+    , slot
+    , sSlotType
+    , sValueElicitationPrompt
+    , sResponseCard
+    , sPriority
+    , sSlotTypeVersion
+    , sSampleUtterances
+    , sDescription
+    , sName
+    , sSlotConstraint
+
+    -- * SlotTypeMetadata
+    , SlotTypeMetadata
+    , slotTypeMetadata
+    , stmCreatedDate
+    , stmName
+    , stmVersion
+    , stmLastUpdatedDate
+    , stmDescription
+
+    -- * Statement
+    , Statement
+    , statement
+    , staResponseCard
+    , staMessages
+
+    -- * UtteranceData
+    , UtteranceData
+    , utteranceData
+    , udFirstUtteredDate
+    , udCount
+    , udUtteranceString
+    , udLastUtteredDate
+    , udDistinctUsers
+
+    -- * UtteranceList
+    , UtteranceList
+    , utteranceList
+    , ulBotVersion
+    , ulUtterances
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types.Product
+import Network.AWS.LexModels.Types.Sum
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
+
+-- | API version @2017-04-19@ of the Amazon Lex Model Building Service SDK configuration.
+lexModels :: Service
+lexModels =
+  Service
+  { _svcAbbrev = "LexModels"
+  , _svcSigner = v4
+  , _svcPrefix = "models.lex"
+  , _svcVersion = "2017-04-19"
+  , _svcEndpoint = defaultEndpoint lexModels
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseJSONError "LexModels"
+  , _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 (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 checksum of the resource that you are trying to change does not match the checksum in the request. Check the resource's checksum and try again.
+--
+--
+_PreconditionFailedException :: AsError a => Getting (First ServiceError) a ServiceError
+_PreconditionFailedException =
+  _MatchServiceError lexModels "PreconditionFailedException" . hasStatus 412
+
+
+-- | There was a conflict processing the request. Try your request again.
+--
+--
+_ConflictException :: AsError a => Getting (First ServiceError) a ServiceError
+_ConflictException =
+  _MatchServiceError lexModels "ConflictException" . hasStatus 409
+
+
+-- | 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 lexModels "NotFoundException" . hasStatus 404
+
+
+-- | An internal Amazon Lex error occurred. Try your request again.
+--
+--
+_InternalFailureException :: AsError a => Getting (First ServiceError) a ServiceError
+_InternalFailureException =
+  _MatchServiceError lexModels "InternalFailureException" . hasStatus 500
+
+
+-- | 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 lexModels "BadRequestException" . hasStatus 400
+
+
+-- | The request exceeded a limit. Try your request again.
+--
+--
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException =
+  _MatchServiceError lexModels "LimitExceededException" . hasStatus 429
+
+
+-- | The resource that you are attempting to delete is referred to by another resource. Use this information to remove references to the resource that you are trying to delete.
+--
+--
+-- The body of the exception contains a JSON object that describes the resource.
+--
+-- @{ "resourceType": BOT | BOTALIAS | BOTCHANNEL | INTENT,@
+--
+-- @"resourceReference": {@
+--
+-- @"name": /string/ , "version": /string/ } }@
+--
+_ResourceInUseException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceInUseException =
+  _MatchServiceError lexModels "ResourceInUseException" . hasStatus 400
+
diff --git a/gen/Network/AWS/LexModels/Types/Product.hs b/gen/Network/AWS/LexModels/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/Types/Product.hs
@@ -0,0 +1,1245 @@
+{-# 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.LexModels.Types.Product
+-- Copyright   : (c) 2013-2017 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.LexModels.Types.Product where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types.Sum
+import Network.AWS.Prelude
+
+-- | Provides information about a bot alias.
+--
+--
+--
+-- /See:/ 'botAliasMetadata' smart constructor.
+data BotAliasMetadata = BotAliasMetadata'
+  { _bamChecksum        :: !(Maybe Text)
+  , _bamBotVersion      :: !(Maybe Text)
+  , _bamBotName         :: !(Maybe Text)
+  , _bamCreatedDate     :: !(Maybe POSIX)
+  , _bamName            :: !(Maybe Text)
+  , _bamLastUpdatedDate :: !(Maybe POSIX)
+  , _bamDescription     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BotAliasMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bamChecksum' - Checksum of the bot alias.
+--
+-- * 'bamBotVersion' - The version of the Amazon Lex bot to which the alias points.
+--
+-- * 'bamBotName' - The name of the bot to which the alias points.
+--
+-- * 'bamCreatedDate' - The date that the bot alias was created.
+--
+-- * 'bamName' - The name of the bot alias.
+--
+-- * 'bamLastUpdatedDate' - The date that the bot alias was updated. When you create a resource, the creation date and last updated date are the same.
+--
+-- * 'bamDescription' - A description of the bot alias.
+botAliasMetadata
+    :: BotAliasMetadata
+botAliasMetadata =
+  BotAliasMetadata'
+  { _bamChecksum = Nothing
+  , _bamBotVersion = Nothing
+  , _bamBotName = Nothing
+  , _bamCreatedDate = Nothing
+  , _bamName = Nothing
+  , _bamLastUpdatedDate = Nothing
+  , _bamDescription = Nothing
+  }
+
+
+-- | Checksum of the bot alias.
+bamChecksum :: Lens' BotAliasMetadata (Maybe Text)
+bamChecksum = lens _bamChecksum (\ s a -> s{_bamChecksum = a});
+
+-- | The version of the Amazon Lex bot to which the alias points.
+bamBotVersion :: Lens' BotAliasMetadata (Maybe Text)
+bamBotVersion = lens _bamBotVersion (\ s a -> s{_bamBotVersion = a});
+
+-- | The name of the bot to which the alias points.
+bamBotName :: Lens' BotAliasMetadata (Maybe Text)
+bamBotName = lens _bamBotName (\ s a -> s{_bamBotName = a});
+
+-- | The date that the bot alias was created.
+bamCreatedDate :: Lens' BotAliasMetadata (Maybe UTCTime)
+bamCreatedDate = lens _bamCreatedDate (\ s a -> s{_bamCreatedDate = a}) . mapping _Time;
+
+-- | The name of the bot alias.
+bamName :: Lens' BotAliasMetadata (Maybe Text)
+bamName = lens _bamName (\ s a -> s{_bamName = a});
+
+-- | The date that the bot alias was updated. When you create a resource, the creation date and last updated date are the same.
+bamLastUpdatedDate :: Lens' BotAliasMetadata (Maybe UTCTime)
+bamLastUpdatedDate = lens _bamLastUpdatedDate (\ s a -> s{_bamLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the bot alias.
+bamDescription :: Lens' BotAliasMetadata (Maybe Text)
+bamDescription = lens _bamDescription (\ s a -> s{_bamDescription = a});
+
+instance FromJSON BotAliasMetadata where
+        parseJSON
+          = withObject "BotAliasMetadata"
+              (\ x ->
+                 BotAliasMetadata' <$>
+                   (x .:? "checksum") <*> (x .:? "botVersion") <*>
+                     (x .:? "botName")
+                     <*> (x .:? "createdDate")
+                     <*> (x .:? "name")
+                     <*> (x .:? "lastUpdatedDate")
+                     <*> (x .:? "description"))
+
+instance Hashable BotAliasMetadata where
+
+instance NFData BotAliasMetadata where
+
+-- | Represents an association between an Amazon Lex bot and an external messaging platform.
+--
+--
+--
+-- /See:/ 'botChannelAssociation' smart constructor.
+data BotChannelAssociation = BotChannelAssociation'
+  { _bcaBotAlias         :: !(Maybe Text)
+  , _bcaBotName          :: !(Maybe Text)
+  , _bcaBotConfiguration :: !(Maybe (Sensitive (Map Text Text)))
+  , _bcaCreatedDate      :: !(Maybe POSIX)
+  , _bcaName             :: !(Maybe Text)
+  , _bcaType             :: !(Maybe ChannelType)
+  , _bcaDescription      :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BotChannelAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcaBotAlias' - An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+--
+-- * 'bcaBotName' - The name of the Amazon Lex bot to which this association is being made.
+--
+-- * 'bcaBotConfiguration' - Provides information necessary to communicate with the messaging platform.
+--
+-- * 'bcaCreatedDate' - The date that the association between the Amazon Lex bot and the channel was created.
+--
+-- * 'bcaName' - The name of the association between the bot and the channel.
+--
+-- * 'bcaType' - Specifies the type of association by indicating the type of channel being established between the Amazon Lex bot and the external messaging platform.
+--
+-- * 'bcaDescription' - A text description of the association you are creating.
+botChannelAssociation
+    :: BotChannelAssociation
+botChannelAssociation =
+  BotChannelAssociation'
+  { _bcaBotAlias = Nothing
+  , _bcaBotName = Nothing
+  , _bcaBotConfiguration = Nothing
+  , _bcaCreatedDate = Nothing
+  , _bcaName = Nothing
+  , _bcaType = Nothing
+  , _bcaDescription = Nothing
+  }
+
+
+-- | An alias pointing to the specific version of the Amazon Lex bot to which this association is being made.
+bcaBotAlias :: Lens' BotChannelAssociation (Maybe Text)
+bcaBotAlias = lens _bcaBotAlias (\ s a -> s{_bcaBotAlias = a});
+
+-- | The name of the Amazon Lex bot to which this association is being made.
+bcaBotName :: Lens' BotChannelAssociation (Maybe Text)
+bcaBotName = lens _bcaBotName (\ s a -> s{_bcaBotName = a});
+
+-- | Provides information necessary to communicate with the messaging platform.
+bcaBotConfiguration :: Lens' BotChannelAssociation (Maybe (HashMap Text Text))
+bcaBotConfiguration = lens _bcaBotConfiguration (\ s a -> s{_bcaBotConfiguration = a}) . mapping (_Sensitive . _Map);
+
+-- | The date that the association between the Amazon Lex bot and the channel was created.
+bcaCreatedDate :: Lens' BotChannelAssociation (Maybe UTCTime)
+bcaCreatedDate = lens _bcaCreatedDate (\ s a -> s{_bcaCreatedDate = a}) . mapping _Time;
+
+-- | The name of the association between the bot and the channel.
+bcaName :: Lens' BotChannelAssociation (Maybe Text)
+bcaName = lens _bcaName (\ s a -> s{_bcaName = a});
+
+-- | Specifies the type of association by indicating the type of channel being established between the Amazon Lex bot and the external messaging platform.
+bcaType :: Lens' BotChannelAssociation (Maybe ChannelType)
+bcaType = lens _bcaType (\ s a -> s{_bcaType = a});
+
+-- | A text description of the association you are creating.
+bcaDescription :: Lens' BotChannelAssociation (Maybe Text)
+bcaDescription = lens _bcaDescription (\ s a -> s{_bcaDescription = a});
+
+instance FromJSON BotChannelAssociation where
+        parseJSON
+          = withObject "BotChannelAssociation"
+              (\ x ->
+                 BotChannelAssociation' <$>
+                   (x .:? "botAlias") <*> (x .:? "botName") <*>
+                     (x .:? "botConfiguration" .!= mempty)
+                     <*> (x .:? "createdDate")
+                     <*> (x .:? "name")
+                     <*> (x .:? "type")
+                     <*> (x .:? "description"))
+
+instance Hashable BotChannelAssociation where
+
+instance NFData BotChannelAssociation where
+
+-- | Provides information about a bot. .
+--
+--
+--
+-- /See:/ 'botMetadata' smart constructor.
+data BotMetadata = BotMetadata'
+  { _bmStatus          :: !(Maybe LexStatus)
+  , _bmCreatedDate     :: !(Maybe POSIX)
+  , _bmName            :: !(Maybe Text)
+  , _bmVersion         :: !(Maybe Text)
+  , _bmLastUpdatedDate :: !(Maybe POSIX)
+  , _bmDescription     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BotMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bmStatus' - The status of the bot.
+--
+-- * 'bmCreatedDate' - The date that the bot was created.
+--
+-- * 'bmName' - The name of the bot.
+--
+-- * 'bmVersion' - The version of the bot. For a new bot, the version is always @> LATEST@ .
+--
+-- * 'bmLastUpdatedDate' - The date that the bot was updated. When you create a bot, the creation date and last updated date are the same.
+--
+-- * 'bmDescription' - A description of the bot.
+botMetadata
+    :: BotMetadata
+botMetadata =
+  BotMetadata'
+  { _bmStatus = Nothing
+  , _bmCreatedDate = Nothing
+  , _bmName = Nothing
+  , _bmVersion = Nothing
+  , _bmLastUpdatedDate = Nothing
+  , _bmDescription = Nothing
+  }
+
+
+-- | The status of the bot.
+bmStatus :: Lens' BotMetadata (Maybe LexStatus)
+bmStatus = lens _bmStatus (\ s a -> s{_bmStatus = a});
+
+-- | The date that the bot was created.
+bmCreatedDate :: Lens' BotMetadata (Maybe UTCTime)
+bmCreatedDate = lens _bmCreatedDate (\ s a -> s{_bmCreatedDate = a}) . mapping _Time;
+
+-- | The name of the bot.
+bmName :: Lens' BotMetadata (Maybe Text)
+bmName = lens _bmName (\ s a -> s{_bmName = a});
+
+-- | The version of the bot. For a new bot, the version is always @> LATEST@ .
+bmVersion :: Lens' BotMetadata (Maybe Text)
+bmVersion = lens _bmVersion (\ s a -> s{_bmVersion = a});
+
+-- | The date that the bot was updated. When you create a bot, the creation date and last updated date are the same.
+bmLastUpdatedDate :: Lens' BotMetadata (Maybe UTCTime)
+bmLastUpdatedDate = lens _bmLastUpdatedDate (\ s a -> s{_bmLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the bot.
+bmDescription :: Lens' BotMetadata (Maybe Text)
+bmDescription = lens _bmDescription (\ s a -> s{_bmDescription = a});
+
+instance FromJSON BotMetadata where
+        parseJSON
+          = withObject "BotMetadata"
+              (\ x ->
+                 BotMetadata' <$>
+                   (x .:? "status") <*> (x .:? "createdDate") <*>
+                     (x .:? "name")
+                     <*> (x .:? "version")
+                     <*> (x .:? "lastUpdatedDate")
+                     <*> (x .:? "description"))
+
+instance Hashable BotMetadata where
+
+instance NFData BotMetadata where
+
+-- | Provides metadata for a built-in intent.
+--
+--
+--
+-- /See:/ 'builtinIntentMetadata' smart constructor.
+data BuiltinIntentMetadata = BuiltinIntentMetadata'
+  { _bimSignature        :: !(Maybe Text)
+  , _bimSupportedLocales :: !(Maybe [Locale])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BuiltinIntentMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bimSignature' - A unique identifier for the built-in intent. To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+--
+-- * 'bimSupportedLocales' - A list of identifiers for the locales that the intent supports.
+builtinIntentMetadata
+    :: BuiltinIntentMetadata
+builtinIntentMetadata =
+  BuiltinIntentMetadata'
+  {_bimSignature = Nothing, _bimSupportedLocales = Nothing}
+
+
+-- | A unique identifier for the built-in intent. To find the signature for an intent, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/standard-intents Standard Built-in Intents> in the /Alexa Skills Kit/ .
+bimSignature :: Lens' BuiltinIntentMetadata (Maybe Text)
+bimSignature = lens _bimSignature (\ s a -> s{_bimSignature = a});
+
+-- | A list of identifiers for the locales that the intent supports.
+bimSupportedLocales :: Lens' BuiltinIntentMetadata [Locale]
+bimSupportedLocales = lens _bimSupportedLocales (\ s a -> s{_bimSupportedLocales = a}) . _Default . _Coerce;
+
+instance FromJSON BuiltinIntentMetadata where
+        parseJSON
+          = withObject "BuiltinIntentMetadata"
+              (\ x ->
+                 BuiltinIntentMetadata' <$>
+                   (x .:? "signature") <*>
+                     (x .:? "supportedLocales" .!= mempty))
+
+instance Hashable BuiltinIntentMetadata where
+
+instance NFData BuiltinIntentMetadata where
+
+-- | Provides information about a slot used in a built-in intent.
+--
+--
+--
+-- /See:/ 'builtinIntentSlot' smart constructor.
+newtype BuiltinIntentSlot = BuiltinIntentSlot'
+  { _bisName :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BuiltinIntentSlot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bisName' - A list of the slots defined for the intent.
+builtinIntentSlot
+    :: BuiltinIntentSlot
+builtinIntentSlot = BuiltinIntentSlot' {_bisName = Nothing}
+
+
+-- | A list of the slots defined for the intent.
+bisName :: Lens' BuiltinIntentSlot (Maybe Text)
+bisName = lens _bisName (\ s a -> s{_bisName = a});
+
+instance FromJSON BuiltinIntentSlot where
+        parseJSON
+          = withObject "BuiltinIntentSlot"
+              (\ x -> BuiltinIntentSlot' <$> (x .:? "name"))
+
+instance Hashable BuiltinIntentSlot where
+
+instance NFData BuiltinIntentSlot where
+
+-- | Provides information about a built in slot type.
+--
+--
+--
+-- /See:/ 'builtinSlotTypeMetadata' smart constructor.
+data BuiltinSlotTypeMetadata = BuiltinSlotTypeMetadata'
+  { _bstmSignature        :: !(Maybe Text)
+  , _bstmSupportedLocales :: !(Maybe [Locale])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BuiltinSlotTypeMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bstmSignature' - A unique identifier for the built-in slot type. To find the signature for a slot type, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/slot-type-reference Slot Type Reference> in the /Alexa Skills Kit/ .
+--
+-- * 'bstmSupportedLocales' - A list of target locales for the slot.
+builtinSlotTypeMetadata
+    :: BuiltinSlotTypeMetadata
+builtinSlotTypeMetadata =
+  BuiltinSlotTypeMetadata'
+  {_bstmSignature = Nothing, _bstmSupportedLocales = Nothing}
+
+
+-- | A unique identifier for the built-in slot type. To find the signature for a slot type, see <https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/slot-type-reference Slot Type Reference> in the /Alexa Skills Kit/ .
+bstmSignature :: Lens' BuiltinSlotTypeMetadata (Maybe Text)
+bstmSignature = lens _bstmSignature (\ s a -> s{_bstmSignature = a});
+
+-- | A list of target locales for the slot.
+bstmSupportedLocales :: Lens' BuiltinSlotTypeMetadata [Locale]
+bstmSupportedLocales = lens _bstmSupportedLocales (\ s a -> s{_bstmSupportedLocales = a}) . _Default . _Coerce;
+
+instance FromJSON BuiltinSlotTypeMetadata where
+        parseJSON
+          = withObject "BuiltinSlotTypeMetadata"
+              (\ x ->
+                 BuiltinSlotTypeMetadata' <$>
+                   (x .:? "signature") <*>
+                     (x .:? "supportedLocales" .!= mempty))
+
+instance Hashable BuiltinSlotTypeMetadata where
+
+instance NFData BuiltinSlotTypeMetadata where
+
+-- | Specifies a Lambda function that verifies requests to a bot or fulfills the user's request to a bot..
+--
+--
+--
+-- /See:/ 'codeHook' smart constructor.
+data CodeHook = CodeHook'
+  { _chUri            :: !Text
+  , _chMessageVersion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CodeHook' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'chUri' - The Amazon Resource Name (ARN) of the Lambda function.
+--
+-- * 'chMessageVersion' - The version of the request-response that you want Amazon Lex to use to invoke your Lambda function. For more information, see 'using-lambda' .
+codeHook
+    :: Text -- ^ 'chUri'
+    -> Text -- ^ 'chMessageVersion'
+    -> CodeHook
+codeHook pUri_ pMessageVersion_ =
+  CodeHook' {_chUri = pUri_, _chMessageVersion = pMessageVersion_}
+
+
+-- | The Amazon Resource Name (ARN) of the Lambda function.
+chUri :: Lens' CodeHook Text
+chUri = lens _chUri (\ s a -> s{_chUri = a});
+
+-- | The version of the request-response that you want Amazon Lex to use to invoke your Lambda function. For more information, see 'using-lambda' .
+chMessageVersion :: Lens' CodeHook Text
+chMessageVersion = lens _chMessageVersion (\ s a -> s{_chMessageVersion = a});
+
+instance FromJSON CodeHook where
+        parseJSON
+          = withObject "CodeHook"
+              (\ x ->
+                 CodeHook' <$>
+                   (x .: "uri") <*> (x .: "messageVersion"))
+
+instance Hashable CodeHook where
+
+instance NFData CodeHook where
+
+instance ToJSON CodeHook where
+        toJSON CodeHook'{..}
+          = object
+              (catMaybes
+                 [Just ("uri" .= _chUri),
+                  Just ("messageVersion" .= _chMessageVersion)])
+
+-- | Each slot type can have a set of values. Each enumeration value represents a value the slot type can take.
+--
+--
+-- For example, a pizza ordering bot could have a slot type that specifies the type of crust that the pizza should have. The slot type could include the values
+--
+--     * thick
+--
+--     * thin
+--
+--     * stuffed
+--
+--
+--
+--
+-- /See:/ 'enumerationValue' smart constructor.
+data EnumerationValue = EnumerationValue'
+  { _evSynonyms :: !(Maybe [Text])
+  , _evValue    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EnumerationValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'evSynonyms' - Additional values related to the slot type value.
+--
+-- * 'evValue' - The value of the slot type.
+enumerationValue
+    :: Text -- ^ 'evValue'
+    -> EnumerationValue
+enumerationValue pValue_ =
+  EnumerationValue' {_evSynonyms = Nothing, _evValue = pValue_}
+
+
+-- | Additional values related to the slot type value.
+evSynonyms :: Lens' EnumerationValue [Text]
+evSynonyms = lens _evSynonyms (\ s a -> s{_evSynonyms = a}) . _Default . _Coerce;
+
+-- | The value of the slot type.
+evValue :: Lens' EnumerationValue Text
+evValue = lens _evValue (\ s a -> s{_evValue = a});
+
+instance FromJSON EnumerationValue where
+        parseJSON
+          = withObject "EnumerationValue"
+              (\ x ->
+                 EnumerationValue' <$>
+                   (x .:? "synonyms" .!= mempty) <*> (x .: "value"))
+
+instance Hashable EnumerationValue where
+
+instance NFData EnumerationValue where
+
+instance ToJSON EnumerationValue where
+        toJSON EnumerationValue'{..}
+          = object
+              (catMaybes
+                 [("synonyms" .=) <$> _evSynonyms,
+                  Just ("value" .= _evValue)])
+
+-- | A prompt for additional activity after an intent is fulfilled. For example, after the @OrderPizza@ intent is fulfilled, you might prompt the user to find out whether the user wants to order drinks.
+--
+--
+--
+-- /See:/ 'followUpPrompt' smart constructor.
+data FollowUpPrompt = FollowUpPrompt'
+  { _fupPrompt             :: !Prompt
+  , _fupRejectionStatement :: !Statement
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'FollowUpPrompt' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fupPrompt' - Prompts for information from the user.
+--
+-- * 'fupRejectionStatement' - If the user answers "no" to the question defined in the @prompt@ field, Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+followUpPrompt
+    :: Prompt -- ^ 'fupPrompt'
+    -> Statement -- ^ 'fupRejectionStatement'
+    -> FollowUpPrompt
+followUpPrompt pPrompt_ pRejectionStatement_ =
+  FollowUpPrompt'
+  {_fupPrompt = pPrompt_, _fupRejectionStatement = pRejectionStatement_}
+
+
+-- | Prompts for information from the user.
+fupPrompt :: Lens' FollowUpPrompt Prompt
+fupPrompt = lens _fupPrompt (\ s a -> s{_fupPrompt = a});
+
+-- | If the user answers "no" to the question defined in the @prompt@ field, Amazon Lex responds with this statement to acknowledge that the intent was canceled.
+fupRejectionStatement :: Lens' FollowUpPrompt Statement
+fupRejectionStatement = lens _fupRejectionStatement (\ s a -> s{_fupRejectionStatement = a});
+
+instance FromJSON FollowUpPrompt where
+        parseJSON
+          = withObject "FollowUpPrompt"
+              (\ x ->
+                 FollowUpPrompt' <$>
+                   (x .: "prompt") <*> (x .: "rejectionStatement"))
+
+instance Hashable FollowUpPrompt where
+
+instance NFData FollowUpPrompt where
+
+instance ToJSON FollowUpPrompt where
+        toJSON FollowUpPrompt'{..}
+          = object
+              (catMaybes
+                 [Just ("prompt" .= _fupPrompt),
+                  Just
+                    ("rejectionStatement" .= _fupRejectionStatement)])
+
+-- | Describes how the intent is fulfilled after the user provides all of the information required for the intent. You can provide a Lambda function to process the intent, or you can return the intent information to the client application. We recommend that you use a Lambda function so that the relevant logic lives in the Cloud and limit the client-side code primarily to presentation. If you need to update the logic, you only update the Lambda function; you don't need to upgrade your client application.
+--
+--
+-- Consider the following examples:
+--
+--     * In a pizza ordering application, after the user provides all of the information for placing an order, you use a Lambda function to place an order with a pizzeria.
+--
+--     * In a gaming application, when a user says "pick up a rock," this information must go back to the client application so that it can perform the operation and update the graphics. In this case, you want Amazon Lex to return the intent data to the client.
+--
+--
+--
+--
+-- /See:/ 'fulfillmentActivity' smart constructor.
+data FulfillmentActivity = FulfillmentActivity'
+  { _faCodeHook :: !(Maybe CodeHook)
+  , _faType     :: !FulfillmentActivityType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'FulfillmentActivity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'faCodeHook' - A description of the Lambda function that is run to fulfill the intent.
+--
+-- * 'faType' - How the intent should be fulfilled, either by running a Lambda function or by returning the slot data to the client application.
+fulfillmentActivity
+    :: FulfillmentActivityType -- ^ 'faType'
+    -> FulfillmentActivity
+fulfillmentActivity pType_ =
+  FulfillmentActivity' {_faCodeHook = Nothing, _faType = pType_}
+
+
+-- | A description of the Lambda function that is run to fulfill the intent.
+faCodeHook :: Lens' FulfillmentActivity (Maybe CodeHook)
+faCodeHook = lens _faCodeHook (\ s a -> s{_faCodeHook = a});
+
+-- | How the intent should be fulfilled, either by running a Lambda function or by returning the slot data to the client application.
+faType :: Lens' FulfillmentActivity FulfillmentActivityType
+faType = lens _faType (\ s a -> s{_faType = a});
+
+instance FromJSON FulfillmentActivity where
+        parseJSON
+          = withObject "FulfillmentActivity"
+              (\ x ->
+                 FulfillmentActivity' <$>
+                   (x .:? "codeHook") <*> (x .: "type"))
+
+instance Hashable FulfillmentActivity where
+
+instance NFData FulfillmentActivity where
+
+instance ToJSON FulfillmentActivity where
+        toJSON FulfillmentActivity'{..}
+          = object
+              (catMaybes
+                 [("codeHook" .=) <$> _faCodeHook,
+                  Just ("type" .= _faType)])
+
+-- | Identifies the specific version of an intent.
+--
+--
+--
+-- /See:/ 'intent' smart constructor.
+data Intent = Intent'
+  { _iIntentName    :: !Text
+  , _iIntentVersion :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Intent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iIntentName' - The name of the intent.
+--
+-- * 'iIntentVersion' - The version of the intent.
+intent
+    :: Text -- ^ 'iIntentName'
+    -> Text -- ^ 'iIntentVersion'
+    -> Intent
+intent pIntentName_ pIntentVersion_ =
+  Intent' {_iIntentName = pIntentName_, _iIntentVersion = pIntentVersion_}
+
+
+-- | The name of the intent.
+iIntentName :: Lens' Intent Text
+iIntentName = lens _iIntentName (\ s a -> s{_iIntentName = a});
+
+-- | The version of the intent.
+iIntentVersion :: Lens' Intent Text
+iIntentVersion = lens _iIntentVersion (\ s a -> s{_iIntentVersion = a});
+
+instance FromJSON Intent where
+        parseJSON
+          = withObject "Intent"
+              (\ x ->
+                 Intent' <$>
+                   (x .: "intentName") <*> (x .: "intentVersion"))
+
+instance Hashable Intent where
+
+instance NFData Intent where
+
+instance ToJSON Intent where
+        toJSON Intent'{..}
+          = object
+              (catMaybes
+                 [Just ("intentName" .= _iIntentName),
+                  Just ("intentVersion" .= _iIntentVersion)])
+
+-- | Provides information about an intent.
+--
+--
+--
+-- /See:/ 'intentMetadata' smart constructor.
+data IntentMetadata = IntentMetadata'
+  { _imCreatedDate     :: !(Maybe POSIX)
+  , _imName            :: !(Maybe Text)
+  , _imVersion         :: !(Maybe Text)
+  , _imLastUpdatedDate :: !(Maybe POSIX)
+  , _imDescription     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'IntentMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'imCreatedDate' - The date that the intent was created.
+--
+-- * 'imName' - The name of the intent.
+--
+-- * 'imVersion' - The version of the intent.
+--
+-- * 'imLastUpdatedDate' - The date that the intent was updated. When you create an intent, the creation date and last updated date are the same.
+--
+-- * 'imDescription' - A description of the intent.
+intentMetadata
+    :: IntentMetadata
+intentMetadata =
+  IntentMetadata'
+  { _imCreatedDate = Nothing
+  , _imName = Nothing
+  , _imVersion = Nothing
+  , _imLastUpdatedDate = Nothing
+  , _imDescription = Nothing
+  }
+
+
+-- | The date that the intent was created.
+imCreatedDate :: Lens' IntentMetadata (Maybe UTCTime)
+imCreatedDate = lens _imCreatedDate (\ s a -> s{_imCreatedDate = a}) . mapping _Time;
+
+-- | The name of the intent.
+imName :: Lens' IntentMetadata (Maybe Text)
+imName = lens _imName (\ s a -> s{_imName = a});
+
+-- | The version of the intent.
+imVersion :: Lens' IntentMetadata (Maybe Text)
+imVersion = lens _imVersion (\ s a -> s{_imVersion = a});
+
+-- | The date that the intent was updated. When you create an intent, the creation date and last updated date are the same.
+imLastUpdatedDate :: Lens' IntentMetadata (Maybe UTCTime)
+imLastUpdatedDate = lens _imLastUpdatedDate (\ s a -> s{_imLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the intent.
+imDescription :: Lens' IntentMetadata (Maybe Text)
+imDescription = lens _imDescription (\ s a -> s{_imDescription = a});
+
+instance FromJSON IntentMetadata where
+        parseJSON
+          = withObject "IntentMetadata"
+              (\ x ->
+                 IntentMetadata' <$>
+                   (x .:? "createdDate") <*> (x .:? "name") <*>
+                     (x .:? "version")
+                     <*> (x .:? "lastUpdatedDate")
+                     <*> (x .:? "description"))
+
+instance Hashable IntentMetadata where
+
+instance NFData IntentMetadata where
+
+-- | The message object that provides the message text and its type.
+--
+--
+--
+-- /See:/ 'message' smart constructor.
+data Message = Message'
+  { _mContentType :: !ContentType
+  , _mContent     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Message' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mContentType' - The content type of the message string.
+--
+-- * 'mContent' - The text of the message.
+message
+    :: ContentType -- ^ 'mContentType'
+    -> Text -- ^ 'mContent'
+    -> Message
+message pContentType_ pContent_ =
+  Message' {_mContentType = pContentType_, _mContent = pContent_}
+
+
+-- | The content type of the message string.
+mContentType :: Lens' Message ContentType
+mContentType = lens _mContentType (\ s a -> s{_mContentType = a});
+
+-- | The text of the message.
+mContent :: Lens' Message Text
+mContent = lens _mContent (\ s a -> s{_mContent = a});
+
+instance FromJSON Message where
+        parseJSON
+          = withObject "Message"
+              (\ x ->
+                 Message' <$>
+                   (x .: "contentType") <*> (x .: "content"))
+
+instance Hashable Message where
+
+instance NFData Message where
+
+instance ToJSON Message where
+        toJSON Message'{..}
+          = object
+              (catMaybes
+                 [Just ("contentType" .= _mContentType),
+                  Just ("content" .= _mContent)])
+
+-- | Obtains information from the user. To define a prompt, provide one or more messages and specify the number of attempts to get information from the user. If you provide more than one message, Amazon Lex chooses one of the messages to use to prompt the user. For more information, see 'how-it-works' .
+--
+--
+--
+-- /See:/ 'prompt' smart constructor.
+data Prompt = Prompt'
+  { _pResponseCard :: !(Maybe Text)
+  , _pMessages     :: !(List1 Message)
+  , _pMaxAttempts  :: !Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Prompt' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pResponseCard' - A response card. Amazon Lex uses this prompt at runtime, in the @PostText@ API response. It substitutes session attributes and slot values for placeholders in the response card. For more information, see 'ex-resp-card' .
+--
+-- * 'pMessages' - An array of objects, each of which provides a message string and its type. You can specify the message string in plain text or in Speech Synthesis Markup Language (SSML).
+--
+-- * 'pMaxAttempts' - The number of times to prompt the user for information.
+prompt
+    :: NonEmpty Message -- ^ 'pMessages'
+    -> Natural -- ^ 'pMaxAttempts'
+    -> Prompt
+prompt pMessages_ pMaxAttempts_ =
+  Prompt'
+  { _pResponseCard = Nothing
+  , _pMessages = _List1 # pMessages_
+  , _pMaxAttempts = _Nat # pMaxAttempts_
+  }
+
+
+-- | A response card. Amazon Lex uses this prompt at runtime, in the @PostText@ API response. It substitutes session attributes and slot values for placeholders in the response card. For more information, see 'ex-resp-card' .
+pResponseCard :: Lens' Prompt (Maybe Text)
+pResponseCard = lens _pResponseCard (\ s a -> s{_pResponseCard = a});
+
+-- | An array of objects, each of which provides a message string and its type. You can specify the message string in plain text or in Speech Synthesis Markup Language (SSML).
+pMessages :: Lens' Prompt (NonEmpty Message)
+pMessages = lens _pMessages (\ s a -> s{_pMessages = a}) . _List1;
+
+-- | The number of times to prompt the user for information.
+pMaxAttempts :: Lens' Prompt Natural
+pMaxAttempts = lens _pMaxAttempts (\ s a -> s{_pMaxAttempts = a}) . _Nat;
+
+instance FromJSON Prompt where
+        parseJSON
+          = withObject "Prompt"
+              (\ x ->
+                 Prompt' <$>
+                   (x .:? "responseCard") <*> (x .: "messages") <*>
+                     (x .: "maxAttempts"))
+
+instance Hashable Prompt where
+
+instance NFData Prompt where
+
+instance ToJSON Prompt where
+        toJSON Prompt'{..}
+          = object
+              (catMaybes
+                 [("responseCard" .=) <$> _pResponseCard,
+                  Just ("messages" .= _pMessages),
+                  Just ("maxAttempts" .= _pMaxAttempts)])
+
+-- | Identifies the version of a specific slot.
+--
+--
+--
+-- /See:/ 'slot' smart constructor.
+data Slot = Slot'
+  { _sSlotType               :: !(Maybe Text)
+  , _sValueElicitationPrompt :: !(Maybe Prompt)
+  , _sResponseCard           :: !(Maybe Text)
+  , _sPriority               :: !(Maybe Nat)
+  , _sSlotTypeVersion        :: !(Maybe Text)
+  , _sSampleUtterances       :: !(Maybe [Text])
+  , _sDescription            :: !(Maybe Text)
+  , _sName                   :: !Text
+  , _sSlotConstraint         :: !SlotConstraint
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Slot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sSlotType' - The type of the slot, either a custom slot type that you defined or one of the built-in slot types.
+--
+-- * 'sValueElicitationPrompt' - The prompt that Amazon Lex uses to elicit the slot value from the user.
+--
+-- * 'sResponseCard' - A set of possible responses for the slot type used by text-based clients. A user chooses an option from the response card, instead of using text to reply.
+--
+-- * 'sPriority' - Directs Lex the order in which to elicit this slot value from the user. For example, if the intent has two slots with priorities 1 and 2, AWS Lex first elicits a value for the slot with priority 1. If multiple slots share the same priority, the order in which Lex elicits values is arbitrary.
+--
+-- * 'sSlotTypeVersion' - The version of the slot type.
+--
+-- * 'sSampleUtterances' - If you know a specific pattern with which users might respond to an Amazon Lex request for a slot value, you can provide those utterances to improve accuracy. This is optional. In most cases, Amazon Lex is capable of understanding user utterances.
+--
+-- * 'sDescription' - A description of the slot.
+--
+-- * 'sName' - The name of the slot.
+--
+-- * 'sSlotConstraint' - Specifies whether the slot is required or optional.
+slot
+    :: Text -- ^ 'sName'
+    -> SlotConstraint -- ^ 'sSlotConstraint'
+    -> Slot
+slot pName_ pSlotConstraint_ =
+  Slot'
+  { _sSlotType = Nothing
+  , _sValueElicitationPrompt = Nothing
+  , _sResponseCard = Nothing
+  , _sPriority = Nothing
+  , _sSlotTypeVersion = Nothing
+  , _sSampleUtterances = Nothing
+  , _sDescription = Nothing
+  , _sName = pName_
+  , _sSlotConstraint = pSlotConstraint_
+  }
+
+
+-- | The type of the slot, either a custom slot type that you defined or one of the built-in slot types.
+sSlotType :: Lens' Slot (Maybe Text)
+sSlotType = lens _sSlotType (\ s a -> s{_sSlotType = a});
+
+-- | The prompt that Amazon Lex uses to elicit the slot value from the user.
+sValueElicitationPrompt :: Lens' Slot (Maybe Prompt)
+sValueElicitationPrompt = lens _sValueElicitationPrompt (\ s a -> s{_sValueElicitationPrompt = a});
+
+-- | A set of possible responses for the slot type used by text-based clients. A user chooses an option from the response card, instead of using text to reply.
+sResponseCard :: Lens' Slot (Maybe Text)
+sResponseCard = lens _sResponseCard (\ s a -> s{_sResponseCard = a});
+
+-- | Directs Lex the order in which to elicit this slot value from the user. For example, if the intent has two slots with priorities 1 and 2, AWS Lex first elicits a value for the slot with priority 1. If multiple slots share the same priority, the order in which Lex elicits values is arbitrary.
+sPriority :: Lens' Slot (Maybe Natural)
+sPriority = lens _sPriority (\ s a -> s{_sPriority = a}) . mapping _Nat;
+
+-- | The version of the slot type.
+sSlotTypeVersion :: Lens' Slot (Maybe Text)
+sSlotTypeVersion = lens _sSlotTypeVersion (\ s a -> s{_sSlotTypeVersion = a});
+
+-- | If you know a specific pattern with which users might respond to an Amazon Lex request for a slot value, you can provide those utterances to improve accuracy. This is optional. In most cases, Amazon Lex is capable of understanding user utterances.
+sSampleUtterances :: Lens' Slot [Text]
+sSampleUtterances = lens _sSampleUtterances (\ s a -> s{_sSampleUtterances = a}) . _Default . _Coerce;
+
+-- | A description of the slot.
+sDescription :: Lens' Slot (Maybe Text)
+sDescription = lens _sDescription (\ s a -> s{_sDescription = a});
+
+-- | The name of the slot.
+sName :: Lens' Slot Text
+sName = lens _sName (\ s a -> s{_sName = a});
+
+-- | Specifies whether the slot is required or optional.
+sSlotConstraint :: Lens' Slot SlotConstraint
+sSlotConstraint = lens _sSlotConstraint (\ s a -> s{_sSlotConstraint = a});
+
+instance FromJSON Slot where
+        parseJSON
+          = withObject "Slot"
+              (\ x ->
+                 Slot' <$>
+                   (x .:? "slotType") <*>
+                     (x .:? "valueElicitationPrompt")
+                     <*> (x .:? "responseCard")
+                     <*> (x .:? "priority")
+                     <*> (x .:? "slotTypeVersion")
+                     <*> (x .:? "sampleUtterances" .!= mempty)
+                     <*> (x .:? "description")
+                     <*> (x .: "name")
+                     <*> (x .: "slotConstraint"))
+
+instance Hashable Slot where
+
+instance NFData Slot where
+
+instance ToJSON Slot where
+        toJSON Slot'{..}
+          = object
+              (catMaybes
+                 [("slotType" .=) <$> _sSlotType,
+                  ("valueElicitationPrompt" .=) <$>
+                    _sValueElicitationPrompt,
+                  ("responseCard" .=) <$> _sResponseCard,
+                  ("priority" .=) <$> _sPriority,
+                  ("slotTypeVersion" .=) <$> _sSlotTypeVersion,
+                  ("sampleUtterances" .=) <$> _sSampleUtterances,
+                  ("description" .=) <$> _sDescription,
+                  Just ("name" .= _sName),
+                  Just ("slotConstraint" .= _sSlotConstraint)])
+
+-- | Provides information about a slot type..
+--
+--
+--
+-- /See:/ 'slotTypeMetadata' smart constructor.
+data SlotTypeMetadata = SlotTypeMetadata'
+  { _stmCreatedDate     :: !(Maybe POSIX)
+  , _stmName            :: !(Maybe Text)
+  , _stmVersion         :: !(Maybe Text)
+  , _stmLastUpdatedDate :: !(Maybe POSIX)
+  , _stmDescription     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SlotTypeMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stmCreatedDate' - The date that the slot type was created.
+--
+-- * 'stmName' - The name of the slot type.
+--
+-- * 'stmVersion' - The version of the slot type.
+--
+-- * 'stmLastUpdatedDate' - The date that the slot type was updated. When you create a resource, the creation date and last updated date are the same.
+--
+-- * 'stmDescription' - A description of the slot type.
+slotTypeMetadata
+    :: SlotTypeMetadata
+slotTypeMetadata =
+  SlotTypeMetadata'
+  { _stmCreatedDate = Nothing
+  , _stmName = Nothing
+  , _stmVersion = Nothing
+  , _stmLastUpdatedDate = Nothing
+  , _stmDescription = Nothing
+  }
+
+
+-- | The date that the slot type was created.
+stmCreatedDate :: Lens' SlotTypeMetadata (Maybe UTCTime)
+stmCreatedDate = lens _stmCreatedDate (\ s a -> s{_stmCreatedDate = a}) . mapping _Time;
+
+-- | The name of the slot type.
+stmName :: Lens' SlotTypeMetadata (Maybe Text)
+stmName = lens _stmName (\ s a -> s{_stmName = a});
+
+-- | The version of the slot type.
+stmVersion :: Lens' SlotTypeMetadata (Maybe Text)
+stmVersion = lens _stmVersion (\ s a -> s{_stmVersion = a});
+
+-- | The date that the slot type was updated. When you create a resource, the creation date and last updated date are the same.
+stmLastUpdatedDate :: Lens' SlotTypeMetadata (Maybe UTCTime)
+stmLastUpdatedDate = lens _stmLastUpdatedDate (\ s a -> s{_stmLastUpdatedDate = a}) . mapping _Time;
+
+-- | A description of the slot type.
+stmDescription :: Lens' SlotTypeMetadata (Maybe Text)
+stmDescription = lens _stmDescription (\ s a -> s{_stmDescription = a});
+
+instance FromJSON SlotTypeMetadata where
+        parseJSON
+          = withObject "SlotTypeMetadata"
+              (\ x ->
+                 SlotTypeMetadata' <$>
+                   (x .:? "createdDate") <*> (x .:? "name") <*>
+                     (x .:? "version")
+                     <*> (x .:? "lastUpdatedDate")
+                     <*> (x .:? "description"))
+
+instance Hashable SlotTypeMetadata where
+
+instance NFData SlotTypeMetadata where
+
+-- | A collection of messages that convey information to the user. At runtime, Amazon Lex selects the message to convey.
+--
+--
+--
+-- /See:/ 'statement' smart constructor.
+data Statement = Statement'
+  { _staResponseCard :: !(Maybe Text)
+  , _staMessages     :: !(List1 Message)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Statement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'staResponseCard' - At runtime, if the client is using the <http://docs.aws.amazon.com/lex/latest/dg/API_runtime_PostText.html PostText> API, Amazon Lex includes the response card in the response. It substitutes all of the session attributes and slot values for placeholders in the response card.
+--
+-- * 'staMessages' - A collection of message objects.
+statement
+    :: NonEmpty Message -- ^ 'staMessages'
+    -> Statement
+statement pMessages_ =
+  Statement' {_staResponseCard = Nothing, _staMessages = _List1 # pMessages_}
+
+
+-- | At runtime, if the client is using the <http://docs.aws.amazon.com/lex/latest/dg/API_runtime_PostText.html PostText> API, Amazon Lex includes the response card in the response. It substitutes all of the session attributes and slot values for placeholders in the response card.
+staResponseCard :: Lens' Statement (Maybe Text)
+staResponseCard = lens _staResponseCard (\ s a -> s{_staResponseCard = a});
+
+-- | A collection of message objects.
+staMessages :: Lens' Statement (NonEmpty Message)
+staMessages = lens _staMessages (\ s a -> s{_staMessages = a}) . _List1;
+
+instance FromJSON Statement where
+        parseJSON
+          = withObject "Statement"
+              (\ x ->
+                 Statement' <$>
+                   (x .:? "responseCard") <*> (x .: "messages"))
+
+instance Hashable Statement where
+
+instance NFData Statement where
+
+instance ToJSON Statement where
+        toJSON Statement'{..}
+          = object
+              (catMaybes
+                 [("responseCard" .=) <$> _staResponseCard,
+                  Just ("messages" .= _staMessages)])
+
+-- | Provides information about a single utterance that was made to your bot.
+--
+--
+--
+-- /See:/ 'utteranceData' smart constructor.
+data UtteranceData = UtteranceData'
+  { _udFirstUtteredDate :: !(Maybe POSIX)
+  , _udCount            :: !(Maybe Int)
+  , _udUtteranceString  :: !(Maybe Text)
+  , _udLastUtteredDate  :: !(Maybe POSIX)
+  , _udDistinctUsers    :: !(Maybe Int)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UtteranceData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udFirstUtteredDate' - The date that the utterance was first recorded.
+--
+-- * 'udCount' - The number of times that the utterance was processed.
+--
+-- * 'udUtteranceString' - The text that was entered by the user or the text representation of an audio clip.
+--
+-- * 'udLastUtteredDate' - The date that the utterance was last recorded.
+--
+-- * 'udDistinctUsers' - The total number of individuals that used the utterance.
+utteranceData
+    :: UtteranceData
+utteranceData =
+  UtteranceData'
+  { _udFirstUtteredDate = Nothing
+  , _udCount = Nothing
+  , _udUtteranceString = Nothing
+  , _udLastUtteredDate = Nothing
+  , _udDistinctUsers = Nothing
+  }
+
+
+-- | The date that the utterance was first recorded.
+udFirstUtteredDate :: Lens' UtteranceData (Maybe UTCTime)
+udFirstUtteredDate = lens _udFirstUtteredDate (\ s a -> s{_udFirstUtteredDate = a}) . mapping _Time;
+
+-- | The number of times that the utterance was processed.
+udCount :: Lens' UtteranceData (Maybe Int)
+udCount = lens _udCount (\ s a -> s{_udCount = a});
+
+-- | The text that was entered by the user or the text representation of an audio clip.
+udUtteranceString :: Lens' UtteranceData (Maybe Text)
+udUtteranceString = lens _udUtteranceString (\ s a -> s{_udUtteranceString = a});
+
+-- | The date that the utterance was last recorded.
+udLastUtteredDate :: Lens' UtteranceData (Maybe UTCTime)
+udLastUtteredDate = lens _udLastUtteredDate (\ s a -> s{_udLastUtteredDate = a}) . mapping _Time;
+
+-- | The total number of individuals that used the utterance.
+udDistinctUsers :: Lens' UtteranceData (Maybe Int)
+udDistinctUsers = lens _udDistinctUsers (\ s a -> s{_udDistinctUsers = a});
+
+instance FromJSON UtteranceData where
+        parseJSON
+          = withObject "UtteranceData"
+              (\ x ->
+                 UtteranceData' <$>
+                   (x .:? "firstUtteredDate") <*> (x .:? "count") <*>
+                     (x .:? "utteranceString")
+                     <*> (x .:? "lastUtteredDate")
+                     <*> (x .:? "distinctUsers"))
+
+instance Hashable UtteranceData where
+
+instance NFData UtteranceData where
+
+-- | Provides a list of utterances that have been made to a specific version of your bot. The list contains a maximum of 100 utterances.
+--
+--
+--
+-- /See:/ 'utteranceList' smart constructor.
+data UtteranceList = UtteranceList'
+  { _ulBotVersion :: !(Maybe Text)
+  , _ulUtterances :: !(Maybe [UtteranceData])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UtteranceList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulBotVersion' - The version of the bot that processed the list.
+--
+-- * 'ulUtterances' - One or more 'UtteranceData' objects that contain information about the utterances that have been made to a bot. The maximum number of object is 100.
+utteranceList
+    :: UtteranceList
+utteranceList =
+  UtteranceList' {_ulBotVersion = Nothing, _ulUtterances = Nothing}
+
+
+-- | The version of the bot that processed the list.
+ulBotVersion :: Lens' UtteranceList (Maybe Text)
+ulBotVersion = lens _ulBotVersion (\ s a -> s{_ulBotVersion = a});
+
+-- | One or more 'UtteranceData' objects that contain information about the utterances that have been made to a bot. The maximum number of object is 100.
+ulUtterances :: Lens' UtteranceList [UtteranceData]
+ulUtterances = lens _ulUtterances (\ s a -> s{_ulUtterances = a}) . _Default . _Coerce;
+
+instance FromJSON UtteranceList where
+        parseJSON
+          = withObject "UtteranceList"
+              (\ x ->
+                 UtteranceList' <$>
+                   (x .:? "botVersion") <*>
+                     (x .:? "utterances" .!= mempty))
+
+instance Hashable UtteranceList where
+
+instance NFData UtteranceList where
diff --git a/gen/Network/AWS/LexModels/Types/Sum.hs b/gen/Network/AWS/LexModels/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/Types/Sum.hs
@@ -0,0 +1,368 @@
+{-# 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.LexModels.Types.Sum
+-- Copyright   : (c) 2013-2017 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.LexModels.Types.Sum where
+
+import Network.AWS.Prelude
+
+data ChannelType
+  = Facebook
+  | Slack
+  | TwilioSms
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ChannelType where
+    parser = takeLowerText >>= \case
+        "facebook" -> pure Facebook
+        "slack" -> pure Slack
+        "twilio-sms" -> pure TwilioSms
+        e -> fromTextError $ "Failure parsing ChannelType from value: '" <> e
+           <> "'. Accepted values: facebook, slack, twilio-sms"
+
+instance ToText ChannelType where
+    toText = \case
+        Facebook -> "Facebook"
+        Slack -> "Slack"
+        TwilioSms -> "Twilio-Sms"
+
+instance Hashable     ChannelType
+instance NFData       ChannelType
+instance ToByteString ChannelType
+instance ToQuery      ChannelType
+instance ToHeader     ChannelType
+
+instance FromJSON ChannelType where
+    parseJSON = parseJSONText "ChannelType"
+
+data ContentType
+  = PlainText
+  | Ssml
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ContentType where
+    parser = takeLowerText >>= \case
+        "plaintext" -> pure PlainText
+        "ssml" -> pure Ssml
+        e -> fromTextError $ "Failure parsing ContentType from value: '" <> e
+           <> "'. Accepted values: plaintext, ssml"
+
+instance ToText ContentType where
+    toText = \case
+        PlainText -> "PlainText"
+        Ssml -> "SSML"
+
+instance Hashable     ContentType
+instance NFData       ContentType
+instance ToByteString ContentType
+instance ToQuery      ContentType
+instance ToHeader     ContentType
+
+instance ToJSON ContentType where
+    toJSON = toJSONText
+
+instance FromJSON ContentType where
+    parseJSON = parseJSONText "ContentType"
+
+data ExportStatus
+  = Failed
+  | InProgress
+  | Ready
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ExportStatus where
+    parser = takeLowerText >>= \case
+        "failed" -> pure Failed
+        "in_progress" -> pure InProgress
+        "ready" -> pure Ready
+        e -> fromTextError $ "Failure parsing ExportStatus from value: '" <> e
+           <> "'. Accepted values: failed, in_progress, ready"
+
+instance ToText ExportStatus where
+    toText = \case
+        Failed -> "FAILED"
+        InProgress -> "IN_PROGRESS"
+        Ready -> "READY"
+
+instance Hashable     ExportStatus
+instance NFData       ExportStatus
+instance ToByteString ExportStatus
+instance ToQuery      ExportStatus
+instance ToHeader     ExportStatus
+
+instance FromJSON ExportStatus where
+    parseJSON = parseJSONText "ExportStatus"
+
+data ExportType =
+  AlexaSkillsKit
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ExportType where
+    parser = takeLowerText >>= \case
+        "alexa_skills_kit" -> pure AlexaSkillsKit
+        e -> fromTextError $ "Failure parsing ExportType from value: '" <> e
+           <> "'. Accepted values: alexa_skills_kit"
+
+instance ToText ExportType where
+    toText = \case
+        AlexaSkillsKit -> "ALEXA_SKILLS_KIT"
+
+instance Hashable     ExportType
+instance NFData       ExportType
+instance ToByteString ExportType
+instance ToQuery      ExportType
+instance ToHeader     ExportType
+
+instance ToJSON ExportType where
+    toJSON = toJSONText
+
+instance FromJSON ExportType where
+    parseJSON = parseJSONText "ExportType"
+
+data FulfillmentActivityType
+  = CodeHook
+  | ReturnIntent
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText FulfillmentActivityType where
+    parser = takeLowerText >>= \case
+        "codehook" -> pure CodeHook
+        "returnintent" -> pure ReturnIntent
+        e -> fromTextError $ "Failure parsing FulfillmentActivityType from value: '" <> e
+           <> "'. Accepted values: codehook, returnintent"
+
+instance ToText FulfillmentActivityType where
+    toText = \case
+        CodeHook -> "CodeHook"
+        ReturnIntent -> "ReturnIntent"
+
+instance Hashable     FulfillmentActivityType
+instance NFData       FulfillmentActivityType
+instance ToByteString FulfillmentActivityType
+instance ToQuery      FulfillmentActivityType
+instance ToHeader     FulfillmentActivityType
+
+instance ToJSON FulfillmentActivityType where
+    toJSON = toJSONText
+
+instance FromJSON FulfillmentActivityType where
+    parseJSON = parseJSONText "FulfillmentActivityType"
+
+data LexStatus
+  = LSBuilding
+  | LSFailed
+  | LSNotBuilt
+  | LSReady
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText LexStatus where
+    parser = takeLowerText >>= \case
+        "building" -> pure LSBuilding
+        "failed" -> pure LSFailed
+        "not_built" -> pure LSNotBuilt
+        "ready" -> pure LSReady
+        e -> fromTextError $ "Failure parsing LexStatus from value: '" <> e
+           <> "'. Accepted values: building, failed, not_built, ready"
+
+instance ToText LexStatus where
+    toText = \case
+        LSBuilding -> "BUILDING"
+        LSFailed -> "FAILED"
+        LSNotBuilt -> "NOT_BUILT"
+        LSReady -> "READY"
+
+instance Hashable     LexStatus
+instance NFData       LexStatus
+instance ToByteString LexStatus
+instance ToQuery      LexStatus
+instance ToHeader     LexStatus
+
+instance FromJSON LexStatus where
+    parseJSON = parseJSONText "LexStatus"
+
+data Locale =
+  EnUs
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText Locale where
+    parser = takeLowerText >>= \case
+        "en-us" -> pure EnUs
+        e -> fromTextError $ "Failure parsing Locale from value: '" <> e
+           <> "'. Accepted values: en-us"
+
+instance ToText Locale where
+    toText = \case
+        EnUs -> "en-US"
+
+instance Hashable     Locale
+instance NFData       Locale
+instance ToByteString Locale
+instance ToQuery      Locale
+instance ToHeader     Locale
+
+instance ToJSON Locale where
+    toJSON = toJSONText
+
+instance FromJSON Locale where
+    parseJSON = parseJSONText "Locale"
+
+data ProcessBehavior
+  = Build
+  | Save
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ProcessBehavior where
+    parser = takeLowerText >>= \case
+        "build" -> pure Build
+        "save" -> pure Save
+        e -> fromTextError $ "Failure parsing ProcessBehavior from value: '" <> e
+           <> "'. Accepted values: build, save"
+
+instance ToText ProcessBehavior where
+    toText = \case
+        Build -> "BUILD"
+        Save -> "SAVE"
+
+instance Hashable     ProcessBehavior
+instance NFData       ProcessBehavior
+instance ToByteString ProcessBehavior
+instance ToQuery      ProcessBehavior
+instance ToHeader     ProcessBehavior
+
+instance ToJSON ProcessBehavior where
+    toJSON = toJSONText
+
+data ResourceType =
+  Bot
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ResourceType where
+    parser = takeLowerText >>= \case
+        "bot" -> pure Bot
+        e -> fromTextError $ "Failure parsing ResourceType from value: '" <> e
+           <> "'. Accepted values: bot"
+
+instance ToText ResourceType where
+    toText = \case
+        Bot -> "BOT"
+
+instance Hashable     ResourceType
+instance NFData       ResourceType
+instance ToByteString ResourceType
+instance ToQuery      ResourceType
+instance ToHeader     ResourceType
+
+instance ToJSON ResourceType where
+    toJSON = toJSONText
+
+instance FromJSON ResourceType where
+    parseJSON = parseJSONText "ResourceType"
+
+data SlotConstraint
+  = Optional
+  | Required
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SlotConstraint where
+    parser = takeLowerText >>= \case
+        "optional" -> pure Optional
+        "required" -> pure Required
+        e -> fromTextError $ "Failure parsing SlotConstraint from value: '" <> e
+           <> "'. Accepted values: optional, required"
+
+instance ToText SlotConstraint where
+    toText = \case
+        Optional -> "Optional"
+        Required -> "Required"
+
+instance Hashable     SlotConstraint
+instance NFData       SlotConstraint
+instance ToByteString SlotConstraint
+instance ToQuery      SlotConstraint
+instance ToHeader     SlotConstraint
+
+instance ToJSON SlotConstraint where
+    toJSON = toJSONText
+
+instance FromJSON SlotConstraint where
+    parseJSON = parseJSONText "SlotConstraint"
+
+data SlotValueSelectionStrategy
+  = OriginalValue
+  | TopResolution
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SlotValueSelectionStrategy where
+    parser = takeLowerText >>= \case
+        "original_value" -> pure OriginalValue
+        "top_resolution" -> pure TopResolution
+        e -> fromTextError $ "Failure parsing SlotValueSelectionStrategy from value: '" <> e
+           <> "'. Accepted values: original_value, top_resolution"
+
+instance ToText SlotValueSelectionStrategy where
+    toText = \case
+        OriginalValue -> "ORIGINAL_VALUE"
+        TopResolution -> "TOP_RESOLUTION"
+
+instance Hashable     SlotValueSelectionStrategy
+instance NFData       SlotValueSelectionStrategy
+instance ToByteString SlotValueSelectionStrategy
+instance ToQuery      SlotValueSelectionStrategy
+instance ToHeader     SlotValueSelectionStrategy
+
+instance ToJSON SlotValueSelectionStrategy where
+    toJSON = toJSONText
+
+instance FromJSON SlotValueSelectionStrategy where
+    parseJSON = parseJSONText "SlotValueSelectionStrategy"
+
+data StatusType
+  = Detected
+  | Missed
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText StatusType where
+    parser = takeLowerText >>= \case
+        "detected" -> pure Detected
+        "missed" -> pure Missed
+        e -> fromTextError $ "Failure parsing StatusType from value: '" <> e
+           <> "'. Accepted values: detected, missed"
+
+instance ToText StatusType where
+    toText = \case
+        Detected -> "Detected"
+        Missed -> "Missed"
+
+instance Hashable     StatusType
+instance NFData       StatusType
+instance ToByteString StatusType
+instance ToQuery      StatusType
+instance ToHeader     StatusType
+
+instance ToJSON StatusType where
+    toJSON = toJSONText
diff --git a/gen/Network/AWS/LexModels/Waiters.hs b/gen/Network/AWS/LexModels/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/LexModels/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.LexModels.Waiters
+-- Copyright   : (c) 2013-2017 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.LexModels.Waiters where
+
+import Network.AWS.Lens
+import Network.AWS.LexModels.Types
+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-2017 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.LexModels
+import Test.AWS.LexModels.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "LexModels"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/LexModels.hs b/test/Test/AWS/Gen/LexModels.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/LexModels.hs
@@ -0,0 +1,651 @@
+{-# 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.LexModels
+-- Copyright   : (c) 2013-2017 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.LexModels where
+
+import Data.Proxy
+import Network.AWS.LexModels
+import Test.AWS.Fixture
+import Test.AWS.LexModels.Internal
+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"
+--         [ requestDeleteIntentVersion $
+--             deleteIntentVersion
+--
+--         , requestGetBotAliases $
+--             getBotAliases
+--
+--         , requestDeleteBotChannelAssociation $
+--             deleteBotChannelAssociation
+--
+--         , requestCreateSlotTypeVersion $
+--             createSlotTypeVersion
+--
+--         , requestGetIntent $
+--             getIntent
+--
+--         , requestPutIntent $
+--             putIntent
+--
+--         , requestDeleteIntent $
+--             deleteIntent
+--
+--         , requestGetBuiltinIntents $
+--             getBuiltinIntents
+--
+--         , requestPutBot $
+--             putBot
+--
+--         , requestDeleteBot $
+--             deleteBot
+--
+--         , requestGetIntentVersions $
+--             getIntentVersions
+--
+--         , requestGetBuiltinIntent $
+--             getBuiltinIntent
+--
+--         , requestPutBotAlias $
+--             putBotAlias
+--
+--         , requestGetBotVersions $
+--             getBotVersions
+--
+--         , requestGetBotChannelAssociations $
+--             getBotChannelAssociations
+--
+--         , requestDeleteBotAlias $
+--             deleteBotAlias
+--
+--         , requestGetSlotTypes $
+--             getSlotTypes
+--
+--         , requestDeleteUtterances $
+--             deleteUtterances
+--
+--         , requestGetBots $
+--             getBots
+--
+--         , requestGetBot $
+--             getBot
+--
+--         , requestCreateBotVersion $
+--             createBotVersion
+--
+--         , requestDeleteSlotTypeVersion $
+--             deleteSlotTypeVersion
+--
+--         , requestDeleteBotVersion $
+--             deleteBotVersion
+--
+--         , requestGetSlotType $
+--             getSlotType
+--
+--         , requestGetExport $
+--             getExport
+--
+--         , requestCreateIntentVersion $
+--             createIntentVersion
+--
+--         , requestDeleteSlotType $
+--             deleteSlotType
+--
+--         , requestGetBotChannelAssociation $
+--             getBotChannelAssociation
+--
+--         , requestPutSlotType $
+--             putSlotType
+--
+--         , requestGetBuiltinSlotTypes $
+--             getBuiltinSlotTypes
+--
+--         , requestGetUtterancesView $
+--             getUtterancesView
+--
+--         , requestGetSlotTypeVersions $
+--             getSlotTypeVersions
+--
+--         , requestGetIntents $
+--             getIntents
+--
+--         , requestGetBotAlias $
+--             getBotAlias
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseDeleteIntentVersion $
+--             deleteIntentVersionResponse
+--
+--         , responseGetBotAliases $
+--             getBotAliasesResponse
+--
+--         , responseDeleteBotChannelAssociation $
+--             deleteBotChannelAssociationResponse
+--
+--         , responseCreateSlotTypeVersion $
+--             createSlotTypeVersionResponse
+--
+--         , responseGetIntent $
+--             getIntentResponse
+--
+--         , responsePutIntent $
+--             putIntentResponse
+--
+--         , responseDeleteIntent $
+--             deleteIntentResponse
+--
+--         , responseGetBuiltinIntents $
+--             getBuiltinIntentsResponse
+--
+--         , responsePutBot $
+--             putBotResponse
+--
+--         , responseDeleteBot $
+--             deleteBotResponse
+--
+--         , responseGetIntentVersions $
+--             getIntentVersionsResponse
+--
+--         , responseGetBuiltinIntent $
+--             getBuiltinIntentResponse
+--
+--         , responsePutBotAlias $
+--             putBotAliasResponse
+--
+--         , responseGetBotVersions $
+--             getBotVersionsResponse
+--
+--         , responseGetBotChannelAssociations $
+--             getBotChannelAssociationsResponse
+--
+--         , responseDeleteBotAlias $
+--             deleteBotAliasResponse
+--
+--         , responseGetSlotTypes $
+--             getSlotTypesResponse
+--
+--         , responseDeleteUtterances $
+--             deleteUtterancesResponse
+--
+--         , responseGetBots $
+--             getBotsResponse
+--
+--         , responseGetBot $
+--             getBotResponse
+--
+--         , responseCreateBotVersion $
+--             createBotVersionResponse
+--
+--         , responseDeleteSlotTypeVersion $
+--             deleteSlotTypeVersionResponse
+--
+--         , responseDeleteBotVersion $
+--             deleteBotVersionResponse
+--
+--         , responseGetSlotType $
+--             getSlotTypeResponse
+--
+--         , responseGetExport $
+--             getExportResponse
+--
+--         , responseCreateIntentVersion $
+--             createIntentVersionResponse
+--
+--         , responseDeleteSlotType $
+--             deleteSlotTypeResponse
+--
+--         , responseGetBotChannelAssociation $
+--             getBotChannelAssociationResponse
+--
+--         , responsePutSlotType $
+--             putSlotTypeResponse
+--
+--         , responseGetBuiltinSlotTypes $
+--             getBuiltinSlotTypesResponse
+--
+--         , responseGetUtterancesView $
+--             getUtterancesViewResponse
+--
+--         , responseGetSlotTypeVersions $
+--             getSlotTypeVersionsResponse
+--
+--         , responseGetIntents $
+--             getIntentsResponse
+--
+--         , responseGetBotAlias $
+--             getBotAliasResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestDeleteIntentVersion :: DeleteIntentVersion -> TestTree
+requestDeleteIntentVersion = req
+    "DeleteIntentVersion"
+    "fixture/DeleteIntentVersion.yaml"
+
+requestGetBotAliases :: GetBotAliases -> TestTree
+requestGetBotAliases = req
+    "GetBotAliases"
+    "fixture/GetBotAliases.yaml"
+
+requestDeleteBotChannelAssociation :: DeleteBotChannelAssociation -> TestTree
+requestDeleteBotChannelAssociation = req
+    "DeleteBotChannelAssociation"
+    "fixture/DeleteBotChannelAssociation.yaml"
+
+requestCreateSlotTypeVersion :: CreateSlotTypeVersion -> TestTree
+requestCreateSlotTypeVersion = req
+    "CreateSlotTypeVersion"
+    "fixture/CreateSlotTypeVersion.yaml"
+
+requestGetIntent :: GetIntent -> TestTree
+requestGetIntent = req
+    "GetIntent"
+    "fixture/GetIntent.yaml"
+
+requestPutIntent :: PutIntent -> TestTree
+requestPutIntent = req
+    "PutIntent"
+    "fixture/PutIntent.yaml"
+
+requestDeleteIntent :: DeleteIntent -> TestTree
+requestDeleteIntent = req
+    "DeleteIntent"
+    "fixture/DeleteIntent.yaml"
+
+requestGetBuiltinIntents :: GetBuiltinIntents -> TestTree
+requestGetBuiltinIntents = req
+    "GetBuiltinIntents"
+    "fixture/GetBuiltinIntents.yaml"
+
+requestPutBot :: PutBot -> TestTree
+requestPutBot = req
+    "PutBot"
+    "fixture/PutBot.yaml"
+
+requestDeleteBot :: DeleteBot -> TestTree
+requestDeleteBot = req
+    "DeleteBot"
+    "fixture/DeleteBot.yaml"
+
+requestGetIntentVersions :: GetIntentVersions -> TestTree
+requestGetIntentVersions = req
+    "GetIntentVersions"
+    "fixture/GetIntentVersions.yaml"
+
+requestGetBuiltinIntent :: GetBuiltinIntent -> TestTree
+requestGetBuiltinIntent = req
+    "GetBuiltinIntent"
+    "fixture/GetBuiltinIntent.yaml"
+
+requestPutBotAlias :: PutBotAlias -> TestTree
+requestPutBotAlias = req
+    "PutBotAlias"
+    "fixture/PutBotAlias.yaml"
+
+requestGetBotVersions :: GetBotVersions -> TestTree
+requestGetBotVersions = req
+    "GetBotVersions"
+    "fixture/GetBotVersions.yaml"
+
+requestGetBotChannelAssociations :: GetBotChannelAssociations -> TestTree
+requestGetBotChannelAssociations = req
+    "GetBotChannelAssociations"
+    "fixture/GetBotChannelAssociations.yaml"
+
+requestDeleteBotAlias :: DeleteBotAlias -> TestTree
+requestDeleteBotAlias = req
+    "DeleteBotAlias"
+    "fixture/DeleteBotAlias.yaml"
+
+requestGetSlotTypes :: GetSlotTypes -> TestTree
+requestGetSlotTypes = req
+    "GetSlotTypes"
+    "fixture/GetSlotTypes.yaml"
+
+requestDeleteUtterances :: DeleteUtterances -> TestTree
+requestDeleteUtterances = req
+    "DeleteUtterances"
+    "fixture/DeleteUtterances.yaml"
+
+requestGetBots :: GetBots -> TestTree
+requestGetBots = req
+    "GetBots"
+    "fixture/GetBots.yaml"
+
+requestGetBot :: GetBot -> TestTree
+requestGetBot = req
+    "GetBot"
+    "fixture/GetBot.yaml"
+
+requestCreateBotVersion :: CreateBotVersion -> TestTree
+requestCreateBotVersion = req
+    "CreateBotVersion"
+    "fixture/CreateBotVersion.yaml"
+
+requestDeleteSlotTypeVersion :: DeleteSlotTypeVersion -> TestTree
+requestDeleteSlotTypeVersion = req
+    "DeleteSlotTypeVersion"
+    "fixture/DeleteSlotTypeVersion.yaml"
+
+requestDeleteBotVersion :: DeleteBotVersion -> TestTree
+requestDeleteBotVersion = req
+    "DeleteBotVersion"
+    "fixture/DeleteBotVersion.yaml"
+
+requestGetSlotType :: GetSlotType -> TestTree
+requestGetSlotType = req
+    "GetSlotType"
+    "fixture/GetSlotType.yaml"
+
+requestGetExport :: GetExport -> TestTree
+requestGetExport = req
+    "GetExport"
+    "fixture/GetExport.yaml"
+
+requestCreateIntentVersion :: CreateIntentVersion -> TestTree
+requestCreateIntentVersion = req
+    "CreateIntentVersion"
+    "fixture/CreateIntentVersion.yaml"
+
+requestDeleteSlotType :: DeleteSlotType -> TestTree
+requestDeleteSlotType = req
+    "DeleteSlotType"
+    "fixture/DeleteSlotType.yaml"
+
+requestGetBotChannelAssociation :: GetBotChannelAssociation -> TestTree
+requestGetBotChannelAssociation = req
+    "GetBotChannelAssociation"
+    "fixture/GetBotChannelAssociation.yaml"
+
+requestPutSlotType :: PutSlotType -> TestTree
+requestPutSlotType = req
+    "PutSlotType"
+    "fixture/PutSlotType.yaml"
+
+requestGetBuiltinSlotTypes :: GetBuiltinSlotTypes -> TestTree
+requestGetBuiltinSlotTypes = req
+    "GetBuiltinSlotTypes"
+    "fixture/GetBuiltinSlotTypes.yaml"
+
+requestGetUtterancesView :: GetUtterancesView -> TestTree
+requestGetUtterancesView = req
+    "GetUtterancesView"
+    "fixture/GetUtterancesView.yaml"
+
+requestGetSlotTypeVersions :: GetSlotTypeVersions -> TestTree
+requestGetSlotTypeVersions = req
+    "GetSlotTypeVersions"
+    "fixture/GetSlotTypeVersions.yaml"
+
+requestGetIntents :: GetIntents -> TestTree
+requestGetIntents = req
+    "GetIntents"
+    "fixture/GetIntents.yaml"
+
+requestGetBotAlias :: GetBotAlias -> TestTree
+requestGetBotAlias = req
+    "GetBotAlias"
+    "fixture/GetBotAlias.yaml"
+
+-- Responses
+
+responseDeleteIntentVersion :: DeleteIntentVersionResponse -> TestTree
+responseDeleteIntentVersion = res
+    "DeleteIntentVersionResponse"
+    "fixture/DeleteIntentVersionResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteIntentVersion)
+
+responseGetBotAliases :: GetBotAliasesResponse -> TestTree
+responseGetBotAliases = res
+    "GetBotAliasesResponse"
+    "fixture/GetBotAliasesResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBotAliases)
+
+responseDeleteBotChannelAssociation :: DeleteBotChannelAssociationResponse -> TestTree
+responseDeleteBotChannelAssociation = res
+    "DeleteBotChannelAssociationResponse"
+    "fixture/DeleteBotChannelAssociationResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteBotChannelAssociation)
+
+responseCreateSlotTypeVersion :: CreateSlotTypeVersionResponse -> TestTree
+responseCreateSlotTypeVersion = res
+    "CreateSlotTypeVersionResponse"
+    "fixture/CreateSlotTypeVersionResponse.proto"
+    lexModels
+    (Proxy :: Proxy CreateSlotTypeVersion)
+
+responseGetIntent :: GetIntentResponse -> TestTree
+responseGetIntent = res
+    "GetIntentResponse"
+    "fixture/GetIntentResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetIntent)
+
+responsePutIntent :: PutIntentResponse -> TestTree
+responsePutIntent = res
+    "PutIntentResponse"
+    "fixture/PutIntentResponse.proto"
+    lexModels
+    (Proxy :: Proxy PutIntent)
+
+responseDeleteIntent :: DeleteIntentResponse -> TestTree
+responseDeleteIntent = res
+    "DeleteIntentResponse"
+    "fixture/DeleteIntentResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteIntent)
+
+responseGetBuiltinIntents :: GetBuiltinIntentsResponse -> TestTree
+responseGetBuiltinIntents = res
+    "GetBuiltinIntentsResponse"
+    "fixture/GetBuiltinIntentsResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBuiltinIntents)
+
+responsePutBot :: PutBotResponse -> TestTree
+responsePutBot = res
+    "PutBotResponse"
+    "fixture/PutBotResponse.proto"
+    lexModels
+    (Proxy :: Proxy PutBot)
+
+responseDeleteBot :: DeleteBotResponse -> TestTree
+responseDeleteBot = res
+    "DeleteBotResponse"
+    "fixture/DeleteBotResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteBot)
+
+responseGetIntentVersions :: GetIntentVersionsResponse -> TestTree
+responseGetIntentVersions = res
+    "GetIntentVersionsResponse"
+    "fixture/GetIntentVersionsResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetIntentVersions)
+
+responseGetBuiltinIntent :: GetBuiltinIntentResponse -> TestTree
+responseGetBuiltinIntent = res
+    "GetBuiltinIntentResponse"
+    "fixture/GetBuiltinIntentResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBuiltinIntent)
+
+responsePutBotAlias :: PutBotAliasResponse -> TestTree
+responsePutBotAlias = res
+    "PutBotAliasResponse"
+    "fixture/PutBotAliasResponse.proto"
+    lexModels
+    (Proxy :: Proxy PutBotAlias)
+
+responseGetBotVersions :: GetBotVersionsResponse -> TestTree
+responseGetBotVersions = res
+    "GetBotVersionsResponse"
+    "fixture/GetBotVersionsResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBotVersions)
+
+responseGetBotChannelAssociations :: GetBotChannelAssociationsResponse -> TestTree
+responseGetBotChannelAssociations = res
+    "GetBotChannelAssociationsResponse"
+    "fixture/GetBotChannelAssociationsResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBotChannelAssociations)
+
+responseDeleteBotAlias :: DeleteBotAliasResponse -> TestTree
+responseDeleteBotAlias = res
+    "DeleteBotAliasResponse"
+    "fixture/DeleteBotAliasResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteBotAlias)
+
+responseGetSlotTypes :: GetSlotTypesResponse -> TestTree
+responseGetSlotTypes = res
+    "GetSlotTypesResponse"
+    "fixture/GetSlotTypesResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetSlotTypes)
+
+responseDeleteUtterances :: DeleteUtterancesResponse -> TestTree
+responseDeleteUtterances = res
+    "DeleteUtterancesResponse"
+    "fixture/DeleteUtterancesResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteUtterances)
+
+responseGetBots :: GetBotsResponse -> TestTree
+responseGetBots = res
+    "GetBotsResponse"
+    "fixture/GetBotsResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBots)
+
+responseGetBot :: GetBotResponse -> TestTree
+responseGetBot = res
+    "GetBotResponse"
+    "fixture/GetBotResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBot)
+
+responseCreateBotVersion :: CreateBotVersionResponse -> TestTree
+responseCreateBotVersion = res
+    "CreateBotVersionResponse"
+    "fixture/CreateBotVersionResponse.proto"
+    lexModels
+    (Proxy :: Proxy CreateBotVersion)
+
+responseDeleteSlotTypeVersion :: DeleteSlotTypeVersionResponse -> TestTree
+responseDeleteSlotTypeVersion = res
+    "DeleteSlotTypeVersionResponse"
+    "fixture/DeleteSlotTypeVersionResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteSlotTypeVersion)
+
+responseDeleteBotVersion :: DeleteBotVersionResponse -> TestTree
+responseDeleteBotVersion = res
+    "DeleteBotVersionResponse"
+    "fixture/DeleteBotVersionResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteBotVersion)
+
+responseGetSlotType :: GetSlotTypeResponse -> TestTree
+responseGetSlotType = res
+    "GetSlotTypeResponse"
+    "fixture/GetSlotTypeResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetSlotType)
+
+responseGetExport :: GetExportResponse -> TestTree
+responseGetExport = res
+    "GetExportResponse"
+    "fixture/GetExportResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetExport)
+
+responseCreateIntentVersion :: CreateIntentVersionResponse -> TestTree
+responseCreateIntentVersion = res
+    "CreateIntentVersionResponse"
+    "fixture/CreateIntentVersionResponse.proto"
+    lexModels
+    (Proxy :: Proxy CreateIntentVersion)
+
+responseDeleteSlotType :: DeleteSlotTypeResponse -> TestTree
+responseDeleteSlotType = res
+    "DeleteSlotTypeResponse"
+    "fixture/DeleteSlotTypeResponse.proto"
+    lexModels
+    (Proxy :: Proxy DeleteSlotType)
+
+responseGetBotChannelAssociation :: GetBotChannelAssociationResponse -> TestTree
+responseGetBotChannelAssociation = res
+    "GetBotChannelAssociationResponse"
+    "fixture/GetBotChannelAssociationResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBotChannelAssociation)
+
+responsePutSlotType :: PutSlotTypeResponse -> TestTree
+responsePutSlotType = res
+    "PutSlotTypeResponse"
+    "fixture/PutSlotTypeResponse.proto"
+    lexModels
+    (Proxy :: Proxy PutSlotType)
+
+responseGetBuiltinSlotTypes :: GetBuiltinSlotTypesResponse -> TestTree
+responseGetBuiltinSlotTypes = res
+    "GetBuiltinSlotTypesResponse"
+    "fixture/GetBuiltinSlotTypesResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBuiltinSlotTypes)
+
+responseGetUtterancesView :: GetUtterancesViewResponse -> TestTree
+responseGetUtterancesView = res
+    "GetUtterancesViewResponse"
+    "fixture/GetUtterancesViewResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetUtterancesView)
+
+responseGetSlotTypeVersions :: GetSlotTypeVersionsResponse -> TestTree
+responseGetSlotTypeVersions = res
+    "GetSlotTypeVersionsResponse"
+    "fixture/GetSlotTypeVersionsResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetSlotTypeVersions)
+
+responseGetIntents :: GetIntentsResponse -> TestTree
+responseGetIntents = res
+    "GetIntentsResponse"
+    "fixture/GetIntentsResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetIntents)
+
+responseGetBotAlias :: GetBotAliasResponse -> TestTree
+responseGetBotAlias = res
+    "GetBotAliasResponse"
+    "fixture/GetBotAliasResponse.proto"
+    lexModels
+    (Proxy :: Proxy GetBotAlias)
diff --git a/test/Test/AWS/LexModels.hs b/test/Test/AWS/LexModels.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/LexModels.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.AWS.LexModels
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.LexModels
+    ( tests
+    , fixtures
+    ) where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/LexModels/Internal.hs b/test/Test/AWS/LexModels/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/LexModels/Internal.hs
@@ -0,0 +1,9 @@
+-- |
+-- Module      : Test.AWS.LexModels.Internal
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.LexModels.Internal where
