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 WorkDocs 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-workdocs)
+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.WorkDocs](http://hackage.haskell.org/package/amazonka-workdocs/docs/Network-AWS-WorkDocs.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-workdocs` 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-workdocs.cabal b/amazonka-workdocs.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-workdocs.cabal
@@ -0,0 +1,124 @@
+name:                  amazonka-workdocs
+version:               1.5.0
+synopsis:              Amazon WorkDocs 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.WorkDocs" 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-workdocs
+
+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.WorkDocs
+        , Network.AWS.WorkDocs.AbortDocumentVersionUpload
+        , Network.AWS.WorkDocs.ActivateUser
+        , Network.AWS.WorkDocs.AddResourcePermissions
+        , Network.AWS.WorkDocs.CreateComment
+        , Network.AWS.WorkDocs.CreateCustomMetadata
+        , Network.AWS.WorkDocs.CreateFolder
+        , Network.AWS.WorkDocs.CreateLabels
+        , Network.AWS.WorkDocs.CreateNotificationSubscription
+        , Network.AWS.WorkDocs.CreateUser
+        , Network.AWS.WorkDocs.DeactivateUser
+        , Network.AWS.WorkDocs.DeleteComment
+        , Network.AWS.WorkDocs.DeleteCustomMetadata
+        , Network.AWS.WorkDocs.DeleteDocument
+        , Network.AWS.WorkDocs.DeleteFolder
+        , Network.AWS.WorkDocs.DeleteFolderContents
+        , Network.AWS.WorkDocs.DeleteLabels
+        , Network.AWS.WorkDocs.DeleteNotificationSubscription
+        , Network.AWS.WorkDocs.DeleteUser
+        , Network.AWS.WorkDocs.DescribeActivities
+        , Network.AWS.WorkDocs.DescribeComments
+        , Network.AWS.WorkDocs.DescribeDocumentVersions
+        , Network.AWS.WorkDocs.DescribeFolderContents
+        , Network.AWS.WorkDocs.DescribeNotificationSubscriptions
+        , Network.AWS.WorkDocs.DescribeResourcePermissions
+        , Network.AWS.WorkDocs.DescribeRootFolders
+        , Network.AWS.WorkDocs.DescribeUsers
+        , Network.AWS.WorkDocs.GetCurrentUser
+        , Network.AWS.WorkDocs.GetDocument
+        , Network.AWS.WorkDocs.GetDocumentPath
+        , Network.AWS.WorkDocs.GetDocumentVersion
+        , Network.AWS.WorkDocs.GetFolder
+        , Network.AWS.WorkDocs.GetFolderPath
+        , Network.AWS.WorkDocs.InitiateDocumentVersionUpload
+        , Network.AWS.WorkDocs.RemoveAllResourcePermissions
+        , Network.AWS.WorkDocs.RemoveResourcePermission
+        , Network.AWS.WorkDocs.Types
+        , Network.AWS.WorkDocs.UpdateDocument
+        , Network.AWS.WorkDocs.UpdateDocumentVersion
+        , Network.AWS.WorkDocs.UpdateFolder
+        , Network.AWS.WorkDocs.UpdateUser
+        , Network.AWS.WorkDocs.Waiters
+
+    other-modules:
+          Network.AWS.WorkDocs.Types.Product
+        , Network.AWS.WorkDocs.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.5.0.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-workdocs-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.WorkDocs
+        , Test.AWS.Gen.WorkDocs
+        , Test.AWS.WorkDocs.Internal
+
+    build-depends:
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-workdocs
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/AbortDocumentVersionUpload.yaml b/fixture/AbortDocumentVersionUpload.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AbortDocumentVersionUpload.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/AbortDocumentVersionUploadResponse.proto b/fixture/AbortDocumentVersionUploadResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AbortDocumentVersionUploadResponse.proto
diff --git a/fixture/ActivateUser.yaml b/fixture/ActivateUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ActivateUser.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/ActivateUserResponse.proto b/fixture/ActivateUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ActivateUserResponse.proto
diff --git a/fixture/AddResourcePermissions.yaml b/fixture/AddResourcePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddResourcePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/AddResourcePermissionsResponse.proto b/fixture/AddResourcePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddResourcePermissionsResponse.proto
diff --git a/fixture/CreateComment.yaml b/fixture/CreateComment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateComment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/CreateCommentResponse.proto b/fixture/CreateCommentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCommentResponse.proto
diff --git a/fixture/CreateCustomMetadata.yaml b/fixture/CreateCustomMetadata.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/CreateCustomMetadataResponse.proto b/fixture/CreateCustomMetadataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomMetadataResponse.proto
diff --git a/fixture/CreateFolder.yaml b/fixture/CreateFolder.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFolder.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/CreateFolderResponse.proto b/fixture/CreateFolderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFolderResponse.proto
diff --git a/fixture/CreateLabels.yaml b/fixture/CreateLabels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLabels.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/CreateLabelsResponse.proto b/fixture/CreateLabelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLabelsResponse.proto
diff --git a/fixture/CreateNotificationSubscription.yaml b/fixture/CreateNotificationSubscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNotificationSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/CreateNotificationSubscriptionResponse.proto b/fixture/CreateNotificationSubscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNotificationSubscriptionResponse.proto
diff --git a/fixture/CreateUser.yaml b/fixture/CreateUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUser.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/CreateUserResponse.proto b/fixture/CreateUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUserResponse.proto
diff --git a/fixture/DeactivateUser.yaml b/fixture/DeactivateUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeactivateUser.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeactivateUserResponse.proto b/fixture/DeactivateUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeactivateUserResponse.proto
diff --git a/fixture/DeleteComment.yaml b/fixture/DeleteComment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteComment.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteCommentResponse.proto b/fixture/DeleteCommentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCommentResponse.proto
diff --git a/fixture/DeleteCustomMetadata.yaml b/fixture/DeleteCustomMetadata.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteCustomMetadataResponse.proto b/fixture/DeleteCustomMetadataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomMetadataResponse.proto
diff --git a/fixture/DeleteDocument.yaml b/fixture/DeleteDocument.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDocument.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteDocumentResponse.proto b/fixture/DeleteDocumentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDocumentResponse.proto
diff --git a/fixture/DeleteFolder.yaml b/fixture/DeleteFolder.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFolder.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteFolderContents.yaml b/fixture/DeleteFolderContents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFolderContents.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteFolderContentsResponse.proto b/fixture/DeleteFolderContentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFolderContentsResponse.proto
diff --git a/fixture/DeleteFolderResponse.proto b/fixture/DeleteFolderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFolderResponse.proto
diff --git a/fixture/DeleteLabels.yaml b/fixture/DeleteLabels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLabels.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteLabelsResponse.proto b/fixture/DeleteLabelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLabelsResponse.proto
diff --git a/fixture/DeleteNotificationSubscription.yaml b/fixture/DeleteNotificationSubscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNotificationSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteNotificationSubscriptionResponse.proto b/fixture/DeleteNotificationSubscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNotificationSubscriptionResponse.proto
diff --git a/fixture/DeleteUser.yaml b/fixture/DeleteUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUser.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DeleteUserResponse.proto b/fixture/DeleteUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUserResponse.proto
diff --git a/fixture/DescribeActivities.yaml b/fixture/DescribeActivities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeActivities.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeActivitiesResponse.proto b/fixture/DescribeActivitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeActivitiesResponse.proto
diff --git a/fixture/DescribeComments.yaml b/fixture/DescribeComments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeComments.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeCommentsResponse.proto b/fixture/DescribeCommentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCommentsResponse.proto
diff --git a/fixture/DescribeDocumentVersions.yaml b/fixture/DescribeDocumentVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDocumentVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeDocumentVersionsResponse.proto b/fixture/DescribeDocumentVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDocumentVersionsResponse.proto
diff --git a/fixture/DescribeFolderContents.yaml b/fixture/DescribeFolderContents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFolderContents.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeFolderContentsResponse.proto b/fixture/DescribeFolderContentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFolderContentsResponse.proto
diff --git a/fixture/DescribeNotificationSubscriptions.yaml b/fixture/DescribeNotificationSubscriptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNotificationSubscriptions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeNotificationSubscriptionsResponse.proto b/fixture/DescribeNotificationSubscriptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNotificationSubscriptionsResponse.proto
diff --git a/fixture/DescribeResourcePermissions.yaml b/fixture/DescribeResourcePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResourcePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeResourcePermissionsResponse.proto b/fixture/DescribeResourcePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResourcePermissionsResponse.proto
diff --git a/fixture/DescribeRootFolders.yaml b/fixture/DescribeRootFolders.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRootFolders.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeRootFoldersResponse.proto b/fixture/DescribeRootFoldersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRootFoldersResponse.proto
diff --git a/fixture/DescribeUsers.yaml b/fixture/DescribeUsers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUsers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/DescribeUsersResponse.proto b/fixture/DescribeUsersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUsersResponse.proto
diff --git a/fixture/GetCurrentUser.yaml b/fixture/GetCurrentUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCurrentUser.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/GetCurrentUserResponse.proto b/fixture/GetCurrentUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCurrentUserResponse.proto
diff --git a/fixture/GetDocument.yaml b/fixture/GetDocument.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDocument.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/GetDocumentPath.yaml b/fixture/GetDocumentPath.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDocumentPath.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/GetDocumentPathResponse.proto b/fixture/GetDocumentPathResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDocumentPathResponse.proto
diff --git a/fixture/GetDocumentResponse.proto b/fixture/GetDocumentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDocumentResponse.proto
diff --git a/fixture/GetDocumentVersion.yaml b/fixture/GetDocumentVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDocumentVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/GetDocumentVersionResponse.proto b/fixture/GetDocumentVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDocumentVersionResponse.proto
diff --git a/fixture/GetFolder.yaml b/fixture/GetFolder.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFolder.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/GetFolderPath.yaml b/fixture/GetFolderPath.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFolderPath.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/GetFolderPathResponse.proto b/fixture/GetFolderPathResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFolderPathResponse.proto
diff --git a/fixture/GetFolderResponse.proto b/fixture/GetFolderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFolderResponse.proto
diff --git a/fixture/InitiateDocumentVersionUpload.yaml b/fixture/InitiateDocumentVersionUpload.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/InitiateDocumentVersionUpload.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/InitiateDocumentVersionUploadResponse.proto b/fixture/InitiateDocumentVersionUploadResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/InitiateDocumentVersionUploadResponse.proto
diff --git a/fixture/RemoveAllResourcePermissions.yaml b/fixture/RemoveAllResourcePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveAllResourcePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/RemoveAllResourcePermissionsResponse.proto b/fixture/RemoveAllResourcePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveAllResourcePermissionsResponse.proto
diff --git a/fixture/RemoveResourcePermission.yaml b/fixture/RemoveResourcePermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveResourcePermission.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/RemoveResourcePermissionResponse.proto b/fixture/RemoveResourcePermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveResourcePermissionResponse.proto
diff --git a/fixture/UpdateDocument.yaml b/fixture/UpdateDocument.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDocument.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/UpdateDocumentResponse.proto b/fixture/UpdateDocumentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDocumentResponse.proto
diff --git a/fixture/UpdateDocumentVersion.yaml b/fixture/UpdateDocumentVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDocumentVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/UpdateDocumentVersionResponse.proto b/fixture/UpdateDocumentVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDocumentVersionResponse.proto
diff --git a/fixture/UpdateFolder.yaml b/fixture/UpdateFolder.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFolder.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/UpdateFolderResponse.proto b/fixture/UpdateFolderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFolderResponse.proto
diff --git a/fixture/UpdateUser.yaml b/fixture/UpdateUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateUser.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workdocs/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workdocs.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/UpdateUserResponse.proto b/fixture/UpdateUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateUserResponse.proto
diff --git a/gen/Network/AWS/WorkDocs.hs b/gen/Network/AWS/WorkDocs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs.hs
@@ -0,0 +1,560 @@
+{-# 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.WorkDocs
+-- 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)
+--
+-- The WorkDocs API is designed for the following use cases:
+--
+--
+--     * File Migration: File migration applications are supported for users who want to migrate their files from an on-premise or off-premise file system or service. Users can insert files into a user directory structure, as well as allow for basic metadata changes, such as modifications to the permissions of files.
+--
+--     * Security: Support security applications are supported for users who have additional security needs, such as anti-virus or data loss prevention. The APIs, in conjunction with Amazon CloudTrail, allow these applications to detect when changes occur in Amazon WorkDocs, so the application can take the necessary actions and replace the target file. The application can also choose to email the user if the target file violates the policy.
+--
+--     * eDiscovery/Analytics: General administrative applications are supported, such as eDiscovery and analytics. These applications can choose to mimic and/or record the actions in an Amazon WorkDocs site, in conjunction with Amazon CloudTrails, to replicate data for eDiscovery, backup, or analytical applications.
+--
+--
+--
+-- All Amazon WorkDocs APIs are Amazon authenticated, certificate-signed APIs. They not only require the use of the AWS SDK, but also allow for the exclusive use of IAM users and roles to help facilitate access, trust, and permission policies. By creating a role and allowing an IAM user to access the Amazon WorkDocs site, the IAM user gains full administrative visibility into the entire Amazon WorkDocs site (or as set in the IAM policy). This includes, but is not limited to, the ability to modify file permissions and upload any file to any user. This allows developers to perform the three use cases above, as well as give users the ability to grant access on a selective basis using the IAM model.
+--
+module Network.AWS.WorkDocs
+    (
+    -- * Service Configuration
+      workDocs
+
+    -- * Errors
+    -- $errors
+
+    -- ** CustomMetadataLimitExceededException
+    , _CustomMetadataLimitExceededException
+
+    -- ** EntityAlreadyExistsException
+    , _EntityAlreadyExistsException
+
+    -- ** ResourceAlreadyCheckedOutException
+    , _ResourceAlreadyCheckedOutException
+
+    -- ** ProhibitedStateException
+    , _ProhibitedStateException
+
+    -- ** TooManyLabelsException
+    , _TooManyLabelsException
+
+    -- ** InvalidArgumentException
+    , _InvalidArgumentException
+
+    -- ** UnauthorizedResourceAccessException
+    , _UnauthorizedResourceAccessException
+
+    -- ** TooManySubscriptionsException
+    , _TooManySubscriptionsException
+
+    -- ** FailedDependencyException
+    , _FailedDependencyException
+
+    -- ** DocumentLockedForCommentsException
+    , _DocumentLockedForCommentsException
+
+    -- ** EntityNotExistsException
+    , _EntityNotExistsException
+
+    -- ** DeactivatingLastSystemUserException
+    , _DeactivatingLastSystemUserException
+
+    -- ** IllegalUserStateException
+    , _IllegalUserStateException
+
+    -- ** StorageLimitWillExceedException
+    , _StorageLimitWillExceedException
+
+    -- ** ConcurrentModificationException
+    , _ConcurrentModificationException
+
+    -- ** StorageLimitExceededException
+    , _StorageLimitExceededException
+
+    -- ** ServiceUnavailableException
+    , _ServiceUnavailableException
+
+    -- ** InvalidOperationException
+    , _InvalidOperationException
+
+    -- ** UnauthorizedOperationException
+    , _UnauthorizedOperationException
+
+    -- ** DraftUploadOutOfSyncException
+    , _DraftUploadOutOfSyncException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DeleteLabels
+    , module Network.AWS.WorkDocs.DeleteLabels
+
+    -- ** AbortDocumentVersionUpload
+    , module Network.AWS.WorkDocs.AbortDocumentVersionUpload
+
+    -- ** GetDocumentPath
+    , module Network.AWS.WorkDocs.GetDocumentPath
+
+    -- ** CreateComment
+    , module Network.AWS.WorkDocs.CreateComment
+
+    -- ** DescribeUsers (Paginated)
+    , module Network.AWS.WorkDocs.DescribeUsers
+
+    -- ** DeleteFolder
+    , module Network.AWS.WorkDocs.DeleteFolder
+
+    -- ** UpdateFolder
+    , module Network.AWS.WorkDocs.UpdateFolder
+
+    -- ** DeleteCustomMetadata
+    , module Network.AWS.WorkDocs.DeleteCustomMetadata
+
+    -- ** DescribeResourcePermissions
+    , module Network.AWS.WorkDocs.DescribeResourcePermissions
+
+    -- ** DeleteNotificationSubscription
+    , module Network.AWS.WorkDocs.DeleteNotificationSubscription
+
+    -- ** CreateFolder
+    , module Network.AWS.WorkDocs.CreateFolder
+
+    -- ** CreateNotificationSubscription
+    , module Network.AWS.WorkDocs.CreateNotificationSubscription
+
+    -- ** CreateCustomMetadata
+    , module Network.AWS.WorkDocs.CreateCustomMetadata
+
+    -- ** GetFolderPath
+    , module Network.AWS.WorkDocs.GetFolderPath
+
+    -- ** DescribeComments
+    , module Network.AWS.WorkDocs.DescribeComments
+
+    -- ** DeleteFolderContents
+    , module Network.AWS.WorkDocs.DeleteFolderContents
+
+    -- ** RemoveAllResourcePermissions
+    , module Network.AWS.WorkDocs.RemoveAllResourcePermissions
+
+    -- ** GetFolder
+    , module Network.AWS.WorkDocs.GetFolder
+
+    -- ** DescribeNotificationSubscriptions
+    , module Network.AWS.WorkDocs.DescribeNotificationSubscriptions
+
+    -- ** ActivateUser
+    , module Network.AWS.WorkDocs.ActivateUser
+
+    -- ** DescribeDocumentVersions (Paginated)
+    , module Network.AWS.WorkDocs.DescribeDocumentVersions
+
+    -- ** GetDocumentVersion
+    , module Network.AWS.WorkDocs.GetDocumentVersion
+
+    -- ** DescribeActivities
+    , module Network.AWS.WorkDocs.DescribeActivities
+
+    -- ** DescribeRootFolders
+    , module Network.AWS.WorkDocs.DescribeRootFolders
+
+    -- ** GetCurrentUser
+    , module Network.AWS.WorkDocs.GetCurrentUser
+
+    -- ** DeactivateUser
+    , module Network.AWS.WorkDocs.DeactivateUser
+
+    -- ** GetDocument
+    , module Network.AWS.WorkDocs.GetDocument
+
+    -- ** DescribeFolderContents (Paginated)
+    , module Network.AWS.WorkDocs.DescribeFolderContents
+
+    -- ** CreateLabels
+    , module Network.AWS.WorkDocs.CreateLabels
+
+    -- ** UpdateDocumentVersion
+    , module Network.AWS.WorkDocs.UpdateDocumentVersion
+
+    -- ** RemoveResourcePermission
+    , module Network.AWS.WorkDocs.RemoveResourcePermission
+
+    -- ** DeleteComment
+    , module Network.AWS.WorkDocs.DeleteComment
+
+    -- ** InitiateDocumentVersionUpload
+    , module Network.AWS.WorkDocs.InitiateDocumentVersionUpload
+
+    -- ** CreateUser
+    , module Network.AWS.WorkDocs.CreateUser
+
+    -- ** UpdateUser
+    , module Network.AWS.WorkDocs.UpdateUser
+
+    -- ** DeleteUser
+    , module Network.AWS.WorkDocs.DeleteUser
+
+    -- ** AddResourcePermissions
+    , module Network.AWS.WorkDocs.AddResourcePermissions
+
+    -- ** UpdateDocument
+    , module Network.AWS.WorkDocs.UpdateDocument
+
+    -- ** DeleteDocument
+    , module Network.AWS.WorkDocs.DeleteDocument
+
+    -- * Types
+
+    -- ** ActivityType
+    , ActivityType (..)
+
+    -- ** CommentStatusType
+    , CommentStatusType (..)
+
+    -- ** CommentVisibilityType
+    , CommentVisibilityType (..)
+
+    -- ** DocumentSourceType
+    , DocumentSourceType (..)
+
+    -- ** DocumentStatusType
+    , DocumentStatusType (..)
+
+    -- ** DocumentThumbnailType
+    , DocumentThumbnailType (..)
+
+    -- ** DocumentVersionStatus
+    , DocumentVersionStatus (..)
+
+    -- ** FolderContentType
+    , FolderContentType (..)
+
+    -- ** LocaleType
+    , LocaleType (..)
+
+    -- ** OrderType
+    , OrderType (..)
+
+    -- ** PrincipalType
+    , PrincipalType (..)
+
+    -- ** ResourceSortType
+    , ResourceSortType (..)
+
+    -- ** ResourceStateType
+    , ResourceStateType (..)
+
+    -- ** ResourceType
+    , ResourceType (..)
+
+    -- ** RolePermissionType
+    , RolePermissionType (..)
+
+    -- ** RoleType
+    , RoleType (..)
+
+    -- ** ShareStatusType
+    , ShareStatusType (..)
+
+    -- ** StorageType
+    , StorageType (..)
+
+    -- ** SubscriptionProtocolType
+    , SubscriptionProtocolType (..)
+
+    -- ** SubscriptionType
+    , SubscriptionType (..)
+
+    -- ** UserFilterType
+    , UserFilterType (..)
+
+    -- ** UserSortType
+    , UserSortType (..)
+
+    -- ** UserStatusType
+    , UserStatusType (..)
+
+    -- ** UserType
+    , UserType (..)
+
+    -- ** Activity
+    , Activity
+    , activity
+    , aResourceMetadata
+    , aInitiator
+    , aParticipants
+    , aOriginalParent
+    , aType
+    , aCommentMetadata
+    , aTimeStamp
+    , aOrganizationId
+
+    -- ** Comment
+    , Comment
+    , comment
+    , cStatus
+    , cText
+    , cVisibility
+    , cThreadId
+    , cContributor
+    , cCreatedTimestamp
+    , cRecipientId
+    , cParentId
+    , cCommentId
+
+    -- ** CommentMetadata
+    , CommentMetadata
+    , commentMetadata
+    , cmCommentStatus
+    , cmContributor
+    , cmCommentId
+    , cmCreatedTimestamp
+    , cmRecipientId
+
+    -- ** DocumentMetadata
+    , DocumentMetadata
+    , documentMetadata
+    , dmLatestVersionMetadata
+    , dmParentFolderId
+    , dmModifiedTimestamp
+    , dmId
+    , dmLabels
+    , dmResourceState
+    , dmCreatedTimestamp
+    , dmCreatorId
+
+    -- ** DocumentVersionMetadata
+    , DocumentVersionMetadata
+    , documentVersionMetadata
+    , dvmThumbnail
+    , dvmStatus
+    , dvmSignature
+    , dvmContentCreatedTimestamp
+    , dvmSize
+    , dvmName
+    , dvmModifiedTimestamp
+    , dvmSource
+    , dvmId
+    , dvmCreatedTimestamp
+    , dvmContentModifiedTimestamp
+    , dvmCreatorId
+    , dvmContentType
+
+    -- ** FolderMetadata
+    , FolderMetadata
+    , folderMetadata
+    , fmSignature
+    , fmParentFolderId
+    , fmSize
+    , fmLatestVersionSize
+    , fmName
+    , fmModifiedTimestamp
+    , fmId
+    , fmLabels
+    , fmResourceState
+    , fmCreatedTimestamp
+    , fmCreatorId
+
+    -- ** GroupMetadata
+    , GroupMetadata
+    , groupMetadata
+    , gmName
+    , gmId
+
+    -- ** Participants
+    , Participants
+    , participants
+    , pGroups
+    , pUsers
+
+    -- ** PermissionInfo
+    , PermissionInfo
+    , permissionInfo
+    , piRole
+    , piType
+
+    -- ** Principal
+    , Principal
+    , principal
+    , pRoles
+    , pId
+    , pType
+
+    -- ** ResourceMetadata
+    , ResourceMetadata
+    , resourceMetadata
+    , rmVersionId
+    , rmOwner
+    , rmName
+    , rmId
+    , rmType
+    , rmOriginalName
+    , rmParentId
+
+    -- ** ResourcePath
+    , ResourcePath
+    , resourcePath
+    , rpComponents
+
+    -- ** ResourcePathComponent
+    , ResourcePathComponent
+    , resourcePathComponent
+    , rpcName
+    , rpcId
+
+    -- ** SharePrincipal
+    , SharePrincipal
+    , sharePrincipal
+    , spId
+    , spType
+    , spRole
+
+    -- ** ShareResult
+    , ShareResult
+    , shareResult
+    , srStatus
+    , srPrincipalId
+    , srRole
+    , srStatusMessage
+    , srShareId
+
+    -- ** StorageRuleType
+    , StorageRuleType
+    , storageRuleType
+    , srtStorageAllocatedInBytes
+    , srtStorageType
+
+    -- ** Subscription
+    , Subscription
+    , subscription
+    , sProtocol
+    , sEndPoint
+    , sSubscriptionId
+
+    -- ** UploadMetadata
+    , UploadMetadata
+    , uploadMetadata
+    , umUploadURL
+    , umSignedHeaders
+
+    -- ** User
+    , User
+    , user
+    , uGivenName
+    , uStatus
+    , uLocale
+    , uUsername
+    , uStorage
+    , uModifiedTimestamp
+    , uEmailAddress
+    , uId
+    , uRootFolderId
+    , uType
+    , uSurname
+    , uTimeZoneId
+    , uCreatedTimestamp
+    , uOrganizationId
+    , uRecycleBinFolderId
+
+    -- ** UserMetadata
+    , UserMetadata
+    , userMetadata
+    , umGivenName
+    , umUsername
+    , umEmailAddress
+    , umId
+    , umSurname
+
+    -- ** UserStorageMetadata
+    , UserStorageMetadata
+    , userStorageMetadata
+    , usmStorageUtilizedInBytes
+    , usmStorageRule
+    ) where
+
+import Network.AWS.WorkDocs.AbortDocumentVersionUpload
+import Network.AWS.WorkDocs.ActivateUser
+import Network.AWS.WorkDocs.AddResourcePermissions
+import Network.AWS.WorkDocs.CreateComment
+import Network.AWS.WorkDocs.CreateCustomMetadata
+import Network.AWS.WorkDocs.CreateFolder
+import Network.AWS.WorkDocs.CreateLabels
+import Network.AWS.WorkDocs.CreateNotificationSubscription
+import Network.AWS.WorkDocs.CreateUser
+import Network.AWS.WorkDocs.DeactivateUser
+import Network.AWS.WorkDocs.DeleteComment
+import Network.AWS.WorkDocs.DeleteCustomMetadata
+import Network.AWS.WorkDocs.DeleteDocument
+import Network.AWS.WorkDocs.DeleteFolder
+import Network.AWS.WorkDocs.DeleteFolderContents
+import Network.AWS.WorkDocs.DeleteLabels
+import Network.AWS.WorkDocs.DeleteNotificationSubscription
+import Network.AWS.WorkDocs.DeleteUser
+import Network.AWS.WorkDocs.DescribeActivities
+import Network.AWS.WorkDocs.DescribeComments
+import Network.AWS.WorkDocs.DescribeDocumentVersions
+import Network.AWS.WorkDocs.DescribeFolderContents
+import Network.AWS.WorkDocs.DescribeNotificationSubscriptions
+import Network.AWS.WorkDocs.DescribeResourcePermissions
+import Network.AWS.WorkDocs.DescribeRootFolders
+import Network.AWS.WorkDocs.DescribeUsers
+import Network.AWS.WorkDocs.GetCurrentUser
+import Network.AWS.WorkDocs.GetDocument
+import Network.AWS.WorkDocs.GetDocumentPath
+import Network.AWS.WorkDocs.GetDocumentVersion
+import Network.AWS.WorkDocs.GetFolder
+import Network.AWS.WorkDocs.GetFolderPath
+import Network.AWS.WorkDocs.InitiateDocumentVersionUpload
+import Network.AWS.WorkDocs.RemoveAllResourcePermissions
+import Network.AWS.WorkDocs.RemoveResourcePermission
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.UpdateDocument
+import Network.AWS.WorkDocs.UpdateDocumentVersion
+import Network.AWS.WorkDocs.UpdateFolder
+import Network.AWS.WorkDocs.UpdateUser
+import Network.AWS.WorkDocs.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 'WorkDocs'.
+-}
+
+{- $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/WorkDocs/AbortDocumentVersionUpload.hs b/gen/Network/AWS/WorkDocs/AbortDocumentVersionUpload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/AbortDocumentVersionUpload.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.WorkDocs.AbortDocumentVersionUpload
+-- 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)
+--
+-- Aborts the upload of the specified document version that was previously initiated by 'InitiateDocumentVersionUpload' . The client should make this call only when it no longer intends to upload the document version, or fails to do so.
+--
+--
+module Network.AWS.WorkDocs.AbortDocumentVersionUpload
+    (
+    -- * Creating a Request
+      abortDocumentVersionUpload
+    , AbortDocumentVersionUpload
+    -- * Request Lenses
+    , advuAuthenticationToken
+    , advuDocumentId
+    , advuVersionId
+
+    -- * Destructuring the Response
+    , abortDocumentVersionUploadResponse
+    , AbortDocumentVersionUploadResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'abortDocumentVersionUpload' smart constructor.
+data AbortDocumentVersionUpload = AbortDocumentVersionUpload'
+  { _advuAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _advuDocumentId          :: !Text
+  , _advuVersionId           :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AbortDocumentVersionUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'advuAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'advuDocumentId' - The ID of the document.
+--
+-- * 'advuVersionId' - The ID of the version.
+abortDocumentVersionUpload
+    :: Text -- ^ 'advuDocumentId'
+    -> Text -- ^ 'advuVersionId'
+    -> AbortDocumentVersionUpload
+abortDocumentVersionUpload pDocumentId_ pVersionId_ =
+  AbortDocumentVersionUpload'
+  { _advuAuthenticationToken = Nothing
+  , _advuDocumentId = pDocumentId_
+  , _advuVersionId = pVersionId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+advuAuthenticationToken :: Lens' AbortDocumentVersionUpload (Maybe Text)
+advuAuthenticationToken = lens _advuAuthenticationToken (\ s a -> s{_advuAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the document.
+advuDocumentId :: Lens' AbortDocumentVersionUpload Text
+advuDocumentId = lens _advuDocumentId (\ s a -> s{_advuDocumentId = a});
+
+-- | The ID of the version.
+advuVersionId :: Lens' AbortDocumentVersionUpload Text
+advuVersionId = lens _advuVersionId (\ s a -> s{_advuVersionId = a});
+
+instance AWSRequest AbortDocumentVersionUpload where
+        type Rs AbortDocumentVersionUpload =
+             AbortDocumentVersionUploadResponse
+        request = delete workDocs
+        response
+          = receiveNull AbortDocumentVersionUploadResponse'
+
+instance Hashable AbortDocumentVersionUpload where
+
+instance NFData AbortDocumentVersionUpload where
+
+instance ToHeaders AbortDocumentVersionUpload where
+        toHeaders AbortDocumentVersionUpload'{..}
+          = mconcat
+              ["Authentication" =# _advuAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath AbortDocumentVersionUpload where
+        toPath AbortDocumentVersionUpload'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _advuDocumentId,
+               "/versions/", toBS _advuVersionId]
+
+instance ToQuery AbortDocumentVersionUpload where
+        toQuery = const mempty
+
+-- | /See:/ 'abortDocumentVersionUploadResponse' smart constructor.
+data AbortDocumentVersionUploadResponse =
+  AbortDocumentVersionUploadResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AbortDocumentVersionUploadResponse' with the minimum fields required to make a request.
+--
+abortDocumentVersionUploadResponse
+    :: AbortDocumentVersionUploadResponse
+abortDocumentVersionUploadResponse = AbortDocumentVersionUploadResponse'
+
+
+instance NFData AbortDocumentVersionUploadResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/ActivateUser.hs b/gen/Network/AWS/WorkDocs/ActivateUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/ActivateUser.hs
@@ -0,0 +1,138 @@
+{-# 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.WorkDocs.ActivateUser
+-- 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)
+--
+-- Activates the specified user. Only active users can access Amazon WorkDocs.
+--
+--
+module Network.AWS.WorkDocs.ActivateUser
+    (
+    -- * Creating a Request
+      activateUser
+    , ActivateUser
+    -- * Request Lenses
+    , auAuthenticationToken
+    , auUserId
+
+    -- * Destructuring the Response
+    , activateUserResponse
+    , ActivateUserResponse
+    -- * Response Lenses
+    , aursUser
+    , aursResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'activateUser' smart constructor.
+data ActivateUser = ActivateUser'
+  { _auAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _auUserId              :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ActivateUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'auAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'auUserId' - The ID of the user.
+activateUser
+    :: Text -- ^ 'auUserId'
+    -> ActivateUser
+activateUser pUserId_ =
+  ActivateUser' {_auAuthenticationToken = Nothing, _auUserId = pUserId_}
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+auAuthenticationToken :: Lens' ActivateUser (Maybe Text)
+auAuthenticationToken = lens _auAuthenticationToken (\ s a -> s{_auAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the user.
+auUserId :: Lens' ActivateUser Text
+auUserId = lens _auUserId (\ s a -> s{_auUserId = a});
+
+instance AWSRequest ActivateUser where
+        type Rs ActivateUser = ActivateUserResponse
+        request = postJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ActivateUserResponse' <$>
+                   (x .?> "User") <*> (pure (fromEnum s)))
+
+instance Hashable ActivateUser where
+
+instance NFData ActivateUser where
+
+instance ToHeaders ActivateUser where
+        toHeaders ActivateUser'{..}
+          = mconcat
+              ["Authentication" =# _auAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON ActivateUser where
+        toJSON = const (Object mempty)
+
+instance ToPath ActivateUser where
+        toPath ActivateUser'{..}
+          = mconcat
+              ["/api/v1/users/", toBS _auUserId, "/activation"]
+
+instance ToQuery ActivateUser where
+        toQuery = const mempty
+
+-- | /See:/ 'activateUserResponse' smart constructor.
+data ActivateUserResponse = ActivateUserResponse'
+  { _aursUser           :: !(Maybe User)
+  , _aursResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ActivateUserResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aursUser' - The user information.
+--
+-- * 'aursResponseStatus' - -- | The response status code.
+activateUserResponse
+    :: Int -- ^ 'aursResponseStatus'
+    -> ActivateUserResponse
+activateUserResponse pResponseStatus_ =
+  ActivateUserResponse'
+  {_aursUser = Nothing, _aursResponseStatus = pResponseStatus_}
+
+
+-- | The user information.
+aursUser :: Lens' ActivateUserResponse (Maybe User)
+aursUser = lens _aursUser (\ s a -> s{_aursUser = a});
+
+-- | -- | The response status code.
+aursResponseStatus :: Lens' ActivateUserResponse Int
+aursResponseStatus = lens _aursResponseStatus (\ s a -> s{_aursResponseStatus = a});
+
+instance NFData ActivateUserResponse where
diff --git a/gen/Network/AWS/WorkDocs/AddResourcePermissions.hs b/gen/Network/AWS/WorkDocs/AddResourcePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/AddResourcePermissions.hs
@@ -0,0 +1,155 @@
+{-# 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.WorkDocs.AddResourcePermissions
+-- 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 set of permissions for the specified folder or document. The resource permissions are overwritten if the principals already have different permissions.
+--
+--
+module Network.AWS.WorkDocs.AddResourcePermissions
+    (
+    -- * Creating a Request
+      addResourcePermissions
+    , AddResourcePermissions
+    -- * Request Lenses
+    , arpAuthenticationToken
+    , arpResourceId
+    , arpPrincipals
+
+    -- * Destructuring the Response
+    , addResourcePermissionsResponse
+    , AddResourcePermissionsResponse
+    -- * Response Lenses
+    , arprsShareResults
+    , arprsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'addResourcePermissions' smart constructor.
+data AddResourcePermissions = AddResourcePermissions'
+  { _arpAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _arpResourceId          :: !Text
+  , _arpPrincipals          :: ![SharePrincipal]
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AddResourcePermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arpAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'arpResourceId' - The ID of the resource.
+--
+-- * 'arpPrincipals' - The users, groups, or organization being granted permission.
+addResourcePermissions
+    :: Text -- ^ 'arpResourceId'
+    -> AddResourcePermissions
+addResourcePermissions pResourceId_ =
+  AddResourcePermissions'
+  { _arpAuthenticationToken = Nothing
+  , _arpResourceId = pResourceId_
+  , _arpPrincipals = mempty
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+arpAuthenticationToken :: Lens' AddResourcePermissions (Maybe Text)
+arpAuthenticationToken = lens _arpAuthenticationToken (\ s a -> s{_arpAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the resource.
+arpResourceId :: Lens' AddResourcePermissions Text
+arpResourceId = lens _arpResourceId (\ s a -> s{_arpResourceId = a});
+
+-- | The users, groups, or organization being granted permission.
+arpPrincipals :: Lens' AddResourcePermissions [SharePrincipal]
+arpPrincipals = lens _arpPrincipals (\ s a -> s{_arpPrincipals = a}) . _Coerce;
+
+instance AWSRequest AddResourcePermissions where
+        type Rs AddResourcePermissions =
+             AddResourcePermissionsResponse
+        request = postJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 AddResourcePermissionsResponse' <$>
+                   (x .?> "ShareResults" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance Hashable AddResourcePermissions where
+
+instance NFData AddResourcePermissions where
+
+instance ToHeaders AddResourcePermissions where
+        toHeaders AddResourcePermissions'{..}
+          = mconcat
+              ["Authentication" =# _arpAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON AddResourcePermissions where
+        toJSON AddResourcePermissions'{..}
+          = object
+              (catMaybes [Just ("Principals" .= _arpPrincipals)])
+
+instance ToPath AddResourcePermissions where
+        toPath AddResourcePermissions'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _arpResourceId,
+               "/permissions"]
+
+instance ToQuery AddResourcePermissions where
+        toQuery = const mempty
+
+-- | /See:/ 'addResourcePermissionsResponse' smart constructor.
+data AddResourcePermissionsResponse = AddResourcePermissionsResponse'
+  { _arprsShareResults   :: !(Maybe [ShareResult])
+  , _arprsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AddResourcePermissionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arprsShareResults' - The share results.
+--
+-- * 'arprsResponseStatus' - -- | The response status code.
+addResourcePermissionsResponse
+    :: Int -- ^ 'arprsResponseStatus'
+    -> AddResourcePermissionsResponse
+addResourcePermissionsResponse pResponseStatus_ =
+  AddResourcePermissionsResponse'
+  {_arprsShareResults = Nothing, _arprsResponseStatus = pResponseStatus_}
+
+
+-- | The share results.
+arprsShareResults :: Lens' AddResourcePermissionsResponse [ShareResult]
+arprsShareResults = lens _arprsShareResults (\ s a -> s{_arprsShareResults = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+arprsResponseStatus :: Lens' AddResourcePermissionsResponse Int
+arprsResponseStatus = lens _arprsResponseStatus (\ s a -> s{_arprsResponseStatus = a});
+
+instance NFData AddResourcePermissionsResponse where
diff --git a/gen/Network/AWS/WorkDocs/CreateComment.hs b/gen/Network/AWS/WorkDocs/CreateComment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/CreateComment.hs
@@ -0,0 +1,206 @@
+{-# 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.WorkDocs.CreateComment
+-- 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)
+--
+-- Adds a new comment to the specified document version.
+--
+--
+module Network.AWS.WorkDocs.CreateComment
+    (
+    -- * Creating a Request
+      createComment
+    , CreateComment
+    -- * Request Lenses
+    , ccNotifyCollaborators
+    , ccAuthenticationToken
+    , ccVisibility
+    , ccThreadId
+    , ccParentId
+    , ccDocumentId
+    , ccVersionId
+    , ccText
+
+    -- * Destructuring the Response
+    , createCommentResponse
+    , CreateCommentResponse
+    -- * Response Lenses
+    , ccrsComment
+    , ccrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'createComment' smart constructor.
+data CreateComment = CreateComment'
+  { _ccNotifyCollaborators :: !(Maybe Bool)
+  , _ccAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _ccVisibility          :: !(Maybe CommentVisibilityType)
+  , _ccThreadId            :: !(Maybe Text)
+  , _ccParentId            :: !(Maybe Text)
+  , _ccDocumentId          :: !Text
+  , _ccVersionId           :: !Text
+  , _ccText                :: !(Sensitive Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateComment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccNotifyCollaborators' - Set this parameter to TRUE to send an email out to the document collaborators after the comment is created.
+--
+-- * 'ccAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'ccVisibility' - The visibility of the comment. Options are either PRIVATE, where the comment is visible only to the comment author and document owner and co-owners, or PUBLIC, where the comment is visible to document owners, co-owners, and contributors.
+--
+-- * 'ccThreadId' - The ID of the root comment in the thread.
+--
+-- * 'ccParentId' - The ID of the parent comment.
+--
+-- * 'ccDocumentId' - The ID of the document.
+--
+-- * 'ccVersionId' - The ID of the document version.
+--
+-- * 'ccText' - The text of the comment.
+createComment
+    :: Text -- ^ 'ccDocumentId'
+    -> Text -- ^ 'ccVersionId'
+    -> Text -- ^ 'ccText'
+    -> CreateComment
+createComment pDocumentId_ pVersionId_ pText_ =
+  CreateComment'
+  { _ccNotifyCollaborators = Nothing
+  , _ccAuthenticationToken = Nothing
+  , _ccVisibility = Nothing
+  , _ccThreadId = Nothing
+  , _ccParentId = Nothing
+  , _ccDocumentId = pDocumentId_
+  , _ccVersionId = pVersionId_
+  , _ccText = _Sensitive # pText_
+  }
+
+
+-- | Set this parameter to TRUE to send an email out to the document collaborators after the comment is created.
+ccNotifyCollaborators :: Lens' CreateComment (Maybe Bool)
+ccNotifyCollaborators = lens _ccNotifyCollaborators (\ s a -> s{_ccNotifyCollaborators = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+ccAuthenticationToken :: Lens' CreateComment (Maybe Text)
+ccAuthenticationToken = lens _ccAuthenticationToken (\ s a -> s{_ccAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The visibility of the comment. Options are either PRIVATE, where the comment is visible only to the comment author and document owner and co-owners, or PUBLIC, where the comment is visible to document owners, co-owners, and contributors.
+ccVisibility :: Lens' CreateComment (Maybe CommentVisibilityType)
+ccVisibility = lens _ccVisibility (\ s a -> s{_ccVisibility = a});
+
+-- | The ID of the root comment in the thread.
+ccThreadId :: Lens' CreateComment (Maybe Text)
+ccThreadId = lens _ccThreadId (\ s a -> s{_ccThreadId = a});
+
+-- | The ID of the parent comment.
+ccParentId :: Lens' CreateComment (Maybe Text)
+ccParentId = lens _ccParentId (\ s a -> s{_ccParentId = a});
+
+-- | The ID of the document.
+ccDocumentId :: Lens' CreateComment Text
+ccDocumentId = lens _ccDocumentId (\ s a -> s{_ccDocumentId = a});
+
+-- | The ID of the document version.
+ccVersionId :: Lens' CreateComment Text
+ccVersionId = lens _ccVersionId (\ s a -> s{_ccVersionId = a});
+
+-- | The text of the comment.
+ccText :: Lens' CreateComment Text
+ccText = lens _ccText (\ s a -> s{_ccText = a}) . _Sensitive;
+
+instance AWSRequest CreateComment where
+        type Rs CreateComment = CreateCommentResponse
+        request = postJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateCommentResponse' <$>
+                   (x .?> "Comment") <*> (pure (fromEnum s)))
+
+instance Hashable CreateComment where
+
+instance NFData CreateComment where
+
+instance ToHeaders CreateComment where
+        toHeaders CreateComment'{..}
+          = mconcat
+              ["Authentication" =# _ccAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON CreateComment where
+        toJSON CreateComment'{..}
+          = object
+              (catMaybes
+                 [("NotifyCollaborators" .=) <$>
+                    _ccNotifyCollaborators,
+                  ("Visibility" .=) <$> _ccVisibility,
+                  ("ThreadId" .=) <$> _ccThreadId,
+                  ("ParentId" .=) <$> _ccParentId,
+                  Just ("Text" .= _ccText)])
+
+instance ToPath CreateComment where
+        toPath CreateComment'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _ccDocumentId,
+               "/versions/", toBS _ccVersionId, "/comment"]
+
+instance ToQuery CreateComment where
+        toQuery = const mempty
+
+-- | /See:/ 'createCommentResponse' smart constructor.
+data CreateCommentResponse = CreateCommentResponse'
+  { _ccrsComment        :: !(Maybe Comment)
+  , _ccrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateCommentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccrsComment' - The comment that has been created.
+--
+-- * 'ccrsResponseStatus' - -- | The response status code.
+createCommentResponse
+    :: Int -- ^ 'ccrsResponseStatus'
+    -> CreateCommentResponse
+createCommentResponse pResponseStatus_ =
+  CreateCommentResponse'
+  {_ccrsComment = Nothing, _ccrsResponseStatus = pResponseStatus_}
+
+
+-- | The comment that has been created.
+ccrsComment :: Lens' CreateCommentResponse (Maybe Comment)
+ccrsComment = lens _ccrsComment (\ s a -> s{_ccrsComment = a});
+
+-- | -- | The response status code.
+ccrsResponseStatus :: Lens' CreateCommentResponse Int
+ccrsResponseStatus = lens _ccrsResponseStatus (\ s a -> s{_ccrsResponseStatus = a});
+
+instance NFData CreateCommentResponse where
diff --git a/gen/Network/AWS/WorkDocs/CreateCustomMetadata.hs b/gen/Network/AWS/WorkDocs/CreateCustomMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/CreateCustomMetadata.hs
@@ -0,0 +1,156 @@
+{-# 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.WorkDocs.CreateCustomMetadata
+-- 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)
+--
+-- Adds one or more custom properties to the specified resource (a folder, document, or version).
+--
+--
+module Network.AWS.WorkDocs.CreateCustomMetadata
+    (
+    -- * Creating a Request
+      createCustomMetadata
+    , CreateCustomMetadata
+    -- * Request Lenses
+    , ccmVersionId
+    , ccmAuthenticationToken
+    , ccmResourceId
+    , ccmCustomMetadata
+
+    -- * Destructuring the Response
+    , createCustomMetadataResponse
+    , CreateCustomMetadataResponse
+    -- * Response Lenses
+    , ccmrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'createCustomMetadata' smart constructor.
+data CreateCustomMetadata = CreateCustomMetadata'
+  { _ccmVersionId           :: !(Maybe Text)
+  , _ccmAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _ccmResourceId          :: !Text
+  , _ccmCustomMetadata      :: !(Map Text Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateCustomMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccmVersionId' - The ID of the version, if the custom metadata is being added to a document version.
+--
+-- * 'ccmAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'ccmResourceId' - The ID of the resource.
+--
+-- * 'ccmCustomMetadata' - Custom metadata in the form of name-value pairs.
+createCustomMetadata
+    :: Text -- ^ 'ccmResourceId'
+    -> CreateCustomMetadata
+createCustomMetadata pResourceId_ =
+  CreateCustomMetadata'
+  { _ccmVersionId = Nothing
+  , _ccmAuthenticationToken = Nothing
+  , _ccmResourceId = pResourceId_
+  , _ccmCustomMetadata = mempty
+  }
+
+
+-- | The ID of the version, if the custom metadata is being added to a document version.
+ccmVersionId :: Lens' CreateCustomMetadata (Maybe Text)
+ccmVersionId = lens _ccmVersionId (\ s a -> s{_ccmVersionId = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+ccmAuthenticationToken :: Lens' CreateCustomMetadata (Maybe Text)
+ccmAuthenticationToken = lens _ccmAuthenticationToken (\ s a -> s{_ccmAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the resource.
+ccmResourceId :: Lens' CreateCustomMetadata Text
+ccmResourceId = lens _ccmResourceId (\ s a -> s{_ccmResourceId = a});
+
+-- | Custom metadata in the form of name-value pairs.
+ccmCustomMetadata :: Lens' CreateCustomMetadata (HashMap Text Text)
+ccmCustomMetadata = lens _ccmCustomMetadata (\ s a -> s{_ccmCustomMetadata = a}) . _Map;
+
+instance AWSRequest CreateCustomMetadata where
+        type Rs CreateCustomMetadata =
+             CreateCustomMetadataResponse
+        request = putJSON workDocs
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateCustomMetadataResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable CreateCustomMetadata where
+
+instance NFData CreateCustomMetadata where
+
+instance ToHeaders CreateCustomMetadata where
+        toHeaders CreateCustomMetadata'{..}
+          = mconcat
+              ["Authentication" =# _ccmAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON CreateCustomMetadata where
+        toJSON CreateCustomMetadata'{..}
+          = object
+              (catMaybes
+                 [Just ("CustomMetadata" .= _ccmCustomMetadata)])
+
+instance ToPath CreateCustomMetadata where
+        toPath CreateCustomMetadata'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _ccmResourceId,
+               "/customMetadata"]
+
+instance ToQuery CreateCustomMetadata where
+        toQuery CreateCustomMetadata'{..}
+          = mconcat ["versionid" =: _ccmVersionId]
+
+-- | /See:/ 'createCustomMetadataResponse' smart constructor.
+newtype CreateCustomMetadataResponse = CreateCustomMetadataResponse'
+  { _ccmrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateCustomMetadataResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccmrsResponseStatus' - -- | The response status code.
+createCustomMetadataResponse
+    :: Int -- ^ 'ccmrsResponseStatus'
+    -> CreateCustomMetadataResponse
+createCustomMetadataResponse pResponseStatus_ =
+  CreateCustomMetadataResponse' {_ccmrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ccmrsResponseStatus :: Lens' CreateCustomMetadataResponse Int
+ccmrsResponseStatus = lens _ccmrsResponseStatus (\ s a -> s{_ccmrsResponseStatus = a});
+
+instance NFData CreateCustomMetadataResponse where
diff --git a/gen/Network/AWS/WorkDocs/CreateFolder.hs b/gen/Network/AWS/WorkDocs/CreateFolder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/CreateFolder.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.CreateFolder
+-- 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 folder with the specified name and parent folder.
+--
+--
+module Network.AWS.WorkDocs.CreateFolder
+    (
+    -- * Creating a Request
+      createFolder
+    , CreateFolder
+    -- * Request Lenses
+    , cfAuthenticationToken
+    , cfName
+    , cfParentFolderId
+
+    -- * Destructuring the Response
+    , createFolderResponse
+    , CreateFolderResponse
+    -- * Response Lenses
+    , cfrsMetadata
+    , cfrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'createFolder' smart constructor.
+data CreateFolder = CreateFolder'
+  { _cfAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _cfName                :: !(Maybe Text)
+  , _cfParentFolderId      :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateFolder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'cfName' - The name of the new folder.
+--
+-- * 'cfParentFolderId' - The ID of the parent folder.
+createFolder
+    :: Text -- ^ 'cfParentFolderId'
+    -> CreateFolder
+createFolder pParentFolderId_ =
+  CreateFolder'
+  { _cfAuthenticationToken = Nothing
+  , _cfName = Nothing
+  , _cfParentFolderId = pParentFolderId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+cfAuthenticationToken :: Lens' CreateFolder (Maybe Text)
+cfAuthenticationToken = lens _cfAuthenticationToken (\ s a -> s{_cfAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The name of the new folder.
+cfName :: Lens' CreateFolder (Maybe Text)
+cfName = lens _cfName (\ s a -> s{_cfName = a});
+
+-- | The ID of the parent folder.
+cfParentFolderId :: Lens' CreateFolder Text
+cfParentFolderId = lens _cfParentFolderId (\ s a -> s{_cfParentFolderId = a});
+
+instance AWSRequest CreateFolder where
+        type Rs CreateFolder = CreateFolderResponse
+        request = postJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateFolderResponse' <$>
+                   (x .?> "Metadata") <*> (pure (fromEnum s)))
+
+instance Hashable CreateFolder where
+
+instance NFData CreateFolder where
+
+instance ToHeaders CreateFolder where
+        toHeaders CreateFolder'{..}
+          = mconcat
+              ["Authentication" =# _cfAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON CreateFolder where
+        toJSON CreateFolder'{..}
+          = object
+              (catMaybes
+                 [("Name" .=) <$> _cfName,
+                  Just ("ParentFolderId" .= _cfParentFolderId)])
+
+instance ToPath CreateFolder where
+        toPath = const "/api/v1/folders"
+
+instance ToQuery CreateFolder where
+        toQuery = const mempty
+
+-- | /See:/ 'createFolderResponse' smart constructor.
+data CreateFolderResponse = CreateFolderResponse'
+  { _cfrsMetadata       :: !(Maybe FolderMetadata)
+  , _cfrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateFolderResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfrsMetadata' - The metadata of the folder.
+--
+-- * 'cfrsResponseStatus' - -- | The response status code.
+createFolderResponse
+    :: Int -- ^ 'cfrsResponseStatus'
+    -> CreateFolderResponse
+createFolderResponse pResponseStatus_ =
+  CreateFolderResponse'
+  {_cfrsMetadata = Nothing, _cfrsResponseStatus = pResponseStatus_}
+
+
+-- | The metadata of the folder.
+cfrsMetadata :: Lens' CreateFolderResponse (Maybe FolderMetadata)
+cfrsMetadata = lens _cfrsMetadata (\ s a -> s{_cfrsMetadata = a});
+
+-- | -- | The response status code.
+cfrsResponseStatus :: Lens' CreateFolderResponse Int
+cfrsResponseStatus = lens _cfrsResponseStatus (\ s a -> s{_cfrsResponseStatus = a});
+
+instance NFData CreateFolderResponse where
diff --git a/gen/Network/AWS/WorkDocs/CreateLabels.hs b/gen/Network/AWS/WorkDocs/CreateLabels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/CreateLabels.hs
@@ -0,0 +1,141 @@
+{-# 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.WorkDocs.CreateLabels
+-- 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)
+--
+-- Adds the specified list of labels to the given resource (a document or folder)
+--
+--
+module Network.AWS.WorkDocs.CreateLabels
+    (
+    -- * Creating a Request
+      createLabels
+    , CreateLabels
+    -- * Request Lenses
+    , clAuthenticationToken
+    , clResourceId
+    , clLabels
+
+    -- * Destructuring the Response
+    , createLabelsResponse
+    , CreateLabelsResponse
+    -- * Response Lenses
+    , clrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'createLabels' smart constructor.
+data CreateLabels = CreateLabels'
+  { _clAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _clResourceId          :: !Text
+  , _clLabels              :: ![Text]
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'clResourceId' - The ID of the resource.
+--
+-- * 'clLabels' - List of labels to add to the resource.
+createLabels
+    :: Text -- ^ 'clResourceId'
+    -> CreateLabels
+createLabels pResourceId_ =
+  CreateLabels'
+  { _clAuthenticationToken = Nothing
+  , _clResourceId = pResourceId_
+  , _clLabels = mempty
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+clAuthenticationToken :: Lens' CreateLabels (Maybe Text)
+clAuthenticationToken = lens _clAuthenticationToken (\ s a -> s{_clAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the resource.
+clResourceId :: Lens' CreateLabels Text
+clResourceId = lens _clResourceId (\ s a -> s{_clResourceId = a});
+
+-- | List of labels to add to the resource.
+clLabels :: Lens' CreateLabels [Text]
+clLabels = lens _clLabels (\ s a -> s{_clLabels = a}) . _Coerce;
+
+instance AWSRequest CreateLabels where
+        type Rs CreateLabels = CreateLabelsResponse
+        request = putJSON workDocs
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateLabelsResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateLabels where
+
+instance NFData CreateLabels where
+
+instance ToHeaders CreateLabels where
+        toHeaders CreateLabels'{..}
+          = mconcat
+              ["Authentication" =# _clAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON CreateLabels where
+        toJSON CreateLabels'{..}
+          = object (catMaybes [Just ("Labels" .= _clLabels)])
+
+instance ToPath CreateLabels where
+        toPath CreateLabels'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _clResourceId, "/labels"]
+
+instance ToQuery CreateLabels where
+        toQuery = const mempty
+
+-- | /See:/ 'createLabelsResponse' smart constructor.
+newtype CreateLabelsResponse = CreateLabelsResponse'
+  { _clrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateLabelsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clrsResponseStatus' - -- | The response status code.
+createLabelsResponse
+    :: Int -- ^ 'clrsResponseStatus'
+    -> CreateLabelsResponse
+createLabelsResponse pResponseStatus_ =
+  CreateLabelsResponse' {_clrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+clrsResponseStatus :: Lens' CreateLabelsResponse Int
+clrsResponseStatus = lens _clrsResponseStatus (\ s a -> s{_clrsResponseStatus = a});
+
+instance NFData CreateLabelsResponse where
diff --git a/gen/Network/AWS/WorkDocs/CreateNotificationSubscription.hs b/gen/Network/AWS/WorkDocs/CreateNotificationSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/CreateNotificationSubscription.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.WorkDocs.CreateNotificationSubscription
+-- 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)
+--
+-- Configure WorkDocs to use Amazon SNS notifications.
+--
+--
+-- The endpoint receives a confirmation message, and must confirm the subscription. For more information, see <http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html#SendMessageToHttp.confirm Confirm the Subscription> in the /Amazon Simple Notification Service Developer Guide/ .
+--
+module Network.AWS.WorkDocs.CreateNotificationSubscription
+    (
+    -- * Creating a Request
+      createNotificationSubscription
+    , CreateNotificationSubscription
+    -- * Request Lenses
+    , cnsOrganizationId
+    , cnsEndpoint
+    , cnsProtocol
+    , cnsSubscriptionType
+
+    -- * Destructuring the Response
+    , createNotificationSubscriptionResponse
+    , CreateNotificationSubscriptionResponse
+    -- * Response Lenses
+    , cnsrsSubscription
+    , cnsrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'createNotificationSubscription' smart constructor.
+data CreateNotificationSubscription = CreateNotificationSubscription'
+  { _cnsOrganizationId   :: !Text
+  , _cnsEndpoint         :: !Text
+  , _cnsProtocol         :: !SubscriptionProtocolType
+  , _cnsSubscriptionType :: !SubscriptionType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateNotificationSubscription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cnsOrganizationId' - The ID of the organization.
+--
+-- * 'cnsEndpoint' - The endpoint to receive the notifications. If the protocol is HTTPS, the endpoint is a URL that begins with "https://".
+--
+-- * 'cnsProtocol' - The protocol to use. The supported value is https, which delivers JSON-encoded messasges using HTTPS POST.
+--
+-- * 'cnsSubscriptionType' - The notification type.
+createNotificationSubscription
+    :: Text -- ^ 'cnsOrganizationId'
+    -> Text -- ^ 'cnsEndpoint'
+    -> SubscriptionProtocolType -- ^ 'cnsProtocol'
+    -> SubscriptionType -- ^ 'cnsSubscriptionType'
+    -> CreateNotificationSubscription
+createNotificationSubscription pOrganizationId_ pEndpoint_ pProtocol_ pSubscriptionType_ =
+  CreateNotificationSubscription'
+  { _cnsOrganizationId = pOrganizationId_
+  , _cnsEndpoint = pEndpoint_
+  , _cnsProtocol = pProtocol_
+  , _cnsSubscriptionType = pSubscriptionType_
+  }
+
+
+-- | The ID of the organization.
+cnsOrganizationId :: Lens' CreateNotificationSubscription Text
+cnsOrganizationId = lens _cnsOrganizationId (\ s a -> s{_cnsOrganizationId = a});
+
+-- | The endpoint to receive the notifications. If the protocol is HTTPS, the endpoint is a URL that begins with "https://".
+cnsEndpoint :: Lens' CreateNotificationSubscription Text
+cnsEndpoint = lens _cnsEndpoint (\ s a -> s{_cnsEndpoint = a});
+
+-- | The protocol to use. The supported value is https, which delivers JSON-encoded messasges using HTTPS POST.
+cnsProtocol :: Lens' CreateNotificationSubscription SubscriptionProtocolType
+cnsProtocol = lens _cnsProtocol (\ s a -> s{_cnsProtocol = a});
+
+-- | The notification type.
+cnsSubscriptionType :: Lens' CreateNotificationSubscription SubscriptionType
+cnsSubscriptionType = lens _cnsSubscriptionType (\ s a -> s{_cnsSubscriptionType = a});
+
+instance AWSRequest CreateNotificationSubscription
+         where
+        type Rs CreateNotificationSubscription =
+             CreateNotificationSubscriptionResponse
+        request = postJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateNotificationSubscriptionResponse' <$>
+                   (x .?> "Subscription") <*> (pure (fromEnum s)))
+
+instance Hashable CreateNotificationSubscription
+         where
+
+instance NFData CreateNotificationSubscription where
+
+instance ToHeaders CreateNotificationSubscription
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateNotificationSubscription where
+        toJSON CreateNotificationSubscription'{..}
+          = object
+              (catMaybes
+                 [Just ("Endpoint" .= _cnsEndpoint),
+                  Just ("Protocol" .= _cnsProtocol),
+                  Just ("SubscriptionType" .= _cnsSubscriptionType)])
+
+instance ToPath CreateNotificationSubscription where
+        toPath CreateNotificationSubscription'{..}
+          = mconcat
+              ["/api/v1/organizations/", toBS _cnsOrganizationId,
+               "/subscriptions"]
+
+instance ToQuery CreateNotificationSubscription where
+        toQuery = const mempty
+
+-- | /See:/ 'createNotificationSubscriptionResponse' smart constructor.
+data CreateNotificationSubscriptionResponse = CreateNotificationSubscriptionResponse'
+  { _cnsrsSubscription   :: !(Maybe Subscription)
+  , _cnsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateNotificationSubscriptionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cnsrsSubscription' - The subscription.
+--
+-- * 'cnsrsResponseStatus' - -- | The response status code.
+createNotificationSubscriptionResponse
+    :: Int -- ^ 'cnsrsResponseStatus'
+    -> CreateNotificationSubscriptionResponse
+createNotificationSubscriptionResponse pResponseStatus_ =
+  CreateNotificationSubscriptionResponse'
+  {_cnsrsSubscription = Nothing, _cnsrsResponseStatus = pResponseStatus_}
+
+
+-- | The subscription.
+cnsrsSubscription :: Lens' CreateNotificationSubscriptionResponse (Maybe Subscription)
+cnsrsSubscription = lens _cnsrsSubscription (\ s a -> s{_cnsrsSubscription = a});
+
+-- | -- | The response status code.
+cnsrsResponseStatus :: Lens' CreateNotificationSubscriptionResponse Int
+cnsrsResponseStatus = lens _cnsrsResponseStatus (\ s a -> s{_cnsrsResponseStatus = a});
+
+instance NFData
+           CreateNotificationSubscriptionResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/CreateUser.hs b/gen/Network/AWS/WorkDocs/CreateUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/CreateUser.hs
@@ -0,0 +1,215 @@
+{-# 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.WorkDocs.CreateUser
+-- 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 user in a Simple AD or Microsoft AD directory. The status of a newly created user is "ACTIVE". New users can access Amazon WorkDocs.
+--
+--
+module Network.AWS.WorkDocs.CreateUser
+    (
+    -- * Creating a Request
+      createUser
+    , CreateUser
+    -- * Request Lenses
+    , cuAuthenticationToken
+    , cuStorageRule
+    , cuEmailAddress
+    , cuTimeZoneId
+    , cuOrganizationId
+    , cuUsername
+    , cuGivenName
+    , cuSurname
+    , cuPassword
+
+    -- * Destructuring the Response
+    , createUserResponse
+    , CreateUserResponse
+    -- * Response Lenses
+    , cursUser
+    , cursResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'createUser' smart constructor.
+data CreateUser = CreateUser'
+  { _cuAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _cuStorageRule         :: !(Maybe StorageRuleType)
+  , _cuEmailAddress        :: !(Maybe Text)
+  , _cuTimeZoneId          :: !(Maybe Text)
+  , _cuOrganizationId      :: !(Maybe Text)
+  , _cuUsername            :: !Text
+  , _cuGivenName           :: !Text
+  , _cuSurname             :: !Text
+  , _cuPassword            :: !(Sensitive Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'cuStorageRule' - The amount of storage for the user.
+--
+-- * 'cuEmailAddress' - The email address of the user.
+--
+-- * 'cuTimeZoneId' - The time zone ID of the user.
+--
+-- * 'cuOrganizationId' - The ID of the organization.
+--
+-- * 'cuUsername' - The login name of the user.
+--
+-- * 'cuGivenName' - The given name of the user.
+--
+-- * 'cuSurname' - The surname of the user.
+--
+-- * 'cuPassword' - The password of the user.
+createUser
+    :: Text -- ^ 'cuUsername'
+    -> Text -- ^ 'cuGivenName'
+    -> Text -- ^ 'cuSurname'
+    -> Text -- ^ 'cuPassword'
+    -> CreateUser
+createUser pUsername_ pGivenName_ pSurname_ pPassword_ =
+  CreateUser'
+  { _cuAuthenticationToken = Nothing
+  , _cuStorageRule = Nothing
+  , _cuEmailAddress = Nothing
+  , _cuTimeZoneId = Nothing
+  , _cuOrganizationId = Nothing
+  , _cuUsername = pUsername_
+  , _cuGivenName = pGivenName_
+  , _cuSurname = pSurname_
+  , _cuPassword = _Sensitive # pPassword_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+cuAuthenticationToken :: Lens' CreateUser (Maybe Text)
+cuAuthenticationToken = lens _cuAuthenticationToken (\ s a -> s{_cuAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The amount of storage for the user.
+cuStorageRule :: Lens' CreateUser (Maybe StorageRuleType)
+cuStorageRule = lens _cuStorageRule (\ s a -> s{_cuStorageRule = a});
+
+-- | The email address of the user.
+cuEmailAddress :: Lens' CreateUser (Maybe Text)
+cuEmailAddress = lens _cuEmailAddress (\ s a -> s{_cuEmailAddress = a});
+
+-- | The time zone ID of the user.
+cuTimeZoneId :: Lens' CreateUser (Maybe Text)
+cuTimeZoneId = lens _cuTimeZoneId (\ s a -> s{_cuTimeZoneId = a});
+
+-- | The ID of the organization.
+cuOrganizationId :: Lens' CreateUser (Maybe Text)
+cuOrganizationId = lens _cuOrganizationId (\ s a -> s{_cuOrganizationId = a});
+
+-- | The login name of the user.
+cuUsername :: Lens' CreateUser Text
+cuUsername = lens _cuUsername (\ s a -> s{_cuUsername = a});
+
+-- | The given name of the user.
+cuGivenName :: Lens' CreateUser Text
+cuGivenName = lens _cuGivenName (\ s a -> s{_cuGivenName = a});
+
+-- | The surname of the user.
+cuSurname :: Lens' CreateUser Text
+cuSurname = lens _cuSurname (\ s a -> s{_cuSurname = a});
+
+-- | The password of the user.
+cuPassword :: Lens' CreateUser Text
+cuPassword = lens _cuPassword (\ s a -> s{_cuPassword = a}) . _Sensitive;
+
+instance AWSRequest CreateUser where
+        type Rs CreateUser = CreateUserResponse
+        request = postJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateUserResponse' <$>
+                   (x .?> "User") <*> (pure (fromEnum s)))
+
+instance Hashable CreateUser where
+
+instance NFData CreateUser where
+
+instance ToHeaders CreateUser where
+        toHeaders CreateUser'{..}
+          = mconcat
+              ["Authentication" =# _cuAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON CreateUser where
+        toJSON CreateUser'{..}
+          = object
+              (catMaybes
+                 [("StorageRule" .=) <$> _cuStorageRule,
+                  ("EmailAddress" .=) <$> _cuEmailAddress,
+                  ("TimeZoneId" .=) <$> _cuTimeZoneId,
+                  ("OrganizationId" .=) <$> _cuOrganizationId,
+                  Just ("Username" .= _cuUsername),
+                  Just ("GivenName" .= _cuGivenName),
+                  Just ("Surname" .= _cuSurname),
+                  Just ("Password" .= _cuPassword)])
+
+instance ToPath CreateUser where
+        toPath = const "/api/v1/users"
+
+instance ToQuery CreateUser where
+        toQuery = const mempty
+
+-- | /See:/ 'createUserResponse' smart constructor.
+data CreateUserResponse = CreateUserResponse'
+  { _cursUser           :: !(Maybe User)
+  , _cursResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateUserResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cursUser' - The user information.
+--
+-- * 'cursResponseStatus' - -- | The response status code.
+createUserResponse
+    :: Int -- ^ 'cursResponseStatus'
+    -> CreateUserResponse
+createUserResponse pResponseStatus_ =
+  CreateUserResponse'
+  {_cursUser = Nothing, _cursResponseStatus = pResponseStatus_}
+
+
+-- | The user information.
+cursUser :: Lens' CreateUserResponse (Maybe User)
+cursUser = lens _cursUser (\ s a -> s{_cursUser = a});
+
+-- | -- | The response status code.
+cursResponseStatus :: Lens' CreateUserResponse Int
+cursResponseStatus = lens _cursResponseStatus (\ s a -> s{_cursResponseStatus = a});
+
+instance NFData CreateUserResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeactivateUser.hs b/gen/Network/AWS/WorkDocs/DeactivateUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeactivateUser.hs
@@ -0,0 +1,111 @@
+{-# 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.WorkDocs.DeactivateUser
+-- 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)
+--
+-- Deactivates the specified user, which revokes the user's access to Amazon WorkDocs.
+--
+--
+module Network.AWS.WorkDocs.DeactivateUser
+    (
+    -- * Creating a Request
+      deactivateUser
+    , DeactivateUser
+    -- * Request Lenses
+    , dAuthenticationToken
+    , dUserId
+
+    -- * Destructuring the Response
+    , deactivateUserResponse
+    , DeactivateUserResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deactivateUser' smart constructor.
+data DeactivateUser = DeactivateUser'
+  { _dAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _dUserId              :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeactivateUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'dUserId' - The ID of the user.
+deactivateUser
+    :: Text -- ^ 'dUserId'
+    -> DeactivateUser
+deactivateUser pUserId_ =
+  DeactivateUser' {_dAuthenticationToken = Nothing, _dUserId = pUserId_}
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+dAuthenticationToken :: Lens' DeactivateUser (Maybe Text)
+dAuthenticationToken = lens _dAuthenticationToken (\ s a -> s{_dAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the user.
+dUserId :: Lens' DeactivateUser Text
+dUserId = lens _dUserId (\ s a -> s{_dUserId = a});
+
+instance AWSRequest DeactivateUser where
+        type Rs DeactivateUser = DeactivateUserResponse
+        request = delete workDocs
+        response = receiveNull DeactivateUserResponse'
+
+instance Hashable DeactivateUser where
+
+instance NFData DeactivateUser where
+
+instance ToHeaders DeactivateUser where
+        toHeaders DeactivateUser'{..}
+          = mconcat
+              ["Authentication" =# _dAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeactivateUser where
+        toPath DeactivateUser'{..}
+          = mconcat
+              ["/api/v1/users/", toBS _dUserId, "/activation"]
+
+instance ToQuery DeactivateUser where
+        toQuery = const mempty
+
+-- | /See:/ 'deactivateUserResponse' smart constructor.
+data DeactivateUserResponse =
+  DeactivateUserResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeactivateUserResponse' with the minimum fields required to make a request.
+--
+deactivateUserResponse
+    :: DeactivateUserResponse
+deactivateUserResponse = DeactivateUserResponse'
+
+
+instance NFData DeactivateUserResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeleteComment.hs b/gen/Network/AWS/WorkDocs/DeleteComment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteComment.hs
@@ -0,0 +1,136 @@
+{-# 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.WorkDocs.DeleteComment
+-- 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 specified comment from the document version.
+--
+--
+module Network.AWS.WorkDocs.DeleteComment
+    (
+    -- * Creating a Request
+      deleteComment
+    , DeleteComment
+    -- * Request Lenses
+    , delAuthenticationToken
+    , delDocumentId
+    , delVersionId
+    , delCommentId
+
+    -- * Destructuring the Response
+    , deleteCommentResponse
+    , DeleteCommentResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteComment' smart constructor.
+data DeleteComment = DeleteComment'
+  { _delAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _delDocumentId          :: !Text
+  , _delVersionId           :: !Text
+  , _delCommentId           :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteComment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'delAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'delDocumentId' - The ID of the document.
+--
+-- * 'delVersionId' - The ID of the document version.
+--
+-- * 'delCommentId' - The ID of the comment.
+deleteComment
+    :: Text -- ^ 'delDocumentId'
+    -> Text -- ^ 'delVersionId'
+    -> Text -- ^ 'delCommentId'
+    -> DeleteComment
+deleteComment pDocumentId_ pVersionId_ pCommentId_ =
+  DeleteComment'
+  { _delAuthenticationToken = Nothing
+  , _delDocumentId = pDocumentId_
+  , _delVersionId = pVersionId_
+  , _delCommentId = pCommentId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+delAuthenticationToken :: Lens' DeleteComment (Maybe Text)
+delAuthenticationToken = lens _delAuthenticationToken (\ s a -> s{_delAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the document.
+delDocumentId :: Lens' DeleteComment Text
+delDocumentId = lens _delDocumentId (\ s a -> s{_delDocumentId = a});
+
+-- | The ID of the document version.
+delVersionId :: Lens' DeleteComment Text
+delVersionId = lens _delVersionId (\ s a -> s{_delVersionId = a});
+
+-- | The ID of the comment.
+delCommentId :: Lens' DeleteComment Text
+delCommentId = lens _delCommentId (\ s a -> s{_delCommentId = a});
+
+instance AWSRequest DeleteComment where
+        type Rs DeleteComment = DeleteCommentResponse
+        request = delete workDocs
+        response = receiveNull DeleteCommentResponse'
+
+instance Hashable DeleteComment where
+
+instance NFData DeleteComment where
+
+instance ToHeaders DeleteComment where
+        toHeaders DeleteComment'{..}
+          = mconcat
+              ["Authentication" =# _delAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeleteComment where
+        toPath DeleteComment'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _delDocumentId,
+               "/versions/", toBS _delVersionId, "/comment/",
+               toBS _delCommentId]
+
+instance ToQuery DeleteComment where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteCommentResponse' smart constructor.
+data DeleteCommentResponse =
+  DeleteCommentResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteCommentResponse' with the minimum fields required to make a request.
+--
+deleteCommentResponse
+    :: DeleteCommentResponse
+deleteCommentResponse = DeleteCommentResponse'
+
+
+instance NFData DeleteCommentResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeleteCustomMetadata.hs b/gen/Network/AWS/WorkDocs/DeleteCustomMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteCustomMetadata.hs
@@ -0,0 +1,163 @@
+{-# 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.WorkDocs.DeleteCustomMetadata
+-- 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 custom metadata from the specified resource.
+--
+--
+module Network.AWS.WorkDocs.DeleteCustomMetadata
+    (
+    -- * Creating a Request
+      deleteCustomMetadata
+    , DeleteCustomMetadata
+    -- * Request Lenses
+    , dcmVersionId
+    , dcmDeleteAll
+    , dcmAuthenticationToken
+    , dcmKeys
+    , dcmResourceId
+
+    -- * Destructuring the Response
+    , deleteCustomMetadataResponse
+    , DeleteCustomMetadataResponse
+    -- * Response Lenses
+    , dcmrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteCustomMetadata' smart constructor.
+data DeleteCustomMetadata = DeleteCustomMetadata'
+  { _dcmVersionId           :: !(Maybe Text)
+  , _dcmDeleteAll           :: !(Maybe Bool)
+  , _dcmAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _dcmKeys                :: !(Maybe [Text])
+  , _dcmResourceId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteCustomMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcmVersionId' - The ID of the version, if the custom metadata is being deleted from a document version.
+--
+-- * 'dcmDeleteAll' - Flag to indicate removal of all custom metadata properties from the specified resource.
+--
+-- * 'dcmAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'dcmKeys' - List of properties to remove.
+--
+-- * 'dcmResourceId' - The ID of the resource, either a document or folder.
+deleteCustomMetadata
+    :: Text -- ^ 'dcmResourceId'
+    -> DeleteCustomMetadata
+deleteCustomMetadata pResourceId_ =
+  DeleteCustomMetadata'
+  { _dcmVersionId = Nothing
+  , _dcmDeleteAll = Nothing
+  , _dcmAuthenticationToken = Nothing
+  , _dcmKeys = Nothing
+  , _dcmResourceId = pResourceId_
+  }
+
+
+-- | The ID of the version, if the custom metadata is being deleted from a document version.
+dcmVersionId :: Lens' DeleteCustomMetadata (Maybe Text)
+dcmVersionId = lens _dcmVersionId (\ s a -> s{_dcmVersionId = a});
+
+-- | Flag to indicate removal of all custom metadata properties from the specified resource.
+dcmDeleteAll :: Lens' DeleteCustomMetadata (Maybe Bool)
+dcmDeleteAll = lens _dcmDeleteAll (\ s a -> s{_dcmDeleteAll = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+dcmAuthenticationToken :: Lens' DeleteCustomMetadata (Maybe Text)
+dcmAuthenticationToken = lens _dcmAuthenticationToken (\ s a -> s{_dcmAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | List of properties to remove.
+dcmKeys :: Lens' DeleteCustomMetadata [Text]
+dcmKeys = lens _dcmKeys (\ s a -> s{_dcmKeys = a}) . _Default . _Coerce;
+
+-- | The ID of the resource, either a document or folder.
+dcmResourceId :: Lens' DeleteCustomMetadata Text
+dcmResourceId = lens _dcmResourceId (\ s a -> s{_dcmResourceId = a});
+
+instance AWSRequest DeleteCustomMetadata where
+        type Rs DeleteCustomMetadata =
+             DeleteCustomMetadataResponse
+        request = delete workDocs
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteCustomMetadataResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable DeleteCustomMetadata where
+
+instance NFData DeleteCustomMetadata where
+
+instance ToHeaders DeleteCustomMetadata where
+        toHeaders DeleteCustomMetadata'{..}
+          = mconcat
+              ["Authentication" =# _dcmAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeleteCustomMetadata where
+        toPath DeleteCustomMetadata'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _dcmResourceId,
+               "/customMetadata"]
+
+instance ToQuery DeleteCustomMetadata where
+        toQuery DeleteCustomMetadata'{..}
+          = mconcat
+              ["versionId" =: _dcmVersionId,
+               "deleteAll" =: _dcmDeleteAll,
+               "keys" =:
+                 toQuery (toQueryList "member" <$> _dcmKeys)]
+
+-- | /See:/ 'deleteCustomMetadataResponse' smart constructor.
+newtype DeleteCustomMetadataResponse = DeleteCustomMetadataResponse'
+  { _dcmrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteCustomMetadataResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcmrsResponseStatus' - -- | The response status code.
+deleteCustomMetadataResponse
+    :: Int -- ^ 'dcmrsResponseStatus'
+    -> DeleteCustomMetadataResponse
+deleteCustomMetadataResponse pResponseStatus_ =
+  DeleteCustomMetadataResponse' {_dcmrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dcmrsResponseStatus :: Lens' DeleteCustomMetadataResponse Int
+dcmrsResponseStatus = lens _dcmrsResponseStatus (\ s a -> s{_dcmrsResponseStatus = a});
+
+instance NFData DeleteCustomMetadataResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeleteDocument.hs b/gen/Network/AWS/WorkDocs/DeleteDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteDocument.hs
@@ -0,0 +1,111 @@
+{-# 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.WorkDocs.DeleteDocument
+-- 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)
+--
+-- Permanently deletes the specified document and its associated metadata.
+--
+--
+module Network.AWS.WorkDocs.DeleteDocument
+    (
+    -- * Creating a Request
+      deleteDocument
+    , DeleteDocument
+    -- * Request Lenses
+    , ddAuthenticationToken
+    , ddDocumentId
+
+    -- * Destructuring the Response
+    , deleteDocumentResponse
+    , DeleteDocumentResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteDocument' smart constructor.
+data DeleteDocument = DeleteDocument'
+  { _ddAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _ddDocumentId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'ddDocumentId' - The ID of the document.
+deleteDocument
+    :: Text -- ^ 'ddDocumentId'
+    -> DeleteDocument
+deleteDocument pDocumentId_ =
+  DeleteDocument'
+  {_ddAuthenticationToken = Nothing, _ddDocumentId = pDocumentId_}
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+ddAuthenticationToken :: Lens' DeleteDocument (Maybe Text)
+ddAuthenticationToken = lens _ddAuthenticationToken (\ s a -> s{_ddAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the document.
+ddDocumentId :: Lens' DeleteDocument Text
+ddDocumentId = lens _ddDocumentId (\ s a -> s{_ddDocumentId = a});
+
+instance AWSRequest DeleteDocument where
+        type Rs DeleteDocument = DeleteDocumentResponse
+        request = delete workDocs
+        response = receiveNull DeleteDocumentResponse'
+
+instance Hashable DeleteDocument where
+
+instance NFData DeleteDocument where
+
+instance ToHeaders DeleteDocument where
+        toHeaders DeleteDocument'{..}
+          = mconcat
+              ["Authentication" =# _ddAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeleteDocument where
+        toPath DeleteDocument'{..}
+          = mconcat ["/api/v1/documents/", toBS _ddDocumentId]
+
+instance ToQuery DeleteDocument where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteDocumentResponse' smart constructor.
+data DeleteDocumentResponse =
+  DeleteDocumentResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDocumentResponse' with the minimum fields required to make a request.
+--
+deleteDocumentResponse
+    :: DeleteDocumentResponse
+deleteDocumentResponse = DeleteDocumentResponse'
+
+
+instance NFData DeleteDocumentResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeleteFolder.hs b/gen/Network/AWS/WorkDocs/DeleteFolder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteFolder.hs
@@ -0,0 +1,110 @@
+{-# 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.WorkDocs.DeleteFolder
+-- 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)
+--
+-- Permanently deletes the specified folder and its contents.
+--
+--
+module Network.AWS.WorkDocs.DeleteFolder
+    (
+    -- * Creating a Request
+      deleteFolder
+    , DeleteFolder
+    -- * Request Lenses
+    , dfAuthenticationToken
+    , dfFolderId
+
+    -- * Destructuring the Response
+    , deleteFolderResponse
+    , DeleteFolderResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteFolder' smart constructor.
+data DeleteFolder = DeleteFolder'
+  { _dfAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _dfFolderId            :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteFolder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'dfFolderId' - The ID of the folder.
+deleteFolder
+    :: Text -- ^ 'dfFolderId'
+    -> DeleteFolder
+deleteFolder pFolderId_ =
+  DeleteFolder' {_dfAuthenticationToken = Nothing, _dfFolderId = pFolderId_}
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+dfAuthenticationToken :: Lens' DeleteFolder (Maybe Text)
+dfAuthenticationToken = lens _dfAuthenticationToken (\ s a -> s{_dfAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the folder.
+dfFolderId :: Lens' DeleteFolder Text
+dfFolderId = lens _dfFolderId (\ s a -> s{_dfFolderId = a});
+
+instance AWSRequest DeleteFolder where
+        type Rs DeleteFolder = DeleteFolderResponse
+        request = delete workDocs
+        response = receiveNull DeleteFolderResponse'
+
+instance Hashable DeleteFolder where
+
+instance NFData DeleteFolder where
+
+instance ToHeaders DeleteFolder where
+        toHeaders DeleteFolder'{..}
+          = mconcat
+              ["Authentication" =# _dfAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeleteFolder where
+        toPath DeleteFolder'{..}
+          = mconcat ["/api/v1/folders/", toBS _dfFolderId]
+
+instance ToQuery DeleteFolder where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteFolderResponse' smart constructor.
+data DeleteFolderResponse =
+  DeleteFolderResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteFolderResponse' with the minimum fields required to make a request.
+--
+deleteFolderResponse
+    :: DeleteFolderResponse
+deleteFolderResponse = DeleteFolderResponse'
+
+
+instance NFData DeleteFolderResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeleteFolderContents.hs b/gen/Network/AWS/WorkDocs/DeleteFolderContents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteFolderContents.hs
@@ -0,0 +1,113 @@
+{-# 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.WorkDocs.DeleteFolderContents
+-- 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 contents of the specified folder.
+--
+--
+module Network.AWS.WorkDocs.DeleteFolderContents
+    (
+    -- * Creating a Request
+      deleteFolderContents
+    , DeleteFolderContents
+    -- * Request Lenses
+    , dfcAuthenticationToken
+    , dfcFolderId
+
+    -- * Destructuring the Response
+    , deleteFolderContentsResponse
+    , DeleteFolderContentsResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteFolderContents' smart constructor.
+data DeleteFolderContents = DeleteFolderContents'
+  { _dfcAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _dfcFolderId            :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteFolderContents' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfcAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'dfcFolderId' - The ID of the folder.
+deleteFolderContents
+    :: Text -- ^ 'dfcFolderId'
+    -> DeleteFolderContents
+deleteFolderContents pFolderId_ =
+  DeleteFolderContents'
+  {_dfcAuthenticationToken = Nothing, _dfcFolderId = pFolderId_}
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+dfcAuthenticationToken :: Lens' DeleteFolderContents (Maybe Text)
+dfcAuthenticationToken = lens _dfcAuthenticationToken (\ s a -> s{_dfcAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the folder.
+dfcFolderId :: Lens' DeleteFolderContents Text
+dfcFolderId = lens _dfcFolderId (\ s a -> s{_dfcFolderId = a});
+
+instance AWSRequest DeleteFolderContents where
+        type Rs DeleteFolderContents =
+             DeleteFolderContentsResponse
+        request = delete workDocs
+        response = receiveNull DeleteFolderContentsResponse'
+
+instance Hashable DeleteFolderContents where
+
+instance NFData DeleteFolderContents where
+
+instance ToHeaders DeleteFolderContents where
+        toHeaders DeleteFolderContents'{..}
+          = mconcat
+              ["Authentication" =# _dfcAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeleteFolderContents where
+        toPath DeleteFolderContents'{..}
+          = mconcat
+              ["/api/v1/folders/", toBS _dfcFolderId, "/contents"]
+
+instance ToQuery DeleteFolderContents where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteFolderContentsResponse' smart constructor.
+data DeleteFolderContentsResponse =
+  DeleteFolderContentsResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteFolderContentsResponse' with the minimum fields required to make a request.
+--
+deleteFolderContentsResponse
+    :: DeleteFolderContentsResponse
+deleteFolderContentsResponse = DeleteFolderContentsResponse'
+
+
+instance NFData DeleteFolderContentsResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeleteLabels.hs b/gen/Network/AWS/WorkDocs/DeleteLabels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteLabels.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.DeleteLabels
+-- 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 specified list of labels from a resource.
+--
+--
+module Network.AWS.WorkDocs.DeleteLabels
+    (
+    -- * Creating a Request
+      deleteLabels
+    , DeleteLabels
+    -- * Request Lenses
+    , dlDeleteAll
+    , dlAuthenticationToken
+    , dlLabels
+    , dlResourceId
+
+    -- * Destructuring the Response
+    , deleteLabelsResponse
+    , DeleteLabelsResponse
+    -- * Response Lenses
+    , dlrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteLabels' smart constructor.
+data DeleteLabels = DeleteLabels'
+  { _dlDeleteAll           :: !(Maybe Bool)
+  , _dlAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _dlLabels              :: !(Maybe [Text])
+  , _dlResourceId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlDeleteAll' - Flag to request removal of all labels from the specified resource.
+--
+-- * 'dlAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'dlLabels' - List of labels to delete from the resource.
+--
+-- * 'dlResourceId' - The ID of the resource.
+deleteLabels
+    :: Text -- ^ 'dlResourceId'
+    -> DeleteLabels
+deleteLabels pResourceId_ =
+  DeleteLabels'
+  { _dlDeleteAll = Nothing
+  , _dlAuthenticationToken = Nothing
+  , _dlLabels = Nothing
+  , _dlResourceId = pResourceId_
+  }
+
+
+-- | Flag to request removal of all labels from the specified resource.
+dlDeleteAll :: Lens' DeleteLabels (Maybe Bool)
+dlDeleteAll = lens _dlDeleteAll (\ s a -> s{_dlDeleteAll = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+dlAuthenticationToken :: Lens' DeleteLabels (Maybe Text)
+dlAuthenticationToken = lens _dlAuthenticationToken (\ s a -> s{_dlAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | List of labels to delete from the resource.
+dlLabels :: Lens' DeleteLabels [Text]
+dlLabels = lens _dlLabels (\ s a -> s{_dlLabels = a}) . _Default . _Coerce;
+
+-- | The ID of the resource.
+dlResourceId :: Lens' DeleteLabels Text
+dlResourceId = lens _dlResourceId (\ s a -> s{_dlResourceId = a});
+
+instance AWSRequest DeleteLabels where
+        type Rs DeleteLabels = DeleteLabelsResponse
+        request = delete workDocs
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteLabelsResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteLabels where
+
+instance NFData DeleteLabels where
+
+instance ToHeaders DeleteLabels where
+        toHeaders DeleteLabels'{..}
+          = mconcat
+              ["Authentication" =# _dlAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeleteLabels where
+        toPath DeleteLabels'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _dlResourceId, "/labels"]
+
+instance ToQuery DeleteLabels where
+        toQuery DeleteLabels'{..}
+          = mconcat
+              ["deleteAll" =: _dlDeleteAll,
+               "labels" =:
+                 toQuery (toQueryList "member" <$> _dlLabels)]
+
+-- | /See:/ 'deleteLabelsResponse' smart constructor.
+newtype DeleteLabelsResponse = DeleteLabelsResponse'
+  { _dlrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteLabelsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlrsResponseStatus' - -- | The response status code.
+deleteLabelsResponse
+    :: Int -- ^ 'dlrsResponseStatus'
+    -> DeleteLabelsResponse
+deleteLabelsResponse pResponseStatus_ =
+  DeleteLabelsResponse' {_dlrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dlrsResponseStatus :: Lens' DeleteLabelsResponse Int
+dlrsResponseStatus = lens _dlrsResponseStatus (\ s a -> s{_dlrsResponseStatus = a});
+
+instance NFData DeleteLabelsResponse where
diff --git a/gen/Network/AWS/WorkDocs/DeleteNotificationSubscription.hs b/gen/Network/AWS/WorkDocs/DeleteNotificationSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteNotificationSubscription.hs
@@ -0,0 +1,121 @@
+{-# 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.WorkDocs.DeleteNotificationSubscription
+-- 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 specified subscription from the specified organization.
+--
+--
+module Network.AWS.WorkDocs.DeleteNotificationSubscription
+    (
+    -- * Creating a Request
+      deleteNotificationSubscription
+    , DeleteNotificationSubscription
+    -- * Request Lenses
+    , dnsSubscriptionId
+    , dnsOrganizationId
+
+    -- * Destructuring the Response
+    , deleteNotificationSubscriptionResponse
+    , DeleteNotificationSubscriptionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteNotificationSubscription' smart constructor.
+data DeleteNotificationSubscription = DeleteNotificationSubscription'
+  { _dnsSubscriptionId :: !Text
+  , _dnsOrganizationId :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteNotificationSubscription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dnsSubscriptionId' - The ID of the subscription.
+--
+-- * 'dnsOrganizationId' - The ID of the organization.
+deleteNotificationSubscription
+    :: Text -- ^ 'dnsSubscriptionId'
+    -> Text -- ^ 'dnsOrganizationId'
+    -> DeleteNotificationSubscription
+deleteNotificationSubscription pSubscriptionId_ pOrganizationId_ =
+  DeleteNotificationSubscription'
+  {_dnsSubscriptionId = pSubscriptionId_, _dnsOrganizationId = pOrganizationId_}
+
+
+-- | The ID of the subscription.
+dnsSubscriptionId :: Lens' DeleteNotificationSubscription Text
+dnsSubscriptionId = lens _dnsSubscriptionId (\ s a -> s{_dnsSubscriptionId = a});
+
+-- | The ID of the organization.
+dnsOrganizationId :: Lens' DeleteNotificationSubscription Text
+dnsOrganizationId = lens _dnsOrganizationId (\ s a -> s{_dnsOrganizationId = a});
+
+instance AWSRequest DeleteNotificationSubscription
+         where
+        type Rs DeleteNotificationSubscription =
+             DeleteNotificationSubscriptionResponse
+        request = delete workDocs
+        response
+          = receiveNull DeleteNotificationSubscriptionResponse'
+
+instance Hashable DeleteNotificationSubscription
+         where
+
+instance NFData DeleteNotificationSubscription where
+
+instance ToHeaders DeleteNotificationSubscription
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DeleteNotificationSubscription where
+        toPath DeleteNotificationSubscription'{..}
+          = mconcat
+              ["/api/v1/organizations/", toBS _dnsOrganizationId,
+               "/subscriptions/", toBS _dnsSubscriptionId]
+
+instance ToQuery DeleteNotificationSubscription where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteNotificationSubscriptionResponse' smart constructor.
+data DeleteNotificationSubscriptionResponse =
+  DeleteNotificationSubscriptionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteNotificationSubscriptionResponse' with the minimum fields required to make a request.
+--
+deleteNotificationSubscriptionResponse
+    :: DeleteNotificationSubscriptionResponse
+deleteNotificationSubscriptionResponse = DeleteNotificationSubscriptionResponse'
+
+
+instance NFData
+           DeleteNotificationSubscriptionResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/DeleteUser.hs b/gen/Network/AWS/WorkDocs/DeleteUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DeleteUser.hs
@@ -0,0 +1,110 @@
+{-# 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.WorkDocs.DeleteUser
+-- 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 specified user from a Simple AD or Microsoft AD directory.
+--
+--
+module Network.AWS.WorkDocs.DeleteUser
+    (
+    -- * Creating a Request
+      deleteUser
+    , DeleteUser
+    -- * Request Lenses
+    , duuAuthenticationToken
+    , duuUserId
+
+    -- * Destructuring the Response
+    , deleteUserResponse
+    , DeleteUserResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'deleteUser' smart constructor.
+data DeleteUser = DeleteUser'
+  { _duuAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _duuUserId              :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'duuAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'duuUserId' - The ID of the user.
+deleteUser
+    :: Text -- ^ 'duuUserId'
+    -> DeleteUser
+deleteUser pUserId_ =
+  DeleteUser' {_duuAuthenticationToken = Nothing, _duuUserId = pUserId_}
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+duuAuthenticationToken :: Lens' DeleteUser (Maybe Text)
+duuAuthenticationToken = lens _duuAuthenticationToken (\ s a -> s{_duuAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the user.
+duuUserId :: Lens' DeleteUser Text
+duuUserId = lens _duuUserId (\ s a -> s{_duuUserId = a});
+
+instance AWSRequest DeleteUser where
+        type Rs DeleteUser = DeleteUserResponse
+        request = delete workDocs
+        response = receiveNull DeleteUserResponse'
+
+instance Hashable DeleteUser where
+
+instance NFData DeleteUser where
+
+instance ToHeaders DeleteUser where
+        toHeaders DeleteUser'{..}
+          = mconcat
+              ["Authentication" =# _duuAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DeleteUser where
+        toPath DeleteUser'{..}
+          = mconcat ["/api/v1/users/", toBS _duuUserId]
+
+instance ToQuery DeleteUser where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteUserResponse' smart constructor.
+data DeleteUserResponse =
+  DeleteUserResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteUserResponse' with the minimum fields required to make a request.
+--
+deleteUserResponse
+    :: DeleteUserResponse
+deleteUserResponse = DeleteUserResponse'
+
+
+instance NFData DeleteUserResponse where
diff --git a/gen/Network/AWS/WorkDocs/DescribeActivities.hs b/gen/Network/AWS/WorkDocs/DescribeActivities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeActivities.hs
@@ -0,0 +1,199 @@
+{-# 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.WorkDocs.DescribeActivities
+-- 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)
+--
+-- Describes the user activities in a specified time period.
+--
+--
+module Network.AWS.WorkDocs.DescribeActivities
+    (
+    -- * Creating a Request
+      describeActivities
+    , DescribeActivities
+    -- * Request Lenses
+    , daStartTime
+    , daAuthenticationToken
+    , daUserId
+    , daMarker
+    , daEndTime
+    , daLimit
+    , daOrganizationId
+
+    -- * Destructuring the Response
+    , describeActivitiesResponse
+    , DescribeActivitiesResponse
+    -- * Response Lenses
+    , darsUserActivities
+    , darsMarker
+    , darsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeActivities' smart constructor.
+data DescribeActivities = DescribeActivities'
+  { _daStartTime           :: !(Maybe POSIX)
+  , _daAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _daUserId              :: !(Maybe Text)
+  , _daMarker              :: !(Maybe Text)
+  , _daEndTime             :: !(Maybe POSIX)
+  , _daLimit               :: !(Maybe Nat)
+  , _daOrganizationId      :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeActivities' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daStartTime' - The timestamp that determines the starting time of the activities; the response includes the activities performed after the specified timestamp.
+--
+-- * 'daAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'daUserId' - The ID of the user who performed the action. The response includes activities pertaining to this user. This is an optional parameter and is only applicable for administrative API (SigV4) requests.
+--
+-- * 'daMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
+-- * 'daEndTime' - The timestamp that determines the end time of the activities; the response includes the activities performed before the specified timestamp.
+--
+-- * 'daLimit' - The maximum number of items to return.
+--
+-- * 'daOrganizationId' - The ID of the organization. This is a mandatory parameter when using administrative API (SigV4) requests.
+describeActivities
+    :: DescribeActivities
+describeActivities =
+  DescribeActivities'
+  { _daStartTime = Nothing
+  , _daAuthenticationToken = Nothing
+  , _daUserId = Nothing
+  , _daMarker = Nothing
+  , _daEndTime = Nothing
+  , _daLimit = Nothing
+  , _daOrganizationId = Nothing
+  }
+
+
+-- | The timestamp that determines the starting time of the activities; the response includes the activities performed after the specified timestamp.
+daStartTime :: Lens' DescribeActivities (Maybe UTCTime)
+daStartTime = lens _daStartTime (\ s a -> s{_daStartTime = a}) . mapping _Time;
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+daAuthenticationToken :: Lens' DescribeActivities (Maybe Text)
+daAuthenticationToken = lens _daAuthenticationToken (\ s a -> s{_daAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the user who performed the action. The response includes activities pertaining to this user. This is an optional parameter and is only applicable for administrative API (SigV4) requests.
+daUserId :: Lens' DescribeActivities (Maybe Text)
+daUserId = lens _daUserId (\ s a -> s{_daUserId = a});
+
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+daMarker :: Lens' DescribeActivities (Maybe Text)
+daMarker = lens _daMarker (\ s a -> s{_daMarker = a});
+
+-- | The timestamp that determines the end time of the activities; the response includes the activities performed before the specified timestamp.
+daEndTime :: Lens' DescribeActivities (Maybe UTCTime)
+daEndTime = lens _daEndTime (\ s a -> s{_daEndTime = a}) . mapping _Time;
+
+-- | The maximum number of items to return.
+daLimit :: Lens' DescribeActivities (Maybe Natural)
+daLimit = lens _daLimit (\ s a -> s{_daLimit = a}) . mapping _Nat;
+
+-- | The ID of the organization. This is a mandatory parameter when using administrative API (SigV4) requests.
+daOrganizationId :: Lens' DescribeActivities (Maybe Text)
+daOrganizationId = lens _daOrganizationId (\ s a -> s{_daOrganizationId = a});
+
+instance AWSRequest DescribeActivities where
+        type Rs DescribeActivities =
+             DescribeActivitiesResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeActivitiesResponse' <$>
+                   (x .?> "UserActivities" .!@ mempty) <*>
+                     (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeActivities where
+
+instance NFData DescribeActivities where
+
+instance ToHeaders DescribeActivities where
+        toHeaders DescribeActivities'{..}
+          = mconcat
+              ["Authentication" =# _daAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DescribeActivities where
+        toPath = const "/api/v1/activities"
+
+instance ToQuery DescribeActivities where
+        toQuery DescribeActivities'{..}
+          = mconcat
+              ["startTime" =: _daStartTime, "userId" =: _daUserId,
+               "marker" =: _daMarker, "endTime" =: _daEndTime,
+               "limit" =: _daLimit,
+               "organizationId" =: _daOrganizationId]
+
+-- | /See:/ 'describeActivitiesResponse' smart constructor.
+data DescribeActivitiesResponse = DescribeActivitiesResponse'
+  { _darsUserActivities :: !(Maybe [Activity])
+  , _darsMarker         :: !(Maybe Text)
+  , _darsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeActivitiesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'darsUserActivities' - The list of activities for the specified user and time period.
+--
+-- * 'darsMarker' - The marker for the next set of results.
+--
+-- * 'darsResponseStatus' - -- | The response status code.
+describeActivitiesResponse
+    :: Int -- ^ 'darsResponseStatus'
+    -> DescribeActivitiesResponse
+describeActivitiesResponse pResponseStatus_ =
+  DescribeActivitiesResponse'
+  { _darsUserActivities = Nothing
+  , _darsMarker = Nothing
+  , _darsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The list of activities for the specified user and time period.
+darsUserActivities :: Lens' DescribeActivitiesResponse [Activity]
+darsUserActivities = lens _darsUserActivities (\ s a -> s{_darsUserActivities = a}) . _Default . _Coerce;
+
+-- | The marker for the next set of results.
+darsMarker :: Lens' DescribeActivitiesResponse (Maybe Text)
+darsMarker = lens _darsMarker (\ s a -> s{_darsMarker = a});
+
+-- | -- | The response status code.
+darsResponseStatus :: Lens' DescribeActivitiesResponse Int
+darsResponseStatus = lens _darsResponseStatus (\ s a -> s{_darsResponseStatus = a});
+
+instance NFData DescribeActivitiesResponse where
diff --git a/gen/Network/AWS/WorkDocs/DescribeComments.hs b/gen/Network/AWS/WorkDocs/DescribeComments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeComments.hs
@@ -0,0 +1,181 @@
+{-# 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.WorkDocs.DescribeComments
+-- 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)
+--
+-- List all the comments for the specified document version.
+--
+--
+module Network.AWS.WorkDocs.DescribeComments
+    (
+    -- * Creating a Request
+      describeComments
+    , DescribeComments
+    -- * Request Lenses
+    , dcAuthenticationToken
+    , dcMarker
+    , dcLimit
+    , dcDocumentId
+    , dcVersionId
+
+    -- * Destructuring the Response
+    , describeCommentsResponse
+    , DescribeCommentsResponse
+    -- * Response Lenses
+    , dcrsMarker
+    , dcrsComments
+    , dcrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeComments' smart constructor.
+data DescribeComments = DescribeComments'
+  { _dcAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _dcMarker              :: !(Maybe Text)
+  , _dcLimit               :: !(Maybe Nat)
+  , _dcDocumentId          :: !Text
+  , _dcVersionId           :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeComments' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'dcMarker' - The marker for the next set of results. This marker was received from a previous call.
+--
+-- * 'dcLimit' - The maximum number of items to return.
+--
+-- * 'dcDocumentId' - The ID of the document.
+--
+-- * 'dcVersionId' - The ID of the document version.
+describeComments
+    :: Text -- ^ 'dcDocumentId'
+    -> Text -- ^ 'dcVersionId'
+    -> DescribeComments
+describeComments pDocumentId_ pVersionId_ =
+  DescribeComments'
+  { _dcAuthenticationToken = Nothing
+  , _dcMarker = Nothing
+  , _dcLimit = Nothing
+  , _dcDocumentId = pDocumentId_
+  , _dcVersionId = pVersionId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+dcAuthenticationToken :: Lens' DescribeComments (Maybe Text)
+dcAuthenticationToken = lens _dcAuthenticationToken (\ s a -> s{_dcAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The marker for the next set of results. This marker was received from a previous call.
+dcMarker :: Lens' DescribeComments (Maybe Text)
+dcMarker = lens _dcMarker (\ s a -> s{_dcMarker = a});
+
+-- | The maximum number of items to return.
+dcLimit :: Lens' DescribeComments (Maybe Natural)
+dcLimit = lens _dcLimit (\ s a -> s{_dcLimit = a}) . mapping _Nat;
+
+-- | The ID of the document.
+dcDocumentId :: Lens' DescribeComments Text
+dcDocumentId = lens _dcDocumentId (\ s a -> s{_dcDocumentId = a});
+
+-- | The ID of the document version.
+dcVersionId :: Lens' DescribeComments Text
+dcVersionId = lens _dcVersionId (\ s a -> s{_dcVersionId = a});
+
+instance AWSRequest DescribeComments where
+        type Rs DescribeComments = DescribeCommentsResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeCommentsResponse' <$>
+                   (x .?> "Marker") <*> (x .?> "Comments" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeComments where
+
+instance NFData DescribeComments where
+
+instance ToHeaders DescribeComments where
+        toHeaders DescribeComments'{..}
+          = mconcat
+              ["Authentication" =# _dcAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DescribeComments where
+        toPath DescribeComments'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _dcDocumentId,
+               "/versions/", toBS _dcVersionId, "/comments"]
+
+instance ToQuery DescribeComments where
+        toQuery DescribeComments'{..}
+          = mconcat
+              ["marker" =: _dcMarker, "limit" =: _dcLimit]
+
+-- | /See:/ 'describeCommentsResponse' smart constructor.
+data DescribeCommentsResponse = DescribeCommentsResponse'
+  { _dcrsMarker         :: !(Maybe Text)
+  , _dcrsComments       :: !(Maybe [Comment])
+  , _dcrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeCommentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrsMarker' - The marker for the next set of results. This marker was received from a previous call.
+--
+-- * 'dcrsComments' - The list of comments for the specified document version.
+--
+-- * 'dcrsResponseStatus' - -- | The response status code.
+describeCommentsResponse
+    :: Int -- ^ 'dcrsResponseStatus'
+    -> DescribeCommentsResponse
+describeCommentsResponse pResponseStatus_ =
+  DescribeCommentsResponse'
+  { _dcrsMarker = Nothing
+  , _dcrsComments = Nothing
+  , _dcrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The marker for the next set of results. This marker was received from a previous call.
+dcrsMarker :: Lens' DescribeCommentsResponse (Maybe Text)
+dcrsMarker = lens _dcrsMarker (\ s a -> s{_dcrsMarker = a});
+
+-- | The list of comments for the specified document version.
+dcrsComments :: Lens' DescribeCommentsResponse [Comment]
+dcrsComments = lens _dcrsComments (\ s a -> s{_dcrsComments = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+dcrsResponseStatus :: Lens' DescribeCommentsResponse Int
+dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a});
+
+instance NFData DescribeCommentsResponse where
diff --git a/gen/Network/AWS/WorkDocs/DescribeDocumentVersions.hs b/gen/Network/AWS/WorkDocs/DescribeDocumentVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeDocumentVersions.hs
@@ -0,0 +1,205 @@
+{-# 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.WorkDocs.DescribeDocumentVersions
+-- 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)
+--
+-- Retrieves the document versions for the specified document.
+--
+--
+-- By default, only active versions are returned.
+--
+--
+-- This operation returns paginated results.
+module Network.AWS.WorkDocs.DescribeDocumentVersions
+    (
+    -- * Creating a Request
+      describeDocumentVersions
+    , DescribeDocumentVersions
+    -- * Request Lenses
+    , ddvInclude
+    , ddvAuthenticationToken
+    , ddvMarker
+    , ddvLimit
+    , ddvFields
+    , ddvDocumentId
+
+    -- * Destructuring the Response
+    , describeDocumentVersionsResponse
+    , DescribeDocumentVersionsResponse
+    -- * Response Lenses
+    , ddvrsDocumentVersions
+    , ddvrsMarker
+    , ddvrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeDocumentVersions' smart constructor.
+data DescribeDocumentVersions = DescribeDocumentVersions'
+  { _ddvInclude             :: !(Maybe Text)
+  , _ddvAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _ddvMarker              :: !(Maybe Text)
+  , _ddvLimit               :: !(Maybe Nat)
+  , _ddvFields              :: !(Maybe Text)
+  , _ddvDocumentId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeDocumentVersions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddvInclude' - A comma-separated list of values. Specify "INITIALIZED" to include incomplete versions.
+--
+-- * 'ddvAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'ddvMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
+-- * 'ddvLimit' - The maximum number of versions to return with this call.
+--
+-- * 'ddvFields' - Specify "SOURCE" to include initialized versions and a URL for the source document.
+--
+-- * 'ddvDocumentId' - The ID of the document.
+describeDocumentVersions
+    :: Text -- ^ 'ddvDocumentId'
+    -> DescribeDocumentVersions
+describeDocumentVersions pDocumentId_ =
+  DescribeDocumentVersions'
+  { _ddvInclude = Nothing
+  , _ddvAuthenticationToken = Nothing
+  , _ddvMarker = Nothing
+  , _ddvLimit = Nothing
+  , _ddvFields = Nothing
+  , _ddvDocumentId = pDocumentId_
+  }
+
+
+-- | A comma-separated list of values. Specify "INITIALIZED" to include incomplete versions.
+ddvInclude :: Lens' DescribeDocumentVersions (Maybe Text)
+ddvInclude = lens _ddvInclude (\ s a -> s{_ddvInclude = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+ddvAuthenticationToken :: Lens' DescribeDocumentVersions (Maybe Text)
+ddvAuthenticationToken = lens _ddvAuthenticationToken (\ s a -> s{_ddvAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+ddvMarker :: Lens' DescribeDocumentVersions (Maybe Text)
+ddvMarker = lens _ddvMarker (\ s a -> s{_ddvMarker = a});
+
+-- | The maximum number of versions to return with this call.
+ddvLimit :: Lens' DescribeDocumentVersions (Maybe Natural)
+ddvLimit = lens _ddvLimit (\ s a -> s{_ddvLimit = a}) . mapping _Nat;
+
+-- | Specify "SOURCE" to include initialized versions and a URL for the source document.
+ddvFields :: Lens' DescribeDocumentVersions (Maybe Text)
+ddvFields = lens _ddvFields (\ s a -> s{_ddvFields = a});
+
+-- | The ID of the document.
+ddvDocumentId :: Lens' DescribeDocumentVersions Text
+ddvDocumentId = lens _ddvDocumentId (\ s a -> s{_ddvDocumentId = a});
+
+instance AWSPager DescribeDocumentVersions where
+        page rq rs
+          | stop (rs ^. ddvrsMarker) = Nothing
+          | stop (rs ^. ddvrsDocumentVersions) = Nothing
+          | otherwise =
+            Just $ rq & ddvMarker .~ rs ^. ddvrsMarker
+
+instance AWSRequest DescribeDocumentVersions where
+        type Rs DescribeDocumentVersions =
+             DescribeDocumentVersionsResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeDocumentVersionsResponse' <$>
+                   (x .?> "DocumentVersions" .!@ mempty) <*>
+                     (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeDocumentVersions where
+
+instance NFData DescribeDocumentVersions where
+
+instance ToHeaders DescribeDocumentVersions where
+        toHeaders DescribeDocumentVersions'{..}
+          = mconcat
+              ["Authentication" =# _ddvAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DescribeDocumentVersions where
+        toPath DescribeDocumentVersions'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _ddvDocumentId,
+               "/versions"]
+
+instance ToQuery DescribeDocumentVersions where
+        toQuery DescribeDocumentVersions'{..}
+          = mconcat
+              ["include" =: _ddvInclude, "marker" =: _ddvMarker,
+               "limit" =: _ddvLimit, "fields" =: _ddvFields]
+
+-- | /See:/ 'describeDocumentVersionsResponse' smart constructor.
+data DescribeDocumentVersionsResponse = DescribeDocumentVersionsResponse'
+  { _ddvrsDocumentVersions :: !(Maybe [DocumentVersionMetadata])
+  , _ddvrsMarker           :: !(Maybe Text)
+  , _ddvrsResponseStatus   :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeDocumentVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddvrsDocumentVersions' - The document versions.
+--
+-- * 'ddvrsMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
+-- * 'ddvrsResponseStatus' - -- | The response status code.
+describeDocumentVersionsResponse
+    :: Int -- ^ 'ddvrsResponseStatus'
+    -> DescribeDocumentVersionsResponse
+describeDocumentVersionsResponse pResponseStatus_ =
+  DescribeDocumentVersionsResponse'
+  { _ddvrsDocumentVersions = Nothing
+  , _ddvrsMarker = Nothing
+  , _ddvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The document versions.
+ddvrsDocumentVersions :: Lens' DescribeDocumentVersionsResponse [DocumentVersionMetadata]
+ddvrsDocumentVersions = lens _ddvrsDocumentVersions (\ s a -> s{_ddvrsDocumentVersions = a}) . _Default . _Coerce;
+
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+ddvrsMarker :: Lens' DescribeDocumentVersionsResponse (Maybe Text)
+ddvrsMarker = lens _ddvrsMarker (\ s a -> s{_ddvrsMarker = a});
+
+-- | -- | The response status code.
+ddvrsResponseStatus :: Lens' DescribeDocumentVersionsResponse Int
+ddvrsResponseStatus = lens _ddvrsResponseStatus (\ s a -> s{_ddvrsResponseStatus = a});
+
+instance NFData DescribeDocumentVersionsResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/DescribeFolderContents.hs b/gen/Network/AWS/WorkDocs/DescribeFolderContents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeFolderContents.hs
@@ -0,0 +1,233 @@
+{-# 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.WorkDocs.DescribeFolderContents
+-- 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)
+--
+-- Describes the contents of the specified folder, including its documents and subfolders.
+--
+--
+-- By default, Amazon WorkDocs returns the first 100 active document and folder metadata items. If there are more results, the response includes a marker that you can use to request the next set of results. You can also request initialized documents.
+--
+--
+-- This operation returns paginated results.
+module Network.AWS.WorkDocs.DescribeFolderContents
+    (
+    -- * Creating a Request
+      describeFolderContents
+    , DescribeFolderContents
+    -- * Request Lenses
+    , dfcsInclude
+    , dfcsAuthenticationToken
+    , dfcsSort
+    , dfcsMarker
+    , dfcsLimit
+    , dfcsType
+    , dfcsOrder
+    , dfcsFolderId
+
+    -- * Destructuring the Response
+    , describeFolderContentsResponse
+    , DescribeFolderContentsResponse
+    -- * Response Lenses
+    , dfcrsFolders
+    , dfcrsDocuments
+    , dfcrsMarker
+    , dfcrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeFolderContents' smart constructor.
+data DescribeFolderContents = DescribeFolderContents'
+  { _dfcsInclude             :: !(Maybe Text)
+  , _dfcsAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _dfcsSort                :: !(Maybe ResourceSortType)
+  , _dfcsMarker              :: !(Maybe Text)
+  , _dfcsLimit               :: !(Maybe Nat)
+  , _dfcsType                :: !(Maybe FolderContentType)
+  , _dfcsOrder               :: !(Maybe OrderType)
+  , _dfcsFolderId            :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeFolderContents' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfcsInclude' - The contents to include. Specify "INITIALIZED" to include initialized documents.
+--
+-- * 'dfcsAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'dfcsSort' - The sorting criteria.
+--
+-- * 'dfcsMarker' - The marker for the next set of results. This marker was received from a previous call.
+--
+-- * 'dfcsLimit' - The maximum number of items to return with this call.
+--
+-- * 'dfcsType' - The type of items.
+--
+-- * 'dfcsOrder' - The order for the contents of the folder.
+--
+-- * 'dfcsFolderId' - The ID of the folder.
+describeFolderContents
+    :: Text -- ^ 'dfcsFolderId'
+    -> DescribeFolderContents
+describeFolderContents pFolderId_ =
+  DescribeFolderContents'
+  { _dfcsInclude = Nothing
+  , _dfcsAuthenticationToken = Nothing
+  , _dfcsSort = Nothing
+  , _dfcsMarker = Nothing
+  , _dfcsLimit = Nothing
+  , _dfcsType = Nothing
+  , _dfcsOrder = Nothing
+  , _dfcsFolderId = pFolderId_
+  }
+
+
+-- | The contents to include. Specify "INITIALIZED" to include initialized documents.
+dfcsInclude :: Lens' DescribeFolderContents (Maybe Text)
+dfcsInclude = lens _dfcsInclude (\ s a -> s{_dfcsInclude = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+dfcsAuthenticationToken :: Lens' DescribeFolderContents (Maybe Text)
+dfcsAuthenticationToken = lens _dfcsAuthenticationToken (\ s a -> s{_dfcsAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The sorting criteria.
+dfcsSort :: Lens' DescribeFolderContents (Maybe ResourceSortType)
+dfcsSort = lens _dfcsSort (\ s a -> s{_dfcsSort = a});
+
+-- | The marker for the next set of results. This marker was received from a previous call.
+dfcsMarker :: Lens' DescribeFolderContents (Maybe Text)
+dfcsMarker = lens _dfcsMarker (\ s a -> s{_dfcsMarker = a});
+
+-- | The maximum number of items to return with this call.
+dfcsLimit :: Lens' DescribeFolderContents (Maybe Natural)
+dfcsLimit = lens _dfcsLimit (\ s a -> s{_dfcsLimit = a}) . mapping _Nat;
+
+-- | The type of items.
+dfcsType :: Lens' DescribeFolderContents (Maybe FolderContentType)
+dfcsType = lens _dfcsType (\ s a -> s{_dfcsType = a});
+
+-- | The order for the contents of the folder.
+dfcsOrder :: Lens' DescribeFolderContents (Maybe OrderType)
+dfcsOrder = lens _dfcsOrder (\ s a -> s{_dfcsOrder = a});
+
+-- | The ID of the folder.
+dfcsFolderId :: Lens' DescribeFolderContents Text
+dfcsFolderId = lens _dfcsFolderId (\ s a -> s{_dfcsFolderId = a});
+
+instance AWSPager DescribeFolderContents where
+        page rq rs
+          | stop (rs ^. dfcrsMarker) = Nothing
+          | stop (rs ^. dfcrsFolders) = Nothing
+          | stop (rs ^. dfcrsDocuments) = Nothing
+          | otherwise =
+            Just $ rq & dfcsMarker .~ rs ^. dfcrsMarker
+
+instance AWSRequest DescribeFolderContents where
+        type Rs DescribeFolderContents =
+             DescribeFolderContentsResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeFolderContentsResponse' <$>
+                   (x .?> "Folders" .!@ mempty) <*>
+                     (x .?> "Documents" .!@ mempty)
+                     <*> (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeFolderContents where
+
+instance NFData DescribeFolderContents where
+
+instance ToHeaders DescribeFolderContents where
+        toHeaders DescribeFolderContents'{..}
+          = mconcat
+              ["Authentication" =# _dfcsAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DescribeFolderContents where
+        toPath DescribeFolderContents'{..}
+          = mconcat
+              ["/api/v1/folders/", toBS _dfcsFolderId, "/contents"]
+
+instance ToQuery DescribeFolderContents where
+        toQuery DescribeFolderContents'{..}
+          = mconcat
+              ["include" =: _dfcsInclude, "sort" =: _dfcsSort,
+               "marker" =: _dfcsMarker, "limit" =: _dfcsLimit,
+               "type" =: _dfcsType, "order" =: _dfcsOrder]
+
+-- | /See:/ 'describeFolderContentsResponse' smart constructor.
+data DescribeFolderContentsResponse = DescribeFolderContentsResponse'
+  { _dfcrsFolders        :: !(Maybe [FolderMetadata])
+  , _dfcrsDocuments      :: !(Maybe [DocumentMetadata])
+  , _dfcrsMarker         :: !(Maybe Text)
+  , _dfcrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeFolderContentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfcrsFolders' - The subfolders in the specified folder.
+--
+-- * 'dfcrsDocuments' - The documents in the specified folder.
+--
+-- * 'dfcrsMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
+-- * 'dfcrsResponseStatus' - -- | The response status code.
+describeFolderContentsResponse
+    :: Int -- ^ 'dfcrsResponseStatus'
+    -> DescribeFolderContentsResponse
+describeFolderContentsResponse pResponseStatus_ =
+  DescribeFolderContentsResponse'
+  { _dfcrsFolders = Nothing
+  , _dfcrsDocuments = Nothing
+  , _dfcrsMarker = Nothing
+  , _dfcrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The subfolders in the specified folder.
+dfcrsFolders :: Lens' DescribeFolderContentsResponse [FolderMetadata]
+dfcrsFolders = lens _dfcrsFolders (\ s a -> s{_dfcrsFolders = a}) . _Default . _Coerce;
+
+-- | The documents in the specified folder.
+dfcrsDocuments :: Lens' DescribeFolderContentsResponse [DocumentMetadata]
+dfcrsDocuments = lens _dfcrsDocuments (\ s a -> s{_dfcrsDocuments = a}) . _Default . _Coerce;
+
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+dfcrsMarker :: Lens' DescribeFolderContentsResponse (Maybe Text)
+dfcrsMarker = lens _dfcrsMarker (\ s a -> s{_dfcrsMarker = a});
+
+-- | -- | The response status code.
+dfcrsResponseStatus :: Lens' DescribeFolderContentsResponse Int
+dfcrsResponseStatus = lens _dfcrsResponseStatus (\ s a -> s{_dfcrsResponseStatus = a});
+
+instance NFData DescribeFolderContentsResponse where
diff --git a/gen/Network/AWS/WorkDocs/DescribeNotificationSubscriptions.hs b/gen/Network/AWS/WorkDocs/DescribeNotificationSubscriptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeNotificationSubscriptions.hs
@@ -0,0 +1,168 @@
+{-# 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.WorkDocs.DescribeNotificationSubscriptions
+-- 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)
+--
+-- Lists the specified notification subscriptions.
+--
+--
+module Network.AWS.WorkDocs.DescribeNotificationSubscriptions
+    (
+    -- * Creating a Request
+      describeNotificationSubscriptions
+    , DescribeNotificationSubscriptions
+    -- * Request Lenses
+    , dMarker
+    , dLimit
+    , dOrganizationId
+
+    -- * Destructuring the Response
+    , describeNotificationSubscriptionsResponse
+    , DescribeNotificationSubscriptionsResponse
+    -- * Response Lenses
+    , dnsrsMarker
+    , dnsrsSubscriptions
+    , dnsrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeNotificationSubscriptions' smart constructor.
+data DescribeNotificationSubscriptions = DescribeNotificationSubscriptions'
+  { _dMarker         :: !(Maybe Text)
+  , _dLimit          :: !(Maybe Nat)
+  , _dOrganizationId :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeNotificationSubscriptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
+-- * 'dLimit' - The maximum number of items to return with this call.
+--
+-- * 'dOrganizationId' - The ID of the organization.
+describeNotificationSubscriptions
+    :: Text -- ^ 'dOrganizationId'
+    -> DescribeNotificationSubscriptions
+describeNotificationSubscriptions pOrganizationId_ =
+  DescribeNotificationSubscriptions'
+  {_dMarker = Nothing, _dLimit = Nothing, _dOrganizationId = pOrganizationId_}
+
+
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+dMarker :: Lens' DescribeNotificationSubscriptions (Maybe Text)
+dMarker = lens _dMarker (\ s a -> s{_dMarker = a});
+
+-- | The maximum number of items to return with this call.
+dLimit :: Lens' DescribeNotificationSubscriptions (Maybe Natural)
+dLimit = lens _dLimit (\ s a -> s{_dLimit = a}) . mapping _Nat;
+
+-- | The ID of the organization.
+dOrganizationId :: Lens' DescribeNotificationSubscriptions Text
+dOrganizationId = lens _dOrganizationId (\ s a -> s{_dOrganizationId = a});
+
+instance AWSRequest DescribeNotificationSubscriptions
+         where
+        type Rs DescribeNotificationSubscriptions =
+             DescribeNotificationSubscriptionsResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeNotificationSubscriptionsResponse' <$>
+                   (x .?> "Marker") <*>
+                     (x .?> "Subscriptions" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeNotificationSubscriptions
+         where
+
+instance NFData DescribeNotificationSubscriptions
+         where
+
+instance ToHeaders DescribeNotificationSubscriptions
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToPath DescribeNotificationSubscriptions
+         where
+        toPath DescribeNotificationSubscriptions'{..}
+          = mconcat
+              ["/api/v1/organizations/", toBS _dOrganizationId,
+               "/subscriptions"]
+
+instance ToQuery DescribeNotificationSubscriptions
+         where
+        toQuery DescribeNotificationSubscriptions'{..}
+          = mconcat ["marker" =: _dMarker, "limit" =: _dLimit]
+
+-- | /See:/ 'describeNotificationSubscriptionsResponse' smart constructor.
+data DescribeNotificationSubscriptionsResponse = DescribeNotificationSubscriptionsResponse'
+  { _dnsrsMarker         :: !(Maybe Text)
+  , _dnsrsSubscriptions  :: !(Maybe [Subscription])
+  , _dnsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeNotificationSubscriptionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dnsrsMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
+-- * 'dnsrsSubscriptions' - The subscriptions.
+--
+-- * 'dnsrsResponseStatus' - -- | The response status code.
+describeNotificationSubscriptionsResponse
+    :: Int -- ^ 'dnsrsResponseStatus'
+    -> DescribeNotificationSubscriptionsResponse
+describeNotificationSubscriptionsResponse pResponseStatus_ =
+  DescribeNotificationSubscriptionsResponse'
+  { _dnsrsMarker = Nothing
+  , _dnsrsSubscriptions = Nothing
+  , _dnsrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+dnsrsMarker :: Lens' DescribeNotificationSubscriptionsResponse (Maybe Text)
+dnsrsMarker = lens _dnsrsMarker (\ s a -> s{_dnsrsMarker = a});
+
+-- | The subscriptions.
+dnsrsSubscriptions :: Lens' DescribeNotificationSubscriptionsResponse [Subscription]
+dnsrsSubscriptions = lens _dnsrsSubscriptions (\ s a -> s{_dnsrsSubscriptions = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+dnsrsResponseStatus :: Lens' DescribeNotificationSubscriptionsResponse Int
+dnsrsResponseStatus = lens _dnsrsResponseStatus (\ s a -> s{_dnsrsResponseStatus = a});
+
+instance NFData
+           DescribeNotificationSubscriptionsResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/DescribeResourcePermissions.hs b/gen/Network/AWS/WorkDocs/DescribeResourcePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeResourcePermissions.hs
@@ -0,0 +1,173 @@
+{-# 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.WorkDocs.DescribeResourcePermissions
+-- 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)
+--
+-- Describes the permissions of a specified resource.
+--
+--
+module Network.AWS.WorkDocs.DescribeResourcePermissions
+    (
+    -- * Creating a Request
+      describeResourcePermissions
+    , DescribeResourcePermissions
+    -- * Request Lenses
+    , drpAuthenticationToken
+    , drpMarker
+    , drpLimit
+    , drpResourceId
+
+    -- * Destructuring the Response
+    , describeResourcePermissionsResponse
+    , DescribeResourcePermissionsResponse
+    -- * Response Lenses
+    , drprsPrincipals
+    , drprsMarker
+    , drprsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeResourcePermissions' smart constructor.
+data DescribeResourcePermissions = DescribeResourcePermissions'
+  { _drpAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _drpMarker              :: !(Maybe Text)
+  , _drpLimit               :: !(Maybe Nat)
+  , _drpResourceId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeResourcePermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drpAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'drpMarker' - The marker for the next set of results. (You received this marker from a previous call)
+--
+-- * 'drpLimit' - The maximum number of items to return with this call.
+--
+-- * 'drpResourceId' - The ID of the resource.
+describeResourcePermissions
+    :: Text -- ^ 'drpResourceId'
+    -> DescribeResourcePermissions
+describeResourcePermissions pResourceId_ =
+  DescribeResourcePermissions'
+  { _drpAuthenticationToken = Nothing
+  , _drpMarker = Nothing
+  , _drpLimit = Nothing
+  , _drpResourceId = pResourceId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+drpAuthenticationToken :: Lens' DescribeResourcePermissions (Maybe Text)
+drpAuthenticationToken = lens _drpAuthenticationToken (\ s a -> s{_drpAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The marker for the next set of results. (You received this marker from a previous call)
+drpMarker :: Lens' DescribeResourcePermissions (Maybe Text)
+drpMarker = lens _drpMarker (\ s a -> s{_drpMarker = a});
+
+-- | The maximum number of items to return with this call.
+drpLimit :: Lens' DescribeResourcePermissions (Maybe Natural)
+drpLimit = lens _drpLimit (\ s a -> s{_drpLimit = a}) . mapping _Nat;
+
+-- | The ID of the resource.
+drpResourceId :: Lens' DescribeResourcePermissions Text
+drpResourceId = lens _drpResourceId (\ s a -> s{_drpResourceId = a});
+
+instance AWSRequest DescribeResourcePermissions where
+        type Rs DescribeResourcePermissions =
+             DescribeResourcePermissionsResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeResourcePermissionsResponse' <$>
+                   (x .?> "Principals" .!@ mempty) <*> (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeResourcePermissions where
+
+instance NFData DescribeResourcePermissions where
+
+instance ToHeaders DescribeResourcePermissions where
+        toHeaders DescribeResourcePermissions'{..}
+          = mconcat
+              ["Authentication" =# _drpAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DescribeResourcePermissions where
+        toPath DescribeResourcePermissions'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _drpResourceId,
+               "/permissions"]
+
+instance ToQuery DescribeResourcePermissions where
+        toQuery DescribeResourcePermissions'{..}
+          = mconcat
+              ["marker" =: _drpMarker, "limit" =: _drpLimit]
+
+-- | /See:/ 'describeResourcePermissionsResponse' smart constructor.
+data DescribeResourcePermissionsResponse = DescribeResourcePermissionsResponse'
+  { _drprsPrincipals     :: !(Maybe [Principal])
+  , _drprsMarker         :: !(Maybe Text)
+  , _drprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeResourcePermissionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drprsPrincipals' - The principals.
+--
+-- * 'drprsMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
+-- * 'drprsResponseStatus' - -- | The response status code.
+describeResourcePermissionsResponse
+    :: Int -- ^ 'drprsResponseStatus'
+    -> DescribeResourcePermissionsResponse
+describeResourcePermissionsResponse pResponseStatus_ =
+  DescribeResourcePermissionsResponse'
+  { _drprsPrincipals = Nothing
+  , _drprsMarker = Nothing
+  , _drprsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The principals.
+drprsPrincipals :: Lens' DescribeResourcePermissionsResponse [Principal]
+drprsPrincipals = lens _drprsPrincipals (\ s a -> s{_drprsPrincipals = a}) . _Default . _Coerce;
+
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+drprsMarker :: Lens' DescribeResourcePermissionsResponse (Maybe Text)
+drprsMarker = lens _drprsMarker (\ s a -> s{_drprsMarker = a});
+
+-- | -- | The response status code.
+drprsResponseStatus :: Lens' DescribeResourcePermissionsResponse Int
+drprsResponseStatus = lens _drprsResponseStatus (\ s a -> s{_drprsResponseStatus = a});
+
+instance NFData DescribeResourcePermissionsResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/DescribeRootFolders.hs b/gen/Network/AWS/WorkDocs/DescribeRootFolders.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeRootFolders.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.DescribeRootFolders
+-- 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)
+--
+-- Describes the current user's special folders; the @RootFolder@ and the @RecyleBin@ . @RootFolder@ is the root of user's files and folders and @RecyleBin@ is the root of recycled items. This is not a valid action for SigV4 (administrative API) clients.
+--
+--
+module Network.AWS.WorkDocs.DescribeRootFolders
+    (
+    -- * Creating a Request
+      describeRootFolders
+    , DescribeRootFolders
+    -- * Request Lenses
+    , drfMarker
+    , drfLimit
+    , drfAuthenticationToken
+
+    -- * Destructuring the Response
+    , describeRootFoldersResponse
+    , DescribeRootFoldersResponse
+    -- * Response Lenses
+    , drfrsFolders
+    , drfrsMarker
+    , drfrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeRootFolders' smart constructor.
+data DescribeRootFolders = DescribeRootFolders'
+  { _drfMarker              :: !(Maybe Text)
+  , _drfLimit               :: !(Maybe Nat)
+  , _drfAuthenticationToken :: !(Sensitive Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeRootFolders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drfMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
+-- * 'drfLimit' - The maximum number of items to return.
+--
+-- * 'drfAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+describeRootFolders
+    :: Text -- ^ 'drfAuthenticationToken'
+    -> DescribeRootFolders
+describeRootFolders pAuthenticationToken_ =
+  DescribeRootFolders'
+  { _drfMarker = Nothing
+  , _drfLimit = Nothing
+  , _drfAuthenticationToken = _Sensitive # pAuthenticationToken_
+  }
+
+
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+drfMarker :: Lens' DescribeRootFolders (Maybe Text)
+drfMarker = lens _drfMarker (\ s a -> s{_drfMarker = a});
+
+-- | The maximum number of items to return.
+drfLimit :: Lens' DescribeRootFolders (Maybe Natural)
+drfLimit = lens _drfLimit (\ s a -> s{_drfLimit = a}) . mapping _Nat;
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+drfAuthenticationToken :: Lens' DescribeRootFolders Text
+drfAuthenticationToken = lens _drfAuthenticationToken (\ s a -> s{_drfAuthenticationToken = a}) . _Sensitive;
+
+instance AWSRequest DescribeRootFolders where
+        type Rs DescribeRootFolders =
+             DescribeRootFoldersResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeRootFoldersResponse' <$>
+                   (x .?> "Folders" .!@ mempty) <*> (x .?> "Marker") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeRootFolders where
+
+instance NFData DescribeRootFolders where
+
+instance ToHeaders DescribeRootFolders where
+        toHeaders DescribeRootFolders'{..}
+          = mconcat
+              ["Authentication" =# _drfAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DescribeRootFolders where
+        toPath = const "/api/v1/me/root"
+
+instance ToQuery DescribeRootFolders where
+        toQuery DescribeRootFolders'{..}
+          = mconcat
+              ["marker" =: _drfMarker, "limit" =: _drfLimit]
+
+-- | /See:/ 'describeRootFoldersResponse' smart constructor.
+data DescribeRootFoldersResponse = DescribeRootFoldersResponse'
+  { _drfrsFolders        :: !(Maybe [FolderMetadata])
+  , _drfrsMarker         :: !(Maybe Text)
+  , _drfrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeRootFoldersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drfrsFolders' - The user's special folders.
+--
+-- * 'drfrsMarker' - The marker for the next set of results.
+--
+-- * 'drfrsResponseStatus' - -- | The response status code.
+describeRootFoldersResponse
+    :: Int -- ^ 'drfrsResponseStatus'
+    -> DescribeRootFoldersResponse
+describeRootFoldersResponse pResponseStatus_ =
+  DescribeRootFoldersResponse'
+  { _drfrsFolders = Nothing
+  , _drfrsMarker = Nothing
+  , _drfrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The user's special folders.
+drfrsFolders :: Lens' DescribeRootFoldersResponse [FolderMetadata]
+drfrsFolders = lens _drfrsFolders (\ s a -> s{_drfrsFolders = a}) . _Default . _Coerce;
+
+-- | The marker for the next set of results.
+drfrsMarker :: Lens' DescribeRootFoldersResponse (Maybe Text)
+drfrsMarker = lens _drfrsMarker (\ s a -> s{_drfrsMarker = a});
+
+-- | -- | The response status code.
+drfrsResponseStatus :: Lens' DescribeRootFoldersResponse Int
+drfrsResponseStatus = lens _drfrsResponseStatus (\ s a -> s{_drfrsResponseStatus = a});
+
+instance NFData DescribeRootFoldersResponse where
diff --git a/gen/Network/AWS/WorkDocs/DescribeUsers.hs b/gen/Network/AWS/WorkDocs/DescribeUsers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/DescribeUsers.hs
@@ -0,0 +1,249 @@
+{-# 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.WorkDocs.DescribeUsers
+-- 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)
+--
+-- Describes the specified users. You can describe all users or filter the results (for example, by status or organization).
+--
+--
+-- By default, Amazon WorkDocs returns the first 24 active or pending users. If there are more results, the response includes a marker that you can use to request the next set of results.
+--
+--
+-- This operation returns paginated results.
+module Network.AWS.WorkDocs.DescribeUsers
+    (
+    -- * Creating a Request
+      describeUsers
+    , DescribeUsers
+    -- * Request Lenses
+    , duInclude
+    , duUserIds
+    , duAuthenticationToken
+    , duSort
+    , duMarker
+    , duQuery
+    , duLimit
+    , duOrder
+    , duOrganizationId
+    , duFields
+
+    -- * Destructuring the Response
+    , describeUsersResponse
+    , DescribeUsersResponse
+    -- * Response Lenses
+    , dursUsers
+    , dursTotalNumberOfUsers
+    , dursMarker
+    , dursResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'describeUsers' smart constructor.
+data DescribeUsers = DescribeUsers'
+  { _duInclude             :: !(Maybe UserFilterType)
+  , _duUserIds             :: !(Maybe Text)
+  , _duAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _duSort                :: !(Maybe UserSortType)
+  , _duMarker              :: !(Maybe Text)
+  , _duQuery               :: !(Maybe (Sensitive Text))
+  , _duLimit               :: !(Maybe Nat)
+  , _duOrder               :: !(Maybe OrderType)
+  , _duOrganizationId      :: !(Maybe Text)
+  , _duFields              :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeUsers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'duInclude' - The state of the users. Specify "ALL" to include inactive users.
+--
+-- * 'duUserIds' - The IDs of the users.
+--
+-- * 'duAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'duSort' - The sorting criteria.
+--
+-- * 'duMarker' - The marker for the next set of results. (You received this marker from a previous call.)
+--
+-- * 'duQuery' - A query to filter users by user name.
+--
+-- * 'duLimit' - The maximum number of items to return.
+--
+-- * 'duOrder' - The order for the results.
+--
+-- * 'duOrganizationId' - The ID of the organization.
+--
+-- * 'duFields' - A comma-separated list of values. Specify "STORAGE_METADATA" to include the user storage quota and utilization information.
+describeUsers
+    :: DescribeUsers
+describeUsers =
+  DescribeUsers'
+  { _duInclude = Nothing
+  , _duUserIds = Nothing
+  , _duAuthenticationToken = Nothing
+  , _duSort = Nothing
+  , _duMarker = Nothing
+  , _duQuery = Nothing
+  , _duLimit = Nothing
+  , _duOrder = Nothing
+  , _duOrganizationId = Nothing
+  , _duFields = Nothing
+  }
+
+
+-- | The state of the users. Specify "ALL" to include inactive users.
+duInclude :: Lens' DescribeUsers (Maybe UserFilterType)
+duInclude = lens _duInclude (\ s a -> s{_duInclude = a});
+
+-- | The IDs of the users.
+duUserIds :: Lens' DescribeUsers (Maybe Text)
+duUserIds = lens _duUserIds (\ s a -> s{_duUserIds = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+duAuthenticationToken :: Lens' DescribeUsers (Maybe Text)
+duAuthenticationToken = lens _duAuthenticationToken (\ s a -> s{_duAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The sorting criteria.
+duSort :: Lens' DescribeUsers (Maybe UserSortType)
+duSort = lens _duSort (\ s a -> s{_duSort = a});
+
+-- | The marker for the next set of results. (You received this marker from a previous call.)
+duMarker :: Lens' DescribeUsers (Maybe Text)
+duMarker = lens _duMarker (\ s a -> s{_duMarker = a});
+
+-- | A query to filter users by user name.
+duQuery :: Lens' DescribeUsers (Maybe Text)
+duQuery = lens _duQuery (\ s a -> s{_duQuery = a}) . mapping _Sensitive;
+
+-- | The maximum number of items to return.
+duLimit :: Lens' DescribeUsers (Maybe Natural)
+duLimit = lens _duLimit (\ s a -> s{_duLimit = a}) . mapping _Nat;
+
+-- | The order for the results.
+duOrder :: Lens' DescribeUsers (Maybe OrderType)
+duOrder = lens _duOrder (\ s a -> s{_duOrder = a});
+
+-- | The ID of the organization.
+duOrganizationId :: Lens' DescribeUsers (Maybe Text)
+duOrganizationId = lens _duOrganizationId (\ s a -> s{_duOrganizationId = a});
+
+-- | A comma-separated list of values. Specify "STORAGE_METADATA" to include the user storage quota and utilization information.
+duFields :: Lens' DescribeUsers (Maybe Text)
+duFields = lens _duFields (\ s a -> s{_duFields = a});
+
+instance AWSPager DescribeUsers where
+        page rq rs
+          | stop (rs ^. dursMarker) = Nothing
+          | stop (rs ^. dursUsers) = Nothing
+          | otherwise =
+            Just $ rq & duMarker .~ rs ^. dursMarker
+
+instance AWSRequest DescribeUsers where
+        type Rs DescribeUsers = DescribeUsersResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeUsersResponse' <$>
+                   (x .?> "Users" .!@ mempty) <*>
+                     (x .?> "TotalNumberOfUsers")
+                     <*> (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeUsers where
+
+instance NFData DescribeUsers where
+
+instance ToHeaders DescribeUsers where
+        toHeaders DescribeUsers'{..}
+          = mconcat
+              ["Authentication" =# _duAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath DescribeUsers where
+        toPath = const "/api/v1/users"
+
+instance ToQuery DescribeUsers where
+        toQuery DescribeUsers'{..}
+          = mconcat
+              ["include" =: _duInclude, "userIds" =: _duUserIds,
+               "sort" =: _duSort, "marker" =: _duMarker,
+               "query" =: _duQuery, "limit" =: _duLimit,
+               "order" =: _duOrder,
+               "organizationId" =: _duOrganizationId,
+               "fields" =: _duFields]
+
+-- | /See:/ 'describeUsersResponse' smart constructor.
+data DescribeUsersResponse = DescribeUsersResponse'
+  { _dursUsers              :: !(Maybe [User])
+  , _dursTotalNumberOfUsers :: !(Maybe Integer)
+  , _dursMarker             :: !(Maybe Text)
+  , _dursResponseStatus     :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DescribeUsersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dursUsers' - The users.
+--
+-- * 'dursTotalNumberOfUsers' - The total number of users included in the results.
+--
+-- * 'dursMarker' - The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+--
+-- * 'dursResponseStatus' - -- | The response status code.
+describeUsersResponse
+    :: Int -- ^ 'dursResponseStatus'
+    -> DescribeUsersResponse
+describeUsersResponse pResponseStatus_ =
+  DescribeUsersResponse'
+  { _dursUsers = Nothing
+  , _dursTotalNumberOfUsers = Nothing
+  , _dursMarker = Nothing
+  , _dursResponseStatus = pResponseStatus_
+  }
+
+
+-- | The users.
+dursUsers :: Lens' DescribeUsersResponse [User]
+dursUsers = lens _dursUsers (\ s a -> s{_dursUsers = a}) . _Default . _Coerce;
+
+-- | The total number of users included in the results.
+dursTotalNumberOfUsers :: Lens' DescribeUsersResponse (Maybe Integer)
+dursTotalNumberOfUsers = lens _dursTotalNumberOfUsers (\ s a -> s{_dursTotalNumberOfUsers = a});
+
+-- | The marker to use when requesting the next set of results. If there are no additional results, the string is empty.
+dursMarker :: Lens' DescribeUsersResponse (Maybe Text)
+dursMarker = lens _dursMarker (\ s a -> s{_dursMarker = a});
+
+-- | -- | The response status code.
+dursResponseStatus :: Lens' DescribeUsersResponse Int
+dursResponseStatus = lens _dursResponseStatus (\ s a -> s{_dursResponseStatus = a});
+
+instance NFData DescribeUsersResponse where
diff --git a/gen/Network/AWS/WorkDocs/GetCurrentUser.hs b/gen/Network/AWS/WorkDocs/GetCurrentUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/GetCurrentUser.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.GetCurrentUser
+-- 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)
+--
+-- Retrieves details of the current user for whom the authentication token was generated. This is not a valid action for SigV4 (administrative API) clients.
+--
+--
+module Network.AWS.WorkDocs.GetCurrentUser
+    (
+    -- * Creating a Request
+      getCurrentUser
+    , GetCurrentUser
+    -- * Request Lenses
+    , gcuAuthenticationToken
+
+    -- * Destructuring the Response
+    , getCurrentUserResponse
+    , GetCurrentUserResponse
+    -- * Response Lenses
+    , gcursUser
+    , gcursResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'getCurrentUser' smart constructor.
+newtype GetCurrentUser = GetCurrentUser'
+  { _gcuAuthenticationToken :: Sensitive Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCurrentUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcuAuthenticationToken' - Amazon WorkDocs authentication token.
+getCurrentUser
+    :: Text -- ^ 'gcuAuthenticationToken'
+    -> GetCurrentUser
+getCurrentUser pAuthenticationToken_ =
+  GetCurrentUser' {_gcuAuthenticationToken = _Sensitive # pAuthenticationToken_}
+
+
+-- | Amazon WorkDocs authentication token.
+gcuAuthenticationToken :: Lens' GetCurrentUser Text
+gcuAuthenticationToken = lens _gcuAuthenticationToken (\ s a -> s{_gcuAuthenticationToken = a}) . _Sensitive;
+
+instance AWSRequest GetCurrentUser where
+        type Rs GetCurrentUser = GetCurrentUserResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetCurrentUserResponse' <$>
+                   (x .?> "User") <*> (pure (fromEnum s)))
+
+instance Hashable GetCurrentUser where
+
+instance NFData GetCurrentUser where
+
+instance ToHeaders GetCurrentUser where
+        toHeaders GetCurrentUser'{..}
+          = mconcat
+              ["Authentication" =# _gcuAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath GetCurrentUser where
+        toPath = const "/api/v1/me"
+
+instance ToQuery GetCurrentUser where
+        toQuery = const mempty
+
+-- | /See:/ 'getCurrentUserResponse' smart constructor.
+data GetCurrentUserResponse = GetCurrentUserResponse'
+  { _gcursUser           :: !(Maybe User)
+  , _gcursResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCurrentUserResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcursUser' - Metadata of the user.
+--
+-- * 'gcursResponseStatus' - -- | The response status code.
+getCurrentUserResponse
+    :: Int -- ^ 'gcursResponseStatus'
+    -> GetCurrentUserResponse
+getCurrentUserResponse pResponseStatus_ =
+  GetCurrentUserResponse'
+  {_gcursUser = Nothing, _gcursResponseStatus = pResponseStatus_}
+
+
+-- | Metadata of the user.
+gcursUser :: Lens' GetCurrentUserResponse (Maybe User)
+gcursUser = lens _gcursUser (\ s a -> s{_gcursUser = a});
+
+-- | -- | The response status code.
+gcursResponseStatus :: Lens' GetCurrentUserResponse Int
+gcursResponseStatus = lens _gcursResponseStatus (\ s a -> s{_gcursResponseStatus = a});
+
+instance NFData GetCurrentUserResponse where
diff --git a/gen/Network/AWS/WorkDocs/GetDocument.hs b/gen/Network/AWS/WorkDocs/GetDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/GetDocument.hs
@@ -0,0 +1,161 @@
+{-# 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.WorkDocs.GetDocument
+-- 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)
+--
+-- Retrieves details of a document.
+--
+--
+module Network.AWS.WorkDocs.GetDocument
+    (
+    -- * Creating a Request
+      getDocument
+    , GetDocument
+    -- * Request Lenses
+    , gdAuthenticationToken
+    , gdIncludeCustomMetadata
+    , gdDocumentId
+
+    -- * Destructuring the Response
+    , getDocumentResponse
+    , GetDocumentResponse
+    -- * Response Lenses
+    , gdrsCustomMetadata
+    , gdrsMetadata
+    , gdrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'getDocument' smart constructor.
+data GetDocument = GetDocument'
+  { _gdAuthenticationToken   :: !(Maybe (Sensitive Text))
+  , _gdIncludeCustomMetadata :: !(Maybe Bool)
+  , _gdDocumentId            :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'gdIncludeCustomMetadata' - Set this to @TRUE@ to include custom metadata in the response.
+--
+-- * 'gdDocumentId' - The ID of the document.
+getDocument
+    :: Text -- ^ 'gdDocumentId'
+    -> GetDocument
+getDocument pDocumentId_ =
+  GetDocument'
+  { _gdAuthenticationToken = Nothing
+  , _gdIncludeCustomMetadata = Nothing
+  , _gdDocumentId = pDocumentId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+gdAuthenticationToken :: Lens' GetDocument (Maybe Text)
+gdAuthenticationToken = lens _gdAuthenticationToken (\ s a -> s{_gdAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | Set this to @TRUE@ to include custom metadata in the response.
+gdIncludeCustomMetadata :: Lens' GetDocument (Maybe Bool)
+gdIncludeCustomMetadata = lens _gdIncludeCustomMetadata (\ s a -> s{_gdIncludeCustomMetadata = a});
+
+-- | The ID of the document.
+gdDocumentId :: Lens' GetDocument Text
+gdDocumentId = lens _gdDocumentId (\ s a -> s{_gdDocumentId = a});
+
+instance AWSRequest GetDocument where
+        type Rs GetDocument = GetDocumentResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDocumentResponse' <$>
+                   (x .?> "CustomMetadata" .!@ mempty) <*>
+                     (x .?> "Metadata")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetDocument where
+
+instance NFData GetDocument where
+
+instance ToHeaders GetDocument where
+        toHeaders GetDocument'{..}
+          = mconcat
+              ["Authentication" =# _gdAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath GetDocument where
+        toPath GetDocument'{..}
+          = mconcat ["/api/v1/documents/", toBS _gdDocumentId]
+
+instance ToQuery GetDocument where
+        toQuery GetDocument'{..}
+          = mconcat
+              ["includeCustomMetadata" =: _gdIncludeCustomMetadata]
+
+-- | /See:/ 'getDocumentResponse' smart constructor.
+data GetDocumentResponse = GetDocumentResponse'
+  { _gdrsCustomMetadata :: !(Maybe (Map Text Text))
+  , _gdrsMetadata       :: !(Maybe DocumentMetadata)
+  , _gdrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDocumentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdrsCustomMetadata' - The custom metadata on the document.
+--
+-- * 'gdrsMetadata' - The metadata details of the document.
+--
+-- * 'gdrsResponseStatus' - -- | The response status code.
+getDocumentResponse
+    :: Int -- ^ 'gdrsResponseStatus'
+    -> GetDocumentResponse
+getDocumentResponse pResponseStatus_ =
+  GetDocumentResponse'
+  { _gdrsCustomMetadata = Nothing
+  , _gdrsMetadata = Nothing
+  , _gdrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The custom metadata on the document.
+gdrsCustomMetadata :: Lens' GetDocumentResponse (HashMap Text Text)
+gdrsCustomMetadata = lens _gdrsCustomMetadata (\ s a -> s{_gdrsCustomMetadata = a}) . _Default . _Map;
+
+-- | The metadata details of the document.
+gdrsMetadata :: Lens' GetDocumentResponse (Maybe DocumentMetadata)
+gdrsMetadata = lens _gdrsMetadata (\ s a -> s{_gdrsMetadata = a});
+
+-- | -- | The response status code.
+gdrsResponseStatus :: Lens' GetDocumentResponse Int
+gdrsResponseStatus = lens _gdrsResponseStatus (\ s a -> s{_gdrsResponseStatus = a});
+
+instance NFData GetDocumentResponse where
diff --git a/gen/Network/AWS/WorkDocs/GetDocumentPath.hs b/gen/Network/AWS/WorkDocs/GetDocumentPath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/GetDocumentPath.hs
@@ -0,0 +1,170 @@
+{-# 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.WorkDocs.GetDocumentPath
+-- 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)
+--
+-- Retrieves the path information (the hierarchy from the root folder) for the requested document.
+--
+--
+-- By default, Amazon WorkDocs returns a maximum of 100 levels upwards from the requested document and only includes the IDs of the parent folders in the path. You can limit the maximum number of levels. You can also request the names of the parent folders.
+--
+module Network.AWS.WorkDocs.GetDocumentPath
+    (
+    -- * Creating a Request
+      getDocumentPath
+    , GetDocumentPath
+    -- * Request Lenses
+    , gdpAuthenticationToken
+    , gdpMarker
+    , gdpLimit
+    , gdpFields
+    , gdpDocumentId
+
+    -- * Destructuring the Response
+    , getDocumentPathResponse
+    , GetDocumentPathResponse
+    -- * Response Lenses
+    , gdprsPath
+    , gdprsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'getDocumentPath' smart constructor.
+data GetDocumentPath = GetDocumentPath'
+  { _gdpAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _gdpMarker              :: !(Maybe Text)
+  , _gdpLimit               :: !(Maybe Nat)
+  , _gdpFields              :: !(Maybe Text)
+  , _gdpDocumentId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDocumentPath' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdpAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'gdpMarker' - This value is not supported.
+--
+-- * 'gdpLimit' - The maximum number of levels in the hierarchy to return.
+--
+-- * 'gdpFields' - A comma-separated list of values. Specify @NAME@ to include the names of the parent folders.
+--
+-- * 'gdpDocumentId' - The ID of the document.
+getDocumentPath
+    :: Text -- ^ 'gdpDocumentId'
+    -> GetDocumentPath
+getDocumentPath pDocumentId_ =
+  GetDocumentPath'
+  { _gdpAuthenticationToken = Nothing
+  , _gdpMarker = Nothing
+  , _gdpLimit = Nothing
+  , _gdpFields = Nothing
+  , _gdpDocumentId = pDocumentId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+gdpAuthenticationToken :: Lens' GetDocumentPath (Maybe Text)
+gdpAuthenticationToken = lens _gdpAuthenticationToken (\ s a -> s{_gdpAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | This value is not supported.
+gdpMarker :: Lens' GetDocumentPath (Maybe Text)
+gdpMarker = lens _gdpMarker (\ s a -> s{_gdpMarker = a});
+
+-- | The maximum number of levels in the hierarchy to return.
+gdpLimit :: Lens' GetDocumentPath (Maybe Natural)
+gdpLimit = lens _gdpLimit (\ s a -> s{_gdpLimit = a}) . mapping _Nat;
+
+-- | A comma-separated list of values. Specify @NAME@ to include the names of the parent folders.
+gdpFields :: Lens' GetDocumentPath (Maybe Text)
+gdpFields = lens _gdpFields (\ s a -> s{_gdpFields = a});
+
+-- | The ID of the document.
+gdpDocumentId :: Lens' GetDocumentPath Text
+gdpDocumentId = lens _gdpDocumentId (\ s a -> s{_gdpDocumentId = a});
+
+instance AWSRequest GetDocumentPath where
+        type Rs GetDocumentPath = GetDocumentPathResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDocumentPathResponse' <$>
+                   (x .?> "Path") <*> (pure (fromEnum s)))
+
+instance Hashable GetDocumentPath where
+
+instance NFData GetDocumentPath where
+
+instance ToHeaders GetDocumentPath where
+        toHeaders GetDocumentPath'{..}
+          = mconcat
+              ["Authentication" =# _gdpAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath GetDocumentPath where
+        toPath GetDocumentPath'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _gdpDocumentId, "/path"]
+
+instance ToQuery GetDocumentPath where
+        toQuery GetDocumentPath'{..}
+          = mconcat
+              ["marker" =: _gdpMarker, "limit" =: _gdpLimit,
+               "fields" =: _gdpFields]
+
+-- | /See:/ 'getDocumentPathResponse' smart constructor.
+data GetDocumentPathResponse = GetDocumentPathResponse'
+  { _gdprsPath           :: !(Maybe ResourcePath)
+  , _gdprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDocumentPathResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdprsPath' - The path information.
+--
+-- * 'gdprsResponseStatus' - -- | The response status code.
+getDocumentPathResponse
+    :: Int -- ^ 'gdprsResponseStatus'
+    -> GetDocumentPathResponse
+getDocumentPathResponse pResponseStatus_ =
+  GetDocumentPathResponse'
+  {_gdprsPath = Nothing, _gdprsResponseStatus = pResponseStatus_}
+
+
+-- | The path information.
+gdprsPath :: Lens' GetDocumentPathResponse (Maybe ResourcePath)
+gdprsPath = lens _gdprsPath (\ s a -> s{_gdprsPath = a});
+
+-- | -- | The response status code.
+gdprsResponseStatus :: Lens' GetDocumentPathResponse Int
+gdprsResponseStatus = lens _gdprsResponseStatus (\ s a -> s{_gdprsResponseStatus = a});
+
+instance NFData GetDocumentPathResponse where
diff --git a/gen/Network/AWS/WorkDocs/GetDocumentVersion.hs b/gen/Network/AWS/WorkDocs/GetDocumentVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/GetDocumentVersion.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.GetDocumentVersion
+-- 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)
+--
+-- Retrieves version metadata for the specified document.
+--
+--
+module Network.AWS.WorkDocs.GetDocumentVersion
+    (
+    -- * Creating a Request
+      getDocumentVersion
+    , GetDocumentVersion
+    -- * Request Lenses
+    , gdvAuthenticationToken
+    , gdvIncludeCustomMetadata
+    , gdvFields
+    , gdvDocumentId
+    , gdvVersionId
+
+    -- * Destructuring the Response
+    , getDocumentVersionResponse
+    , GetDocumentVersionResponse
+    -- * Response Lenses
+    , gdvrsCustomMetadata
+    , gdvrsMetadata
+    , gdvrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'getDocumentVersion' smart constructor.
+data GetDocumentVersion = GetDocumentVersion'
+  { _gdvAuthenticationToken   :: !(Maybe (Sensitive Text))
+  , _gdvIncludeCustomMetadata :: !(Maybe Bool)
+  , _gdvFields                :: !(Maybe Text)
+  , _gdvDocumentId            :: !Text
+  , _gdvVersionId             :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDocumentVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdvAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'gdvIncludeCustomMetadata' - Set this to TRUE to include custom metadata in the response.
+--
+-- * 'gdvFields' - A comma-separated list of values. Specify "SOURCE" to include a URL for the source document.
+--
+-- * 'gdvDocumentId' - The ID of the document.
+--
+-- * 'gdvVersionId' - The version ID of the document.
+getDocumentVersion
+    :: Text -- ^ 'gdvDocumentId'
+    -> Text -- ^ 'gdvVersionId'
+    -> GetDocumentVersion
+getDocumentVersion pDocumentId_ pVersionId_ =
+  GetDocumentVersion'
+  { _gdvAuthenticationToken = Nothing
+  , _gdvIncludeCustomMetadata = Nothing
+  , _gdvFields = Nothing
+  , _gdvDocumentId = pDocumentId_
+  , _gdvVersionId = pVersionId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+gdvAuthenticationToken :: Lens' GetDocumentVersion (Maybe Text)
+gdvAuthenticationToken = lens _gdvAuthenticationToken (\ s a -> s{_gdvAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | Set this to TRUE to include custom metadata in the response.
+gdvIncludeCustomMetadata :: Lens' GetDocumentVersion (Maybe Bool)
+gdvIncludeCustomMetadata = lens _gdvIncludeCustomMetadata (\ s a -> s{_gdvIncludeCustomMetadata = a});
+
+-- | A comma-separated list of values. Specify "SOURCE" to include a URL for the source document.
+gdvFields :: Lens' GetDocumentVersion (Maybe Text)
+gdvFields = lens _gdvFields (\ s a -> s{_gdvFields = a});
+
+-- | The ID of the document.
+gdvDocumentId :: Lens' GetDocumentVersion Text
+gdvDocumentId = lens _gdvDocumentId (\ s a -> s{_gdvDocumentId = a});
+
+-- | The version ID of the document.
+gdvVersionId :: Lens' GetDocumentVersion Text
+gdvVersionId = lens _gdvVersionId (\ s a -> s{_gdvVersionId = a});
+
+instance AWSRequest GetDocumentVersion where
+        type Rs GetDocumentVersion =
+             GetDocumentVersionResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDocumentVersionResponse' <$>
+                   (x .?> "CustomMetadata" .!@ mempty) <*>
+                     (x .?> "Metadata")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetDocumentVersion where
+
+instance NFData GetDocumentVersion where
+
+instance ToHeaders GetDocumentVersion where
+        toHeaders GetDocumentVersion'{..}
+          = mconcat
+              ["Authentication" =# _gdvAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath GetDocumentVersion where
+        toPath GetDocumentVersion'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _gdvDocumentId,
+               "/versions/", toBS _gdvVersionId]
+
+instance ToQuery GetDocumentVersion where
+        toQuery GetDocumentVersion'{..}
+          = mconcat
+              ["includeCustomMetadata" =:
+                 _gdvIncludeCustomMetadata,
+               "fields" =: _gdvFields]
+
+-- | /See:/ 'getDocumentVersionResponse' smart constructor.
+data GetDocumentVersionResponse = GetDocumentVersionResponse'
+  { _gdvrsCustomMetadata :: !(Maybe (Map Text Text))
+  , _gdvrsMetadata       :: !(Maybe DocumentVersionMetadata)
+  , _gdvrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDocumentVersionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdvrsCustomMetadata' - The custom metadata on the document version.
+--
+-- * 'gdvrsMetadata' - The version metadata.
+--
+-- * 'gdvrsResponseStatus' - -- | The response status code.
+getDocumentVersionResponse
+    :: Int -- ^ 'gdvrsResponseStatus'
+    -> GetDocumentVersionResponse
+getDocumentVersionResponse pResponseStatus_ =
+  GetDocumentVersionResponse'
+  { _gdvrsCustomMetadata = Nothing
+  , _gdvrsMetadata = Nothing
+  , _gdvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The custom metadata on the document version.
+gdvrsCustomMetadata :: Lens' GetDocumentVersionResponse (HashMap Text Text)
+gdvrsCustomMetadata = lens _gdvrsCustomMetadata (\ s a -> s{_gdvrsCustomMetadata = a}) . _Default . _Map;
+
+-- | The version metadata.
+gdvrsMetadata :: Lens' GetDocumentVersionResponse (Maybe DocumentVersionMetadata)
+gdvrsMetadata = lens _gdvrsMetadata (\ s a -> s{_gdvrsMetadata = a});
+
+-- | -- | The response status code.
+gdvrsResponseStatus :: Lens' GetDocumentVersionResponse Int
+gdvrsResponseStatus = lens _gdvrsResponseStatus (\ s a -> s{_gdvrsResponseStatus = a});
+
+instance NFData GetDocumentVersionResponse where
diff --git a/gen/Network/AWS/WorkDocs/GetFolder.hs b/gen/Network/AWS/WorkDocs/GetFolder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/GetFolder.hs
@@ -0,0 +1,161 @@
+{-# 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.WorkDocs.GetFolder
+-- 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)
+--
+-- Retrieves the metadata of the specified folder.
+--
+--
+module Network.AWS.WorkDocs.GetFolder
+    (
+    -- * Creating a Request
+      getFolder
+    , GetFolder
+    -- * Request Lenses
+    , gfAuthenticationToken
+    , gfIncludeCustomMetadata
+    , gfFolderId
+
+    -- * Destructuring the Response
+    , getFolderResponse
+    , GetFolderResponse
+    -- * Response Lenses
+    , gfrsCustomMetadata
+    , gfrsMetadata
+    , gfrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'getFolder' smart constructor.
+data GetFolder = GetFolder'
+  { _gfAuthenticationToken   :: !(Maybe (Sensitive Text))
+  , _gfIncludeCustomMetadata :: !(Maybe Bool)
+  , _gfFolderId              :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetFolder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'gfIncludeCustomMetadata' - Set to TRUE to include custom metadata in the response.
+--
+-- * 'gfFolderId' - The ID of the folder.
+getFolder
+    :: Text -- ^ 'gfFolderId'
+    -> GetFolder
+getFolder pFolderId_ =
+  GetFolder'
+  { _gfAuthenticationToken = Nothing
+  , _gfIncludeCustomMetadata = Nothing
+  , _gfFolderId = pFolderId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+gfAuthenticationToken :: Lens' GetFolder (Maybe Text)
+gfAuthenticationToken = lens _gfAuthenticationToken (\ s a -> s{_gfAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | Set to TRUE to include custom metadata in the response.
+gfIncludeCustomMetadata :: Lens' GetFolder (Maybe Bool)
+gfIncludeCustomMetadata = lens _gfIncludeCustomMetadata (\ s a -> s{_gfIncludeCustomMetadata = a});
+
+-- | The ID of the folder.
+gfFolderId :: Lens' GetFolder Text
+gfFolderId = lens _gfFolderId (\ s a -> s{_gfFolderId = a});
+
+instance AWSRequest GetFolder where
+        type Rs GetFolder = GetFolderResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetFolderResponse' <$>
+                   (x .?> "CustomMetadata" .!@ mempty) <*>
+                     (x .?> "Metadata")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetFolder where
+
+instance NFData GetFolder where
+
+instance ToHeaders GetFolder where
+        toHeaders GetFolder'{..}
+          = mconcat
+              ["Authentication" =# _gfAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath GetFolder where
+        toPath GetFolder'{..}
+          = mconcat ["/api/v1/folders/", toBS _gfFolderId]
+
+instance ToQuery GetFolder where
+        toQuery GetFolder'{..}
+          = mconcat
+              ["includeCustomMetadata" =: _gfIncludeCustomMetadata]
+
+-- | /See:/ 'getFolderResponse' smart constructor.
+data GetFolderResponse = GetFolderResponse'
+  { _gfrsCustomMetadata :: !(Maybe (Map Text Text))
+  , _gfrsMetadata       :: !(Maybe FolderMetadata)
+  , _gfrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetFolderResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfrsCustomMetadata' - The custom metadata on the folder.
+--
+-- * 'gfrsMetadata' - The metadata of the folder.
+--
+-- * 'gfrsResponseStatus' - -- | The response status code.
+getFolderResponse
+    :: Int -- ^ 'gfrsResponseStatus'
+    -> GetFolderResponse
+getFolderResponse pResponseStatus_ =
+  GetFolderResponse'
+  { _gfrsCustomMetadata = Nothing
+  , _gfrsMetadata = Nothing
+  , _gfrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | The custom metadata on the folder.
+gfrsCustomMetadata :: Lens' GetFolderResponse (HashMap Text Text)
+gfrsCustomMetadata = lens _gfrsCustomMetadata (\ s a -> s{_gfrsCustomMetadata = a}) . _Default . _Map;
+
+-- | The metadata of the folder.
+gfrsMetadata :: Lens' GetFolderResponse (Maybe FolderMetadata)
+gfrsMetadata = lens _gfrsMetadata (\ s a -> s{_gfrsMetadata = a});
+
+-- | -- | The response status code.
+gfrsResponseStatus :: Lens' GetFolderResponse Int
+gfrsResponseStatus = lens _gfrsResponseStatus (\ s a -> s{_gfrsResponseStatus = a});
+
+instance NFData GetFolderResponse where
diff --git a/gen/Network/AWS/WorkDocs/GetFolderPath.hs b/gen/Network/AWS/WorkDocs/GetFolderPath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/GetFolderPath.hs
@@ -0,0 +1,170 @@
+{-# 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.WorkDocs.GetFolderPath
+-- 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)
+--
+-- Retrieves the path information (the hierarchy from the root folder) for the specified folder.
+--
+--
+-- By default, Amazon WorkDocs returns a maximum of 100 levels upwards from the requested folder and only includes the IDs of the parent folders in the path. You can limit the maximum number of levels. You can also request the parent folder names.
+--
+module Network.AWS.WorkDocs.GetFolderPath
+    (
+    -- * Creating a Request
+      getFolderPath
+    , GetFolderPath
+    -- * Request Lenses
+    , gfpAuthenticationToken
+    , gfpMarker
+    , gfpLimit
+    , gfpFields
+    , gfpFolderId
+
+    -- * Destructuring the Response
+    , getFolderPathResponse
+    , GetFolderPathResponse
+    -- * Response Lenses
+    , gfprsPath
+    , gfprsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'getFolderPath' smart constructor.
+data GetFolderPath = GetFolderPath'
+  { _gfpAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _gfpMarker              :: !(Maybe Text)
+  , _gfpLimit               :: !(Maybe Nat)
+  , _gfpFields              :: !(Maybe Text)
+  , _gfpFolderId            :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetFolderPath' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfpAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'gfpMarker' - This value is not supported.
+--
+-- * 'gfpLimit' - The maximum number of levels in the hierarchy to return.
+--
+-- * 'gfpFields' - A comma-separated list of values. Specify "NAME" to include the names of the parent folders.
+--
+-- * 'gfpFolderId' - The ID of the folder.
+getFolderPath
+    :: Text -- ^ 'gfpFolderId'
+    -> GetFolderPath
+getFolderPath pFolderId_ =
+  GetFolderPath'
+  { _gfpAuthenticationToken = Nothing
+  , _gfpMarker = Nothing
+  , _gfpLimit = Nothing
+  , _gfpFields = Nothing
+  , _gfpFolderId = pFolderId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+gfpAuthenticationToken :: Lens' GetFolderPath (Maybe Text)
+gfpAuthenticationToken = lens _gfpAuthenticationToken (\ s a -> s{_gfpAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | This value is not supported.
+gfpMarker :: Lens' GetFolderPath (Maybe Text)
+gfpMarker = lens _gfpMarker (\ s a -> s{_gfpMarker = a});
+
+-- | The maximum number of levels in the hierarchy to return.
+gfpLimit :: Lens' GetFolderPath (Maybe Natural)
+gfpLimit = lens _gfpLimit (\ s a -> s{_gfpLimit = a}) . mapping _Nat;
+
+-- | A comma-separated list of values. Specify "NAME" to include the names of the parent folders.
+gfpFields :: Lens' GetFolderPath (Maybe Text)
+gfpFields = lens _gfpFields (\ s a -> s{_gfpFields = a});
+
+-- | The ID of the folder.
+gfpFolderId :: Lens' GetFolderPath Text
+gfpFolderId = lens _gfpFolderId (\ s a -> s{_gfpFolderId = a});
+
+instance AWSRequest GetFolderPath where
+        type Rs GetFolderPath = GetFolderPathResponse
+        request = get workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetFolderPathResponse' <$>
+                   (x .?> "Path") <*> (pure (fromEnum s)))
+
+instance Hashable GetFolderPath where
+
+instance NFData GetFolderPath where
+
+instance ToHeaders GetFolderPath where
+        toHeaders GetFolderPath'{..}
+          = mconcat
+              ["Authentication" =# _gfpAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath GetFolderPath where
+        toPath GetFolderPath'{..}
+          = mconcat
+              ["/api/v1/folders/", toBS _gfpFolderId, "/path"]
+
+instance ToQuery GetFolderPath where
+        toQuery GetFolderPath'{..}
+          = mconcat
+              ["marker" =: _gfpMarker, "limit" =: _gfpLimit,
+               "fields" =: _gfpFields]
+
+-- | /See:/ 'getFolderPathResponse' smart constructor.
+data GetFolderPathResponse = GetFolderPathResponse'
+  { _gfprsPath           :: !(Maybe ResourcePath)
+  , _gfprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetFolderPathResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gfprsPath' - The path information.
+--
+-- * 'gfprsResponseStatus' - -- | The response status code.
+getFolderPathResponse
+    :: Int -- ^ 'gfprsResponseStatus'
+    -> GetFolderPathResponse
+getFolderPathResponse pResponseStatus_ =
+  GetFolderPathResponse'
+  {_gfprsPath = Nothing, _gfprsResponseStatus = pResponseStatus_}
+
+
+-- | The path information.
+gfprsPath :: Lens' GetFolderPathResponse (Maybe ResourcePath)
+gfprsPath = lens _gfprsPath (\ s a -> s{_gfprsPath = a});
+
+-- | -- | The response status code.
+gfprsResponseStatus :: Lens' GetFolderPathResponse Int
+gfprsResponseStatus = lens _gfprsResponseStatus (\ s a -> s{_gfprsResponseStatus = a});
+
+instance NFData GetFolderPathResponse where
diff --git a/gen/Network/AWS/WorkDocs/InitiateDocumentVersionUpload.hs b/gen/Network/AWS/WorkDocs/InitiateDocumentVersionUpload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/InitiateDocumentVersionUpload.hs
@@ -0,0 +1,224 @@
+{-# 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.WorkDocs.InitiateDocumentVersionUpload
+-- 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 document object and version object.
+--
+--
+-- The client specifies the parent folder ID and name of the document to upload. The ID is optionally specified when creating a new version of an existing document. This is the first step to upload a document. Next, upload the document to the URL returned from the call, and then call 'UpdateDocumentVersion' .
+--
+-- To cancel the document upload, call 'AbortDocumentVersionUpload' .
+--
+module Network.AWS.WorkDocs.InitiateDocumentVersionUpload
+    (
+    -- * Creating a Request
+      initiateDocumentVersionUpload
+    , InitiateDocumentVersionUpload
+    -- * Request Lenses
+    , idvuDocumentSizeInBytes
+    , idvuContentCreatedTimestamp
+    , idvuAuthenticationToken
+    , idvuName
+    , idvuId
+    , idvuContentModifiedTimestamp
+    , idvuContentType
+    , idvuParentFolderId
+
+    -- * Destructuring the Response
+    , initiateDocumentVersionUploadResponse
+    , InitiateDocumentVersionUploadResponse
+    -- * Response Lenses
+    , idvursMetadata
+    , idvursUploadMetadata
+    , idvursResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'initiateDocumentVersionUpload' smart constructor.
+data InitiateDocumentVersionUpload = InitiateDocumentVersionUpload'
+  { _idvuDocumentSizeInBytes      :: !(Maybe Integer)
+  , _idvuContentCreatedTimestamp  :: !(Maybe POSIX)
+  , _idvuAuthenticationToken      :: !(Maybe (Sensitive Text))
+  , _idvuName                     :: !(Maybe Text)
+  , _idvuId                       :: !(Maybe Text)
+  , _idvuContentModifiedTimestamp :: !(Maybe POSIX)
+  , _idvuContentType              :: !(Maybe Text)
+  , _idvuParentFolderId           :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InitiateDocumentVersionUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idvuDocumentSizeInBytes' - The size of the document, in bytes.
+--
+-- * 'idvuContentCreatedTimestamp' - The time stamp when the content of the document was originally created.
+--
+-- * 'idvuAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'idvuName' - The name of the document.
+--
+-- * 'idvuId' - The ID of the document.
+--
+-- * 'idvuContentModifiedTimestamp' - The time stamp when the content of the document was modified.
+--
+-- * 'idvuContentType' - The content type of the document.
+--
+-- * 'idvuParentFolderId' - The ID of the parent folder.
+initiateDocumentVersionUpload
+    :: Text -- ^ 'idvuParentFolderId'
+    -> InitiateDocumentVersionUpload
+initiateDocumentVersionUpload pParentFolderId_ =
+  InitiateDocumentVersionUpload'
+  { _idvuDocumentSizeInBytes = Nothing
+  , _idvuContentCreatedTimestamp = Nothing
+  , _idvuAuthenticationToken = Nothing
+  , _idvuName = Nothing
+  , _idvuId = Nothing
+  , _idvuContentModifiedTimestamp = Nothing
+  , _idvuContentType = Nothing
+  , _idvuParentFolderId = pParentFolderId_
+  }
+
+
+-- | The size of the document, in bytes.
+idvuDocumentSizeInBytes :: Lens' InitiateDocumentVersionUpload (Maybe Integer)
+idvuDocumentSizeInBytes = lens _idvuDocumentSizeInBytes (\ s a -> s{_idvuDocumentSizeInBytes = a});
+
+-- | The time stamp when the content of the document was originally created.
+idvuContentCreatedTimestamp :: Lens' InitiateDocumentVersionUpload (Maybe UTCTime)
+idvuContentCreatedTimestamp = lens _idvuContentCreatedTimestamp (\ s a -> s{_idvuContentCreatedTimestamp = a}) . mapping _Time;
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+idvuAuthenticationToken :: Lens' InitiateDocumentVersionUpload (Maybe Text)
+idvuAuthenticationToken = lens _idvuAuthenticationToken (\ s a -> s{_idvuAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The name of the document.
+idvuName :: Lens' InitiateDocumentVersionUpload (Maybe Text)
+idvuName = lens _idvuName (\ s a -> s{_idvuName = a});
+
+-- | The ID of the document.
+idvuId :: Lens' InitiateDocumentVersionUpload (Maybe Text)
+idvuId = lens _idvuId (\ s a -> s{_idvuId = a});
+
+-- | The time stamp when the content of the document was modified.
+idvuContentModifiedTimestamp :: Lens' InitiateDocumentVersionUpload (Maybe UTCTime)
+idvuContentModifiedTimestamp = lens _idvuContentModifiedTimestamp (\ s a -> s{_idvuContentModifiedTimestamp = a}) . mapping _Time;
+
+-- | The content type of the document.
+idvuContentType :: Lens' InitiateDocumentVersionUpload (Maybe Text)
+idvuContentType = lens _idvuContentType (\ s a -> s{_idvuContentType = a});
+
+-- | The ID of the parent folder.
+idvuParentFolderId :: Lens' InitiateDocumentVersionUpload Text
+idvuParentFolderId = lens _idvuParentFolderId (\ s a -> s{_idvuParentFolderId = a});
+
+instance AWSRequest InitiateDocumentVersionUpload
+         where
+        type Rs InitiateDocumentVersionUpload =
+             InitiateDocumentVersionUploadResponse
+        request = postJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 InitiateDocumentVersionUploadResponse' <$>
+                   (x .?> "Metadata") <*> (x .?> "UploadMetadata") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable InitiateDocumentVersionUpload where
+
+instance NFData InitiateDocumentVersionUpload where
+
+instance ToHeaders InitiateDocumentVersionUpload
+         where
+        toHeaders InitiateDocumentVersionUpload'{..}
+          = mconcat
+              ["Authentication" =# _idvuAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON InitiateDocumentVersionUpload where
+        toJSON InitiateDocumentVersionUpload'{..}
+          = object
+              (catMaybes
+                 [("DocumentSizeInBytes" .=) <$>
+                    _idvuDocumentSizeInBytes,
+                  ("ContentCreatedTimestamp" .=) <$>
+                    _idvuContentCreatedTimestamp,
+                  ("Name" .=) <$> _idvuName, ("Id" .=) <$> _idvuId,
+                  ("ContentModifiedTimestamp" .=) <$>
+                    _idvuContentModifiedTimestamp,
+                  ("ContentType" .=) <$> _idvuContentType,
+                  Just ("ParentFolderId" .= _idvuParentFolderId)])
+
+instance ToPath InitiateDocumentVersionUpload where
+        toPath = const "/api/v1/documents"
+
+instance ToQuery InitiateDocumentVersionUpload where
+        toQuery = const mempty
+
+-- | /See:/ 'initiateDocumentVersionUploadResponse' smart constructor.
+data InitiateDocumentVersionUploadResponse = InitiateDocumentVersionUploadResponse'
+  { _idvursMetadata       :: !(Maybe DocumentMetadata)
+  , _idvursUploadMetadata :: !(Maybe UploadMetadata)
+  , _idvursResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InitiateDocumentVersionUploadResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idvursMetadata' - The document metadata.
+--
+-- * 'idvursUploadMetadata' - The upload metadata.
+--
+-- * 'idvursResponseStatus' - -- | The response status code.
+initiateDocumentVersionUploadResponse
+    :: Int -- ^ 'idvursResponseStatus'
+    -> InitiateDocumentVersionUploadResponse
+initiateDocumentVersionUploadResponse pResponseStatus_ =
+  InitiateDocumentVersionUploadResponse'
+  { _idvursMetadata = Nothing
+  , _idvursUploadMetadata = Nothing
+  , _idvursResponseStatus = pResponseStatus_
+  }
+
+
+-- | The document metadata.
+idvursMetadata :: Lens' InitiateDocumentVersionUploadResponse (Maybe DocumentMetadata)
+idvursMetadata = lens _idvursMetadata (\ s a -> s{_idvursMetadata = a});
+
+-- | The upload metadata.
+idvursUploadMetadata :: Lens' InitiateDocumentVersionUploadResponse (Maybe UploadMetadata)
+idvursUploadMetadata = lens _idvursUploadMetadata (\ s a -> s{_idvursUploadMetadata = a});
+
+-- | -- | The response status code.
+idvursResponseStatus :: Lens' InitiateDocumentVersionUploadResponse Int
+idvursResponseStatus = lens _idvursResponseStatus (\ s a -> s{_idvursResponseStatus = a});
+
+instance NFData InitiateDocumentVersionUploadResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/RemoveAllResourcePermissions.hs b/gen/Network/AWS/WorkDocs/RemoveAllResourcePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/RemoveAllResourcePermissions.hs
@@ -0,0 +1,117 @@
+{-# 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.WorkDocs.RemoveAllResourcePermissions
+-- 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)
+--
+-- Removes all the permissions from the specified resource.
+--
+--
+module Network.AWS.WorkDocs.RemoveAllResourcePermissions
+    (
+    -- * Creating a Request
+      removeAllResourcePermissions
+    , RemoveAllResourcePermissions
+    -- * Request Lenses
+    , rarpAuthenticationToken
+    , rarpResourceId
+
+    -- * Destructuring the Response
+    , removeAllResourcePermissionsResponse
+    , RemoveAllResourcePermissionsResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'removeAllResourcePermissions' smart constructor.
+data RemoveAllResourcePermissions = RemoveAllResourcePermissions'
+  { _rarpAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _rarpResourceId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RemoveAllResourcePermissions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rarpAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'rarpResourceId' - The ID of the resource.
+removeAllResourcePermissions
+    :: Text -- ^ 'rarpResourceId'
+    -> RemoveAllResourcePermissions
+removeAllResourcePermissions pResourceId_ =
+  RemoveAllResourcePermissions'
+  {_rarpAuthenticationToken = Nothing, _rarpResourceId = pResourceId_}
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+rarpAuthenticationToken :: Lens' RemoveAllResourcePermissions (Maybe Text)
+rarpAuthenticationToken = lens _rarpAuthenticationToken (\ s a -> s{_rarpAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the resource.
+rarpResourceId :: Lens' RemoveAllResourcePermissions Text
+rarpResourceId = lens _rarpResourceId (\ s a -> s{_rarpResourceId = a});
+
+instance AWSRequest RemoveAllResourcePermissions
+         where
+        type Rs RemoveAllResourcePermissions =
+             RemoveAllResourcePermissionsResponse
+        request = delete workDocs
+        response
+          = receiveNull RemoveAllResourcePermissionsResponse'
+
+instance Hashable RemoveAllResourcePermissions where
+
+instance NFData RemoveAllResourcePermissions where
+
+instance ToHeaders RemoveAllResourcePermissions where
+        toHeaders RemoveAllResourcePermissions'{..}
+          = mconcat
+              ["Authentication" =# _rarpAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath RemoveAllResourcePermissions where
+        toPath RemoveAllResourcePermissions'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _rarpResourceId,
+               "/permissions"]
+
+instance ToQuery RemoveAllResourcePermissions where
+        toQuery = const mempty
+
+-- | /See:/ 'removeAllResourcePermissionsResponse' smart constructor.
+data RemoveAllResourcePermissionsResponse =
+  RemoveAllResourcePermissionsResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RemoveAllResourcePermissionsResponse' with the minimum fields required to make a request.
+--
+removeAllResourcePermissionsResponse
+    :: RemoveAllResourcePermissionsResponse
+removeAllResourcePermissionsResponse = RemoveAllResourcePermissionsResponse'
+
+
+instance NFData RemoveAllResourcePermissionsResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/RemoveResourcePermission.hs b/gen/Network/AWS/WorkDocs/RemoveResourcePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/RemoveResourcePermission.hs
@@ -0,0 +1,138 @@
+{-# 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.WorkDocs.RemoveResourcePermission
+-- 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)
+--
+-- Removes the permission for the specified principal from the specified resource.
+--
+--
+module Network.AWS.WorkDocs.RemoveResourcePermission
+    (
+    -- * Creating a Request
+      removeResourcePermission
+    , RemoveResourcePermission
+    -- * Request Lenses
+    , rrpPrincipalType
+    , rrpAuthenticationToken
+    , rrpResourceId
+    , rrpPrincipalId
+
+    -- * Destructuring the Response
+    , removeResourcePermissionResponse
+    , RemoveResourcePermissionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'removeResourcePermission' smart constructor.
+data RemoveResourcePermission = RemoveResourcePermission'
+  { _rrpPrincipalType       :: !(Maybe PrincipalType)
+  , _rrpAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _rrpResourceId          :: !Text
+  , _rrpPrincipalId         :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RemoveResourcePermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrpPrincipalType' - The principal type of the resource.
+--
+-- * 'rrpAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'rrpResourceId' - The ID of the resource.
+--
+-- * 'rrpPrincipalId' - The principal ID of the resource.
+removeResourcePermission
+    :: Text -- ^ 'rrpResourceId'
+    -> Text -- ^ 'rrpPrincipalId'
+    -> RemoveResourcePermission
+removeResourcePermission pResourceId_ pPrincipalId_ =
+  RemoveResourcePermission'
+  { _rrpPrincipalType = Nothing
+  , _rrpAuthenticationToken = Nothing
+  , _rrpResourceId = pResourceId_
+  , _rrpPrincipalId = pPrincipalId_
+  }
+
+
+-- | The principal type of the resource.
+rrpPrincipalType :: Lens' RemoveResourcePermission (Maybe PrincipalType)
+rrpPrincipalType = lens _rrpPrincipalType (\ s a -> s{_rrpPrincipalType = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+rrpAuthenticationToken :: Lens' RemoveResourcePermission (Maybe Text)
+rrpAuthenticationToken = lens _rrpAuthenticationToken (\ s a -> s{_rrpAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The ID of the resource.
+rrpResourceId :: Lens' RemoveResourcePermission Text
+rrpResourceId = lens _rrpResourceId (\ s a -> s{_rrpResourceId = a});
+
+-- | The principal ID of the resource.
+rrpPrincipalId :: Lens' RemoveResourcePermission Text
+rrpPrincipalId = lens _rrpPrincipalId (\ s a -> s{_rrpPrincipalId = a});
+
+instance AWSRequest RemoveResourcePermission where
+        type Rs RemoveResourcePermission =
+             RemoveResourcePermissionResponse
+        request = delete workDocs
+        response
+          = receiveNull RemoveResourcePermissionResponse'
+
+instance Hashable RemoveResourcePermission where
+
+instance NFData RemoveResourcePermission where
+
+instance ToHeaders RemoveResourcePermission where
+        toHeaders RemoveResourcePermission'{..}
+          = mconcat
+              ["Authentication" =# _rrpAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath RemoveResourcePermission where
+        toPath RemoveResourcePermission'{..}
+          = mconcat
+              ["/api/v1/resources/", toBS _rrpResourceId,
+               "/permissions/", toBS _rrpPrincipalId]
+
+instance ToQuery RemoveResourcePermission where
+        toQuery RemoveResourcePermission'{..}
+          = mconcat ["type" =: _rrpPrincipalType]
+
+-- | /See:/ 'removeResourcePermissionResponse' smart constructor.
+data RemoveResourcePermissionResponse =
+  RemoveResourcePermissionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RemoveResourcePermissionResponse' with the minimum fields required to make a request.
+--
+removeResourcePermissionResponse
+    :: RemoveResourcePermissionResponse
+removeResourcePermissionResponse = RemoveResourcePermissionResponse'
+
+
+instance NFData RemoveResourcePermissionResponse
+         where
diff --git a/gen/Network/AWS/WorkDocs/Types.hs b/gen/Network/AWS/WorkDocs/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/Types.hs
@@ -0,0 +1,522 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.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.WorkDocs.Types
+    (
+    -- * Service Configuration
+      workDocs
+
+    -- * Errors
+    , _CustomMetadataLimitExceededException
+    , _EntityAlreadyExistsException
+    , _ResourceAlreadyCheckedOutException
+    , _ProhibitedStateException
+    , _TooManyLabelsException
+    , _InvalidArgumentException
+    , _UnauthorizedResourceAccessException
+    , _TooManySubscriptionsException
+    , _FailedDependencyException
+    , _DocumentLockedForCommentsException
+    , _EntityNotExistsException
+    , _DeactivatingLastSystemUserException
+    , _IllegalUserStateException
+    , _StorageLimitWillExceedException
+    , _ConcurrentModificationException
+    , _StorageLimitExceededException
+    , _ServiceUnavailableException
+    , _InvalidOperationException
+    , _UnauthorizedOperationException
+    , _DraftUploadOutOfSyncException
+    , _LimitExceededException
+
+    -- * ActivityType
+    , ActivityType (..)
+
+    -- * CommentStatusType
+    , CommentStatusType (..)
+
+    -- * CommentVisibilityType
+    , CommentVisibilityType (..)
+
+    -- * DocumentSourceType
+    , DocumentSourceType (..)
+
+    -- * DocumentStatusType
+    , DocumentStatusType (..)
+
+    -- * DocumentThumbnailType
+    , DocumentThumbnailType (..)
+
+    -- * DocumentVersionStatus
+    , DocumentVersionStatus (..)
+
+    -- * FolderContentType
+    , FolderContentType (..)
+
+    -- * LocaleType
+    , LocaleType (..)
+
+    -- * OrderType
+    , OrderType (..)
+
+    -- * PrincipalType
+    , PrincipalType (..)
+
+    -- * ResourceSortType
+    , ResourceSortType (..)
+
+    -- * ResourceStateType
+    , ResourceStateType (..)
+
+    -- * ResourceType
+    , ResourceType (..)
+
+    -- * RolePermissionType
+    , RolePermissionType (..)
+
+    -- * RoleType
+    , RoleType (..)
+
+    -- * ShareStatusType
+    , ShareStatusType (..)
+
+    -- * StorageType
+    , StorageType (..)
+
+    -- * SubscriptionProtocolType
+    , SubscriptionProtocolType (..)
+
+    -- * SubscriptionType
+    , SubscriptionType (..)
+
+    -- * UserFilterType
+    , UserFilterType (..)
+
+    -- * UserSortType
+    , UserSortType (..)
+
+    -- * UserStatusType
+    , UserStatusType (..)
+
+    -- * UserType
+    , UserType (..)
+
+    -- * Activity
+    , Activity
+    , activity
+    , aResourceMetadata
+    , aInitiator
+    , aParticipants
+    , aOriginalParent
+    , aType
+    , aCommentMetadata
+    , aTimeStamp
+    , aOrganizationId
+
+    -- * Comment
+    , Comment
+    , comment
+    , cStatus
+    , cText
+    , cVisibility
+    , cThreadId
+    , cContributor
+    , cCreatedTimestamp
+    , cRecipientId
+    , cParentId
+    , cCommentId
+
+    -- * CommentMetadata
+    , CommentMetadata
+    , commentMetadata
+    , cmCommentStatus
+    , cmContributor
+    , cmCommentId
+    , cmCreatedTimestamp
+    , cmRecipientId
+
+    -- * DocumentMetadata
+    , DocumentMetadata
+    , documentMetadata
+    , dmLatestVersionMetadata
+    , dmParentFolderId
+    , dmModifiedTimestamp
+    , dmId
+    , dmLabels
+    , dmResourceState
+    , dmCreatedTimestamp
+    , dmCreatorId
+
+    -- * DocumentVersionMetadata
+    , DocumentVersionMetadata
+    , documentVersionMetadata
+    , dvmThumbnail
+    , dvmStatus
+    , dvmSignature
+    , dvmContentCreatedTimestamp
+    , dvmSize
+    , dvmName
+    , dvmModifiedTimestamp
+    , dvmSource
+    , dvmId
+    , dvmCreatedTimestamp
+    , dvmContentModifiedTimestamp
+    , dvmCreatorId
+    , dvmContentType
+
+    -- * FolderMetadata
+    , FolderMetadata
+    , folderMetadata
+    , fmSignature
+    , fmParentFolderId
+    , fmSize
+    , fmLatestVersionSize
+    , fmName
+    , fmModifiedTimestamp
+    , fmId
+    , fmLabels
+    , fmResourceState
+    , fmCreatedTimestamp
+    , fmCreatorId
+
+    -- * GroupMetadata
+    , GroupMetadata
+    , groupMetadata
+    , gmName
+    , gmId
+
+    -- * Participants
+    , Participants
+    , participants
+    , pGroups
+    , pUsers
+
+    -- * PermissionInfo
+    , PermissionInfo
+    , permissionInfo
+    , piRole
+    , piType
+
+    -- * Principal
+    , Principal
+    , principal
+    , pRoles
+    , pId
+    , pType
+
+    -- * ResourceMetadata
+    , ResourceMetadata
+    , resourceMetadata
+    , rmVersionId
+    , rmOwner
+    , rmName
+    , rmId
+    , rmType
+    , rmOriginalName
+    , rmParentId
+
+    -- * ResourcePath
+    , ResourcePath
+    , resourcePath
+    , rpComponents
+
+    -- * ResourcePathComponent
+    , ResourcePathComponent
+    , resourcePathComponent
+    , rpcName
+    , rpcId
+
+    -- * SharePrincipal
+    , SharePrincipal
+    , sharePrincipal
+    , spId
+    , spType
+    , spRole
+
+    -- * ShareResult
+    , ShareResult
+    , shareResult
+    , srStatus
+    , srPrincipalId
+    , srRole
+    , srStatusMessage
+    , srShareId
+
+    -- * StorageRuleType
+    , StorageRuleType
+    , storageRuleType
+    , srtStorageAllocatedInBytes
+    , srtStorageType
+
+    -- * Subscription
+    , Subscription
+    , subscription
+    , sProtocol
+    , sEndPoint
+    , sSubscriptionId
+
+    -- * UploadMetadata
+    , UploadMetadata
+    , uploadMetadata
+    , umUploadURL
+    , umSignedHeaders
+
+    -- * User
+    , User
+    , user
+    , uGivenName
+    , uStatus
+    , uLocale
+    , uUsername
+    , uStorage
+    , uModifiedTimestamp
+    , uEmailAddress
+    , uId
+    , uRootFolderId
+    , uType
+    , uSurname
+    , uTimeZoneId
+    , uCreatedTimestamp
+    , uOrganizationId
+    , uRecycleBinFolderId
+
+    -- * UserMetadata
+    , UserMetadata
+    , userMetadata
+    , umGivenName
+    , umUsername
+    , umEmailAddress
+    , umId
+    , umSurname
+
+    -- * UserStorageMetadata
+    , UserStorageMetadata
+    , userStorageMetadata
+    , usmStorageUtilizedInBytes
+    , usmStorageRule
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
+import Network.AWS.WorkDocs.Types.Product
+import Network.AWS.WorkDocs.Types.Sum
+
+-- | API version @2016-05-01@ of the Amazon WorkDocs SDK configuration.
+workDocs :: Service
+workDocs =
+  Service
+  { _svcAbbrev = "WorkDocs"
+  , _svcSigner = v4
+  , _svcPrefix = "workdocs"
+  , _svcVersion = "2016-05-01"
+  , _svcEndpoint = defaultEndpoint workDocs
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseJSONError "WorkDocs"
+  , _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 limit has been reached on the number of custom properties for the specified resource.
+--
+--
+_CustomMetadataLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_CustomMetadataLimitExceededException =
+  _MatchServiceError workDocs "CustomMetadataLimitExceededException" .
+  hasStatus 429
+
+
+-- | The resource already exists.
+--
+--
+_EntityAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_EntityAlreadyExistsException =
+  _MatchServiceError workDocs "EntityAlreadyExistsException" . hasStatus 409
+
+
+-- | The resource is already checked out.
+--
+--
+_ResourceAlreadyCheckedOutException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceAlreadyCheckedOutException =
+  _MatchServiceError workDocs "ResourceAlreadyCheckedOutException" .
+  hasStatus 409
+
+
+-- | The specified document version is not in the INITIALIZED state.
+--
+--
+_ProhibitedStateException :: AsError a => Getting (First ServiceError) a ServiceError
+_ProhibitedStateException =
+  _MatchServiceError workDocs "ProhibitedStateException" . hasStatus 409
+
+
+-- | The limit has been reached on the number of labels for the specified resource.
+--
+--
+_TooManyLabelsException :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyLabelsException =
+  _MatchServiceError workDocs "TooManyLabelsException" . hasStatus 429
+
+
+-- | The pagination marker and/or limit fields are not valid.
+--
+--
+_InvalidArgumentException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidArgumentException =
+  _MatchServiceError workDocs "InvalidArgumentException" . hasStatus 400
+
+
+-- | The caller does not have access to perform the action on the resource.
+--
+--
+_UnauthorizedResourceAccessException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnauthorizedResourceAccessException =
+  _MatchServiceError workDocs "UnauthorizedResourceAccessException" .
+  hasStatus 404
+
+
+-- | You've reached the limit on the number of subscriptions for the WorkDocs instance.
+--
+--
+_TooManySubscriptionsException :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManySubscriptionsException =
+  _MatchServiceError workDocs "TooManySubscriptionsException" . hasStatus 429
+
+
+-- | The AWS Directory Service cannot reach an on-premises instance. Or a dependency under the control of the organization is failing, such as a connected active directory.
+--
+--
+_FailedDependencyException :: AsError a => Getting (First ServiceError) a ServiceError
+_FailedDependencyException =
+  _MatchServiceError workDocs "FailedDependencyException" . hasStatus 424
+
+
+-- | This exception is thrown when the document is locked for comments and user tries to create or delete a comment on that document.
+--
+--
+_DocumentLockedForCommentsException :: AsError a => Getting (First ServiceError) a ServiceError
+_DocumentLockedForCommentsException =
+  _MatchServiceError workDocs "DocumentLockedForCommentsException" .
+  hasStatus 409
+
+
+-- | The resource does not exist.
+--
+--
+_EntityNotExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_EntityNotExistsException =
+  _MatchServiceError workDocs "EntityNotExistsException" . hasStatus 404
+
+
+-- | The last user in the organization is being deactivated.
+--
+--
+_DeactivatingLastSystemUserException :: AsError a => Getting (First ServiceError) a ServiceError
+_DeactivatingLastSystemUserException =
+  _MatchServiceError workDocs "DeactivatingLastSystemUserException" .
+  hasStatus 409
+
+
+-- | The user is undergoing transfer of ownership.
+--
+--
+_IllegalUserStateException :: AsError a => Getting (First ServiceError) a ServiceError
+_IllegalUserStateException =
+  _MatchServiceError workDocs "IllegalUserStateException" . hasStatus 409
+
+
+-- | The storage limit will be exceeded.
+--
+--
+_StorageLimitWillExceedException :: AsError a => Getting (First ServiceError) a ServiceError
+_StorageLimitWillExceedException =
+  _MatchServiceError workDocs "StorageLimitWillExceedException" . hasStatus 413
+
+
+-- | The resource hierarchy is changing.
+--
+--
+_ConcurrentModificationException :: AsError a => Getting (First ServiceError) a ServiceError
+_ConcurrentModificationException =
+  _MatchServiceError workDocs "ConcurrentModificationException" . hasStatus 409
+
+
+-- | The storage limit has been exceeded.
+--
+--
+_StorageLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_StorageLimitExceededException =
+  _MatchServiceError workDocs "StorageLimitExceededException" . hasStatus 409
+
+
+-- | One or more of the dependencies is unavailable.
+--
+--
+_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
+_ServiceUnavailableException =
+  _MatchServiceError workDocs "ServiceUnavailableException" . hasStatus 503
+
+
+-- | The operation is invalid.
+--
+--
+_InvalidOperationException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidOperationException =
+  _MatchServiceError workDocs "InvalidOperationException" . hasStatus 405
+
+
+-- | The operation is not permitted.
+--
+--
+_UnauthorizedOperationException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnauthorizedOperationException =
+  _MatchServiceError workDocs "UnauthorizedOperationException" . hasStatus 403
+
+
+-- | This exception is thrown when a valid checkout ID is not presented on document version upload calls for a document that has been checked out from Web client.
+--
+--
+_DraftUploadOutOfSyncException :: AsError a => Getting (First ServiceError) a ServiceError
+_DraftUploadOutOfSyncException =
+  _MatchServiceError workDocs "DraftUploadOutOfSyncException" . hasStatus 409
+
+
+-- | The maximum of 100,000 folders under the parent folder has been exceeded.
+--
+--
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException =
+  _MatchServiceError workDocs "LimitExceededException" . hasStatus 409
+
diff --git a/gen/Network/AWS/WorkDocs/Types/Product.hs b/gen/Network/AWS/WorkDocs/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/Types/Product.hs
@@ -0,0 +1,1578 @@
+{-# 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.WorkDocs.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.WorkDocs.Types.Product where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.WorkDocs.Types.Sum
+
+-- | Describes the activity information.
+--
+--
+--
+-- /See:/ 'activity' smart constructor.
+data Activity = Activity'
+  { _aResourceMetadata :: !(Maybe ResourceMetadata)
+  , _aInitiator        :: !(Maybe UserMetadata)
+  , _aParticipants     :: !(Maybe Participants)
+  , _aOriginalParent   :: !(Maybe ResourceMetadata)
+  , _aType             :: !(Maybe ActivityType)
+  , _aCommentMetadata  :: !(Maybe CommentMetadata)
+  , _aTimeStamp        :: !(Maybe POSIX)
+  , _aOrganizationId   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Activity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aResourceMetadata' - The metadata of the resource involved in the user action.
+--
+-- * 'aInitiator' - The user who performed the action.
+--
+-- * 'aParticipants' - The list of users or groups impacted by this action. This is an optional field and is filled for the following sharing activities: DOCUMENT_SHARED, DOCUMENT_SHARED, DOCUMENT_UNSHARED, FOLDER_SHARED, FOLDER_UNSHARED.
+--
+-- * 'aOriginalParent' - The original parent of the resource. This is an optional field and is filled for move activities.
+--
+-- * 'aType' - The activity type.
+--
+-- * 'aCommentMetadata' - Metadata of the commenting activity. This is an optional field and is filled for commenting activities.
+--
+-- * 'aTimeStamp' - The timestamp when the action was performed.
+--
+-- * 'aOrganizationId' - The ID of the organization.
+activity
+    :: Activity
+activity =
+  Activity'
+  { _aResourceMetadata = Nothing
+  , _aInitiator = Nothing
+  , _aParticipants = Nothing
+  , _aOriginalParent = Nothing
+  , _aType = Nothing
+  , _aCommentMetadata = Nothing
+  , _aTimeStamp = Nothing
+  , _aOrganizationId = Nothing
+  }
+
+
+-- | The metadata of the resource involved in the user action.
+aResourceMetadata :: Lens' Activity (Maybe ResourceMetadata)
+aResourceMetadata = lens _aResourceMetadata (\ s a -> s{_aResourceMetadata = a});
+
+-- | The user who performed the action.
+aInitiator :: Lens' Activity (Maybe UserMetadata)
+aInitiator = lens _aInitiator (\ s a -> s{_aInitiator = a});
+
+-- | The list of users or groups impacted by this action. This is an optional field and is filled for the following sharing activities: DOCUMENT_SHARED, DOCUMENT_SHARED, DOCUMENT_UNSHARED, FOLDER_SHARED, FOLDER_UNSHARED.
+aParticipants :: Lens' Activity (Maybe Participants)
+aParticipants = lens _aParticipants (\ s a -> s{_aParticipants = a});
+
+-- | The original parent of the resource. This is an optional field and is filled for move activities.
+aOriginalParent :: Lens' Activity (Maybe ResourceMetadata)
+aOriginalParent = lens _aOriginalParent (\ s a -> s{_aOriginalParent = a});
+
+-- | The activity type.
+aType :: Lens' Activity (Maybe ActivityType)
+aType = lens _aType (\ s a -> s{_aType = a});
+
+-- | Metadata of the commenting activity. This is an optional field and is filled for commenting activities.
+aCommentMetadata :: Lens' Activity (Maybe CommentMetadata)
+aCommentMetadata = lens _aCommentMetadata (\ s a -> s{_aCommentMetadata = a});
+
+-- | The timestamp when the action was performed.
+aTimeStamp :: Lens' Activity (Maybe UTCTime)
+aTimeStamp = lens _aTimeStamp (\ s a -> s{_aTimeStamp = a}) . mapping _Time;
+
+-- | The ID of the organization.
+aOrganizationId :: Lens' Activity (Maybe Text)
+aOrganizationId = lens _aOrganizationId (\ s a -> s{_aOrganizationId = a});
+
+instance FromJSON Activity where
+        parseJSON
+          = withObject "Activity"
+              (\ x ->
+                 Activity' <$>
+                   (x .:? "ResourceMetadata") <*> (x .:? "Initiator")
+                     <*> (x .:? "Participants")
+                     <*> (x .:? "OriginalParent")
+                     <*> (x .:? "Type")
+                     <*> (x .:? "CommentMetadata")
+                     <*> (x .:? "TimeStamp")
+                     <*> (x .:? "OrganizationId"))
+
+instance Hashable Activity where
+
+instance NFData Activity where
+
+-- | Describes a comment.
+--
+--
+--
+-- /See:/ 'comment' smart constructor.
+data Comment = Comment'
+  { _cStatus           :: !(Maybe CommentStatusType)
+  , _cText             :: !(Maybe (Sensitive Text))
+  , _cVisibility       :: !(Maybe CommentVisibilityType)
+  , _cThreadId         :: !(Maybe Text)
+  , _cContributor      :: !(Maybe User)
+  , _cCreatedTimestamp :: !(Maybe POSIX)
+  , _cRecipientId      :: !(Maybe Text)
+  , _cParentId         :: !(Maybe Text)
+  , _cCommentId        :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Comment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cStatus' - The status of the comment.
+--
+-- * 'cText' - The text of the comment.
+--
+-- * 'cVisibility' - The visibility of the comment. Options are either PRIVATE, where the comment is visible only to the comment author and document owner and co-owners, or PUBLIC, where the comment is visible to document owners, co-owners, and contributors.
+--
+-- * 'cThreadId' - The ID of the root comment in the thread.
+--
+-- * 'cContributor' - The details of the user who made the comment.
+--
+-- * 'cCreatedTimestamp' - The time that the comment was created.
+--
+-- * 'cRecipientId' - If the comment is a reply to another user's comment, this field contains the user ID of the user being replied to.
+--
+-- * 'cParentId' - The ID of the parent comment.
+--
+-- * 'cCommentId' - The ID of the comment.
+comment
+    :: Text -- ^ 'cCommentId'
+    -> Comment
+comment pCommentId_ =
+  Comment'
+  { _cStatus = Nothing
+  , _cText = Nothing
+  , _cVisibility = Nothing
+  , _cThreadId = Nothing
+  , _cContributor = Nothing
+  , _cCreatedTimestamp = Nothing
+  , _cRecipientId = Nothing
+  , _cParentId = Nothing
+  , _cCommentId = pCommentId_
+  }
+
+
+-- | The status of the comment.
+cStatus :: Lens' Comment (Maybe CommentStatusType)
+cStatus = lens _cStatus (\ s a -> s{_cStatus = a});
+
+-- | The text of the comment.
+cText :: Lens' Comment (Maybe Text)
+cText = lens _cText (\ s a -> s{_cText = a}) . mapping _Sensitive;
+
+-- | The visibility of the comment. Options are either PRIVATE, where the comment is visible only to the comment author and document owner and co-owners, or PUBLIC, where the comment is visible to document owners, co-owners, and contributors.
+cVisibility :: Lens' Comment (Maybe CommentVisibilityType)
+cVisibility = lens _cVisibility (\ s a -> s{_cVisibility = a});
+
+-- | The ID of the root comment in the thread.
+cThreadId :: Lens' Comment (Maybe Text)
+cThreadId = lens _cThreadId (\ s a -> s{_cThreadId = a});
+
+-- | The details of the user who made the comment.
+cContributor :: Lens' Comment (Maybe User)
+cContributor = lens _cContributor (\ s a -> s{_cContributor = a});
+
+-- | The time that the comment was created.
+cCreatedTimestamp :: Lens' Comment (Maybe UTCTime)
+cCreatedTimestamp = lens _cCreatedTimestamp (\ s a -> s{_cCreatedTimestamp = a}) . mapping _Time;
+
+-- | If the comment is a reply to another user's comment, this field contains the user ID of the user being replied to.
+cRecipientId :: Lens' Comment (Maybe Text)
+cRecipientId = lens _cRecipientId (\ s a -> s{_cRecipientId = a});
+
+-- | The ID of the parent comment.
+cParentId :: Lens' Comment (Maybe Text)
+cParentId = lens _cParentId (\ s a -> s{_cParentId = a});
+
+-- | The ID of the comment.
+cCommentId :: Lens' Comment Text
+cCommentId = lens _cCommentId (\ s a -> s{_cCommentId = a});
+
+instance FromJSON Comment where
+        parseJSON
+          = withObject "Comment"
+              (\ x ->
+                 Comment' <$>
+                   (x .:? "Status") <*> (x .:? "Text") <*>
+                     (x .:? "Visibility")
+                     <*> (x .:? "ThreadId")
+                     <*> (x .:? "Contributor")
+                     <*> (x .:? "CreatedTimestamp")
+                     <*> (x .:? "RecipientId")
+                     <*> (x .:? "ParentId")
+                     <*> (x .: "CommentId"))
+
+instance Hashable Comment where
+
+instance NFData Comment where
+
+-- | Describes the metadata of a comment.
+--
+--
+--
+-- /See:/ 'commentMetadata' smart constructor.
+data CommentMetadata = CommentMetadata'
+  { _cmCommentStatus    :: !(Maybe CommentStatusType)
+  , _cmContributor      :: !(Maybe User)
+  , _cmCommentId        :: !(Maybe Text)
+  , _cmCreatedTimestamp :: !(Maybe POSIX)
+  , _cmRecipientId      :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CommentMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmCommentStatus' - Undocumented member.
+--
+-- * 'cmContributor' - The user who made the comment.
+--
+-- * 'cmCommentId' - The ID of the comment.
+--
+-- * 'cmCreatedTimestamp' - Undocumented member.
+--
+-- * 'cmRecipientId' - The ID of the user being replied to.
+commentMetadata
+    :: CommentMetadata
+commentMetadata =
+  CommentMetadata'
+  { _cmCommentStatus = Nothing
+  , _cmContributor = Nothing
+  , _cmCommentId = Nothing
+  , _cmCreatedTimestamp = Nothing
+  , _cmRecipientId = Nothing
+  }
+
+
+-- | Undocumented member.
+cmCommentStatus :: Lens' CommentMetadata (Maybe CommentStatusType)
+cmCommentStatus = lens _cmCommentStatus (\ s a -> s{_cmCommentStatus = a});
+
+-- | The user who made the comment.
+cmContributor :: Lens' CommentMetadata (Maybe User)
+cmContributor = lens _cmContributor (\ s a -> s{_cmContributor = a});
+
+-- | The ID of the comment.
+cmCommentId :: Lens' CommentMetadata (Maybe Text)
+cmCommentId = lens _cmCommentId (\ s a -> s{_cmCommentId = a});
+
+-- | Undocumented member.
+cmCreatedTimestamp :: Lens' CommentMetadata (Maybe UTCTime)
+cmCreatedTimestamp = lens _cmCreatedTimestamp (\ s a -> s{_cmCreatedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the user being replied to.
+cmRecipientId :: Lens' CommentMetadata (Maybe Text)
+cmRecipientId = lens _cmRecipientId (\ s a -> s{_cmRecipientId = a});
+
+instance FromJSON CommentMetadata where
+        parseJSON
+          = withObject "CommentMetadata"
+              (\ x ->
+                 CommentMetadata' <$>
+                   (x .:? "CommentStatus") <*> (x .:? "Contributor") <*>
+                     (x .:? "CommentId")
+                     <*> (x .:? "CreatedTimestamp")
+                     <*> (x .:? "RecipientId"))
+
+instance Hashable CommentMetadata where
+
+instance NFData CommentMetadata where
+
+-- | Describes the document.
+--
+--
+--
+-- /See:/ 'documentMetadata' smart constructor.
+data DocumentMetadata = DocumentMetadata'
+  { _dmLatestVersionMetadata :: !(Maybe DocumentVersionMetadata)
+  , _dmParentFolderId        :: !(Maybe Text)
+  , _dmModifiedTimestamp     :: !(Maybe POSIX)
+  , _dmId                    :: !(Maybe Text)
+  , _dmLabels                :: !(Maybe [Text])
+  , _dmResourceState         :: !(Maybe ResourceStateType)
+  , _dmCreatedTimestamp      :: !(Maybe POSIX)
+  , _dmCreatorId             :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DocumentMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmLatestVersionMetadata' - The latest version of the document.
+--
+-- * 'dmParentFolderId' - The ID of the parent folder.
+--
+-- * 'dmModifiedTimestamp' - The time when the document was updated.
+--
+-- * 'dmId' - The ID of the document.
+--
+-- * 'dmLabels' - List of labels on the document.
+--
+-- * 'dmResourceState' - The resource state.
+--
+-- * 'dmCreatedTimestamp' - The time when the document was created.
+--
+-- * 'dmCreatorId' - The ID of the creator.
+documentMetadata
+    :: DocumentMetadata
+documentMetadata =
+  DocumentMetadata'
+  { _dmLatestVersionMetadata = Nothing
+  , _dmParentFolderId = Nothing
+  , _dmModifiedTimestamp = Nothing
+  , _dmId = Nothing
+  , _dmLabels = Nothing
+  , _dmResourceState = Nothing
+  , _dmCreatedTimestamp = Nothing
+  , _dmCreatorId = Nothing
+  }
+
+
+-- | The latest version of the document.
+dmLatestVersionMetadata :: Lens' DocumentMetadata (Maybe DocumentVersionMetadata)
+dmLatestVersionMetadata = lens _dmLatestVersionMetadata (\ s a -> s{_dmLatestVersionMetadata = a});
+
+-- | The ID of the parent folder.
+dmParentFolderId :: Lens' DocumentMetadata (Maybe Text)
+dmParentFolderId = lens _dmParentFolderId (\ s a -> s{_dmParentFolderId = a});
+
+-- | The time when the document was updated.
+dmModifiedTimestamp :: Lens' DocumentMetadata (Maybe UTCTime)
+dmModifiedTimestamp = lens _dmModifiedTimestamp (\ s a -> s{_dmModifiedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the document.
+dmId :: Lens' DocumentMetadata (Maybe Text)
+dmId = lens _dmId (\ s a -> s{_dmId = a});
+
+-- | List of labels on the document.
+dmLabels :: Lens' DocumentMetadata [Text]
+dmLabels = lens _dmLabels (\ s a -> s{_dmLabels = a}) . _Default . _Coerce;
+
+-- | The resource state.
+dmResourceState :: Lens' DocumentMetadata (Maybe ResourceStateType)
+dmResourceState = lens _dmResourceState (\ s a -> s{_dmResourceState = a});
+
+-- | The time when the document was created.
+dmCreatedTimestamp :: Lens' DocumentMetadata (Maybe UTCTime)
+dmCreatedTimestamp = lens _dmCreatedTimestamp (\ s a -> s{_dmCreatedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the creator.
+dmCreatorId :: Lens' DocumentMetadata (Maybe Text)
+dmCreatorId = lens _dmCreatorId (\ s a -> s{_dmCreatorId = a});
+
+instance FromJSON DocumentMetadata where
+        parseJSON
+          = withObject "DocumentMetadata"
+              (\ x ->
+                 DocumentMetadata' <$>
+                   (x .:? "LatestVersionMetadata") <*>
+                     (x .:? "ParentFolderId")
+                     <*> (x .:? "ModifiedTimestamp")
+                     <*> (x .:? "Id")
+                     <*> (x .:? "Labels" .!= mempty)
+                     <*> (x .:? "ResourceState")
+                     <*> (x .:? "CreatedTimestamp")
+                     <*> (x .:? "CreatorId"))
+
+instance Hashable DocumentMetadata where
+
+instance NFData DocumentMetadata where
+
+-- | Describes a version of a document.
+--
+--
+--
+-- /See:/ 'documentVersionMetadata' smart constructor.
+data DocumentVersionMetadata = DocumentVersionMetadata'
+  { _dvmThumbnail :: !(Maybe (Map DocumentThumbnailType (Sensitive Text)))
+  , _dvmStatus :: !(Maybe DocumentStatusType)
+  , _dvmSignature :: !(Maybe Text)
+  , _dvmContentCreatedTimestamp :: !(Maybe POSIX)
+  , _dvmSize :: !(Maybe Integer)
+  , _dvmName :: !(Maybe Text)
+  , _dvmModifiedTimestamp :: !(Maybe POSIX)
+  , _dvmSource :: !(Maybe (Map DocumentSourceType (Sensitive Text)))
+  , _dvmId :: !(Maybe Text)
+  , _dvmCreatedTimestamp :: !(Maybe POSIX)
+  , _dvmContentModifiedTimestamp :: !(Maybe POSIX)
+  , _dvmCreatorId :: !(Maybe Text)
+  , _dvmContentType :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DocumentVersionMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvmThumbnail' - The thumbnail of the document.
+--
+-- * 'dvmStatus' - The status of the document.
+--
+-- * 'dvmSignature' - The signature of the document.
+--
+-- * 'dvmContentCreatedTimestamp' - The time stamp when the content of the document was originally created.
+--
+-- * 'dvmSize' - The size of the document, in bytes.
+--
+-- * 'dvmName' - The name of the version.
+--
+-- * 'dvmModifiedTimestamp' - The time stamp when the document was last uploaded.
+--
+-- * 'dvmSource' - The source of the document.
+--
+-- * 'dvmId' - The ID of the version.
+--
+-- * 'dvmCreatedTimestamp' - The time stamp when the document was first uploaded.
+--
+-- * 'dvmContentModifiedTimestamp' - The time stamp when the content of the document was modified.
+--
+-- * 'dvmCreatorId' - The ID of the creator.
+--
+-- * 'dvmContentType' - The content type of the document.
+documentVersionMetadata
+    :: DocumentVersionMetadata
+documentVersionMetadata =
+  DocumentVersionMetadata'
+  { _dvmThumbnail = Nothing
+  , _dvmStatus = Nothing
+  , _dvmSignature = Nothing
+  , _dvmContentCreatedTimestamp = Nothing
+  , _dvmSize = Nothing
+  , _dvmName = Nothing
+  , _dvmModifiedTimestamp = Nothing
+  , _dvmSource = Nothing
+  , _dvmId = Nothing
+  , _dvmCreatedTimestamp = Nothing
+  , _dvmContentModifiedTimestamp = Nothing
+  , _dvmCreatorId = Nothing
+  , _dvmContentType = Nothing
+  }
+
+
+-- | The thumbnail of the document.
+dvmThumbnail :: Lens' DocumentVersionMetadata (HashMap DocumentThumbnailType Text)
+dvmThumbnail = lens _dvmThumbnail (\ s a -> s{_dvmThumbnail = a}) . _Default . _Map;
+
+-- | The status of the document.
+dvmStatus :: Lens' DocumentVersionMetadata (Maybe DocumentStatusType)
+dvmStatus = lens _dvmStatus (\ s a -> s{_dvmStatus = a});
+
+-- | The signature of the document.
+dvmSignature :: Lens' DocumentVersionMetadata (Maybe Text)
+dvmSignature = lens _dvmSignature (\ s a -> s{_dvmSignature = a});
+
+-- | The time stamp when the content of the document was originally created.
+dvmContentCreatedTimestamp :: Lens' DocumentVersionMetadata (Maybe UTCTime)
+dvmContentCreatedTimestamp = lens _dvmContentCreatedTimestamp (\ s a -> s{_dvmContentCreatedTimestamp = a}) . mapping _Time;
+
+-- | The size of the document, in bytes.
+dvmSize :: Lens' DocumentVersionMetadata (Maybe Integer)
+dvmSize = lens _dvmSize (\ s a -> s{_dvmSize = a});
+
+-- | The name of the version.
+dvmName :: Lens' DocumentVersionMetadata (Maybe Text)
+dvmName = lens _dvmName (\ s a -> s{_dvmName = a});
+
+-- | The time stamp when the document was last uploaded.
+dvmModifiedTimestamp :: Lens' DocumentVersionMetadata (Maybe UTCTime)
+dvmModifiedTimestamp = lens _dvmModifiedTimestamp (\ s a -> s{_dvmModifiedTimestamp = a}) . mapping _Time;
+
+-- | The source of the document.
+dvmSource :: Lens' DocumentVersionMetadata (HashMap DocumentSourceType Text)
+dvmSource = lens _dvmSource (\ s a -> s{_dvmSource = a}) . _Default . _Map;
+
+-- | The ID of the version.
+dvmId :: Lens' DocumentVersionMetadata (Maybe Text)
+dvmId = lens _dvmId (\ s a -> s{_dvmId = a});
+
+-- | The time stamp when the document was first uploaded.
+dvmCreatedTimestamp :: Lens' DocumentVersionMetadata (Maybe UTCTime)
+dvmCreatedTimestamp = lens _dvmCreatedTimestamp (\ s a -> s{_dvmCreatedTimestamp = a}) . mapping _Time;
+
+-- | The time stamp when the content of the document was modified.
+dvmContentModifiedTimestamp :: Lens' DocumentVersionMetadata (Maybe UTCTime)
+dvmContentModifiedTimestamp = lens _dvmContentModifiedTimestamp (\ s a -> s{_dvmContentModifiedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the creator.
+dvmCreatorId :: Lens' DocumentVersionMetadata (Maybe Text)
+dvmCreatorId = lens _dvmCreatorId (\ s a -> s{_dvmCreatorId = a});
+
+-- | The content type of the document.
+dvmContentType :: Lens' DocumentVersionMetadata (Maybe Text)
+dvmContentType = lens _dvmContentType (\ s a -> s{_dvmContentType = a});
+
+instance FromJSON DocumentVersionMetadata where
+        parseJSON
+          = withObject "DocumentVersionMetadata"
+              (\ x ->
+                 DocumentVersionMetadata' <$>
+                   (x .:? "Thumbnail" .!= mempty) <*> (x .:? "Status")
+                     <*> (x .:? "Signature")
+                     <*> (x .:? "ContentCreatedTimestamp")
+                     <*> (x .:? "Size")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "ModifiedTimestamp")
+                     <*> (x .:? "Source" .!= mempty)
+                     <*> (x .:? "Id")
+                     <*> (x .:? "CreatedTimestamp")
+                     <*> (x .:? "ContentModifiedTimestamp")
+                     <*> (x .:? "CreatorId")
+                     <*> (x .:? "ContentType"))
+
+instance Hashable DocumentVersionMetadata where
+
+instance NFData DocumentVersionMetadata where
+
+-- | Describes a folder.
+--
+--
+--
+-- /See:/ 'folderMetadata' smart constructor.
+data FolderMetadata = FolderMetadata'
+  { _fmSignature         :: !(Maybe Text)
+  , _fmParentFolderId    :: !(Maybe Text)
+  , _fmSize              :: !(Maybe Integer)
+  , _fmLatestVersionSize :: !(Maybe Integer)
+  , _fmName              :: !(Maybe Text)
+  , _fmModifiedTimestamp :: !(Maybe POSIX)
+  , _fmId                :: !(Maybe Text)
+  , _fmLabels            :: !(Maybe [Text])
+  , _fmResourceState     :: !(Maybe ResourceStateType)
+  , _fmCreatedTimestamp  :: !(Maybe POSIX)
+  , _fmCreatorId         :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'FolderMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fmSignature' - The unique identifier created from the subfolders and documents of the folder.
+--
+-- * 'fmParentFolderId' - The ID of the parent folder.
+--
+-- * 'fmSize' - The size of the folder metadata.
+--
+-- * 'fmLatestVersionSize' - The size of the latest version of the folder metadata.
+--
+-- * 'fmName' - The name of the folder.
+--
+-- * 'fmModifiedTimestamp' - The time when the folder was updated.
+--
+-- * 'fmId' - The ID of the folder.
+--
+-- * 'fmLabels' - List of labels on the folder.
+--
+-- * 'fmResourceState' - The resource state of the folder.
+--
+-- * 'fmCreatedTimestamp' - The time when the folder was created.
+--
+-- * 'fmCreatorId' - The ID of the creator.
+folderMetadata
+    :: FolderMetadata
+folderMetadata =
+  FolderMetadata'
+  { _fmSignature = Nothing
+  , _fmParentFolderId = Nothing
+  , _fmSize = Nothing
+  , _fmLatestVersionSize = Nothing
+  , _fmName = Nothing
+  , _fmModifiedTimestamp = Nothing
+  , _fmId = Nothing
+  , _fmLabels = Nothing
+  , _fmResourceState = Nothing
+  , _fmCreatedTimestamp = Nothing
+  , _fmCreatorId = Nothing
+  }
+
+
+-- | The unique identifier created from the subfolders and documents of the folder.
+fmSignature :: Lens' FolderMetadata (Maybe Text)
+fmSignature = lens _fmSignature (\ s a -> s{_fmSignature = a});
+
+-- | The ID of the parent folder.
+fmParentFolderId :: Lens' FolderMetadata (Maybe Text)
+fmParentFolderId = lens _fmParentFolderId (\ s a -> s{_fmParentFolderId = a});
+
+-- | The size of the folder metadata.
+fmSize :: Lens' FolderMetadata (Maybe Integer)
+fmSize = lens _fmSize (\ s a -> s{_fmSize = a});
+
+-- | The size of the latest version of the folder metadata.
+fmLatestVersionSize :: Lens' FolderMetadata (Maybe Integer)
+fmLatestVersionSize = lens _fmLatestVersionSize (\ s a -> s{_fmLatestVersionSize = a});
+
+-- | The name of the folder.
+fmName :: Lens' FolderMetadata (Maybe Text)
+fmName = lens _fmName (\ s a -> s{_fmName = a});
+
+-- | The time when the folder was updated.
+fmModifiedTimestamp :: Lens' FolderMetadata (Maybe UTCTime)
+fmModifiedTimestamp = lens _fmModifiedTimestamp (\ s a -> s{_fmModifiedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the folder.
+fmId :: Lens' FolderMetadata (Maybe Text)
+fmId = lens _fmId (\ s a -> s{_fmId = a});
+
+-- | List of labels on the folder.
+fmLabels :: Lens' FolderMetadata [Text]
+fmLabels = lens _fmLabels (\ s a -> s{_fmLabels = a}) . _Default . _Coerce;
+
+-- | The resource state of the folder.
+fmResourceState :: Lens' FolderMetadata (Maybe ResourceStateType)
+fmResourceState = lens _fmResourceState (\ s a -> s{_fmResourceState = a});
+
+-- | The time when the folder was created.
+fmCreatedTimestamp :: Lens' FolderMetadata (Maybe UTCTime)
+fmCreatedTimestamp = lens _fmCreatedTimestamp (\ s a -> s{_fmCreatedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the creator.
+fmCreatorId :: Lens' FolderMetadata (Maybe Text)
+fmCreatorId = lens _fmCreatorId (\ s a -> s{_fmCreatorId = a});
+
+instance FromJSON FolderMetadata where
+        parseJSON
+          = withObject "FolderMetadata"
+              (\ x ->
+                 FolderMetadata' <$>
+                   (x .:? "Signature") <*> (x .:? "ParentFolderId") <*>
+                     (x .:? "Size")
+                     <*> (x .:? "LatestVersionSize")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "ModifiedTimestamp")
+                     <*> (x .:? "Id")
+                     <*> (x .:? "Labels" .!= mempty)
+                     <*> (x .:? "ResourceState")
+                     <*> (x .:? "CreatedTimestamp")
+                     <*> (x .:? "CreatorId"))
+
+instance Hashable FolderMetadata where
+
+instance NFData FolderMetadata where
+
+-- | Describes the metadata of a user group.
+--
+--
+--
+-- /See:/ 'groupMetadata' smart constructor.
+data GroupMetadata = GroupMetadata'
+  { _gmName :: !(Maybe Text)
+  , _gmId   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GroupMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gmName' - The name of the group.
+--
+-- * 'gmId' - The ID of the user group.
+groupMetadata
+    :: GroupMetadata
+groupMetadata = GroupMetadata' {_gmName = Nothing, _gmId = Nothing}
+
+
+-- | The name of the group.
+gmName :: Lens' GroupMetadata (Maybe Text)
+gmName = lens _gmName (\ s a -> s{_gmName = a});
+
+-- | The ID of the user group.
+gmId :: Lens' GroupMetadata (Maybe Text)
+gmId = lens _gmId (\ s a -> s{_gmId = a});
+
+instance FromJSON GroupMetadata where
+        parseJSON
+          = withObject "GroupMetadata"
+              (\ x ->
+                 GroupMetadata' <$> (x .:? "Name") <*> (x .:? "Id"))
+
+instance Hashable GroupMetadata where
+
+instance NFData GroupMetadata where
+
+-- | Describes the users and/or user groups.
+--
+--
+--
+-- /See:/ 'participants' smart constructor.
+data Participants = Participants'
+  { _pGroups :: !(Maybe [GroupMetadata])
+  , _pUsers  :: !(Maybe [UserMetadata])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Participants' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pGroups' - The list of user groups.
+--
+-- * 'pUsers' - The list of users.
+participants
+    :: Participants
+participants = Participants' {_pGroups = Nothing, _pUsers = Nothing}
+
+
+-- | The list of user groups.
+pGroups :: Lens' Participants [GroupMetadata]
+pGroups = lens _pGroups (\ s a -> s{_pGroups = a}) . _Default . _Coerce;
+
+-- | The list of users.
+pUsers :: Lens' Participants [UserMetadata]
+pUsers = lens _pUsers (\ s a -> s{_pUsers = a}) . _Default . _Coerce;
+
+instance FromJSON Participants where
+        parseJSON
+          = withObject "Participants"
+              (\ x ->
+                 Participants' <$>
+                   (x .:? "Groups" .!= mempty) <*>
+                     (x .:? "Users" .!= mempty))
+
+instance Hashable Participants where
+
+instance NFData Participants where
+
+-- | Describes the permissions.
+--
+--
+--
+-- /See:/ 'permissionInfo' smart constructor.
+data PermissionInfo = PermissionInfo'
+  { _piRole :: !(Maybe RoleType)
+  , _piType :: !(Maybe RolePermissionType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PermissionInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piRole' - The role of the user.
+--
+-- * 'piType' - The type of permissions.
+permissionInfo
+    :: PermissionInfo
+permissionInfo = PermissionInfo' {_piRole = Nothing, _piType = Nothing}
+
+
+-- | The role of the user.
+piRole :: Lens' PermissionInfo (Maybe RoleType)
+piRole = lens _piRole (\ s a -> s{_piRole = a});
+
+-- | The type of permissions.
+piType :: Lens' PermissionInfo (Maybe RolePermissionType)
+piType = lens _piType (\ s a -> s{_piType = a});
+
+instance FromJSON PermissionInfo where
+        parseJSON
+          = withObject "PermissionInfo"
+              (\ x ->
+                 PermissionInfo' <$>
+                   (x .:? "Role") <*> (x .:? "Type"))
+
+instance Hashable PermissionInfo where
+
+instance NFData PermissionInfo where
+
+-- | Describes a resource.
+--
+--
+--
+-- /See:/ 'principal' smart constructor.
+data Principal = Principal'
+  { _pRoles :: !(Maybe [PermissionInfo])
+  , _pId    :: !(Maybe Text)
+  , _pType  :: !(Maybe PrincipalType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Principal' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pRoles' - The permission information for the resource.
+--
+-- * 'pId' - The ID of the resource.
+--
+-- * 'pType' - The type of resource.
+principal
+    :: Principal
+principal = Principal' {_pRoles = Nothing, _pId = Nothing, _pType = Nothing}
+
+
+-- | The permission information for the resource.
+pRoles :: Lens' Principal [PermissionInfo]
+pRoles = lens _pRoles (\ s a -> s{_pRoles = a}) . _Default . _Coerce;
+
+-- | The ID of the resource.
+pId :: Lens' Principal (Maybe Text)
+pId = lens _pId (\ s a -> s{_pId = a});
+
+-- | The type of resource.
+pType :: Lens' Principal (Maybe PrincipalType)
+pType = lens _pType (\ s a -> s{_pType = a});
+
+instance FromJSON Principal where
+        parseJSON
+          = withObject "Principal"
+              (\ x ->
+                 Principal' <$>
+                   (x .:? "Roles" .!= mempty) <*> (x .:? "Id") <*>
+                     (x .:? "Type"))
+
+instance Hashable Principal where
+
+instance NFData Principal where
+
+-- | Describes the metadata of a resource.
+--
+--
+--
+-- /See:/ 'resourceMetadata' smart constructor.
+data ResourceMetadata = ResourceMetadata'
+  { _rmVersionId    :: !(Maybe Text)
+  , _rmOwner        :: !(Maybe UserMetadata)
+  , _rmName         :: !(Maybe Text)
+  , _rmId           :: !(Maybe Text)
+  , _rmType         :: !(Maybe ResourceType)
+  , _rmOriginalName :: !(Maybe Text)
+  , _rmParentId     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ResourceMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rmVersionId' - The version ID of the resource. This is an optional field and is filled for action on document version.
+--
+-- * 'rmOwner' - The owner of the resource.
+--
+-- * 'rmName' - The name of the resource.
+--
+-- * 'rmId' - The ID of the resource.
+--
+-- * 'rmType' - The type of resource.
+--
+-- * 'rmOriginalName' - The original name of the resource prior to a rename operation.
+--
+-- * 'rmParentId' - The parent ID of the resource before a rename operation.
+resourceMetadata
+    :: ResourceMetadata
+resourceMetadata =
+  ResourceMetadata'
+  { _rmVersionId = Nothing
+  , _rmOwner = Nothing
+  , _rmName = Nothing
+  , _rmId = Nothing
+  , _rmType = Nothing
+  , _rmOriginalName = Nothing
+  , _rmParentId = Nothing
+  }
+
+
+-- | The version ID of the resource. This is an optional field and is filled for action on document version.
+rmVersionId :: Lens' ResourceMetadata (Maybe Text)
+rmVersionId = lens _rmVersionId (\ s a -> s{_rmVersionId = a});
+
+-- | The owner of the resource.
+rmOwner :: Lens' ResourceMetadata (Maybe UserMetadata)
+rmOwner = lens _rmOwner (\ s a -> s{_rmOwner = a});
+
+-- | The name of the resource.
+rmName :: Lens' ResourceMetadata (Maybe Text)
+rmName = lens _rmName (\ s a -> s{_rmName = a});
+
+-- | The ID of the resource.
+rmId :: Lens' ResourceMetadata (Maybe Text)
+rmId = lens _rmId (\ s a -> s{_rmId = a});
+
+-- | The type of resource.
+rmType :: Lens' ResourceMetadata (Maybe ResourceType)
+rmType = lens _rmType (\ s a -> s{_rmType = a});
+
+-- | The original name of the resource prior to a rename operation.
+rmOriginalName :: Lens' ResourceMetadata (Maybe Text)
+rmOriginalName = lens _rmOriginalName (\ s a -> s{_rmOriginalName = a});
+
+-- | The parent ID of the resource before a rename operation.
+rmParentId :: Lens' ResourceMetadata (Maybe Text)
+rmParentId = lens _rmParentId (\ s a -> s{_rmParentId = a});
+
+instance FromJSON ResourceMetadata where
+        parseJSON
+          = withObject "ResourceMetadata"
+              (\ x ->
+                 ResourceMetadata' <$>
+                   (x .:? "VersionId") <*> (x .:? "Owner") <*>
+                     (x .:? "Name")
+                     <*> (x .:? "Id")
+                     <*> (x .:? "Type")
+                     <*> (x .:? "OriginalName")
+                     <*> (x .:? "ParentId"))
+
+instance Hashable ResourceMetadata where
+
+instance NFData ResourceMetadata where
+
+-- | Describes the path information of a resource.
+--
+--
+--
+-- /See:/ 'resourcePath' smart constructor.
+newtype ResourcePath = ResourcePath'
+  { _rpComponents :: Maybe [ResourcePathComponent]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ResourcePath' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpComponents' - The components of the resource path.
+resourcePath
+    :: ResourcePath
+resourcePath = ResourcePath' {_rpComponents = Nothing}
+
+
+-- | The components of the resource path.
+rpComponents :: Lens' ResourcePath [ResourcePathComponent]
+rpComponents = lens _rpComponents (\ s a -> s{_rpComponents = a}) . _Default . _Coerce;
+
+instance FromJSON ResourcePath where
+        parseJSON
+          = withObject "ResourcePath"
+              (\ x ->
+                 ResourcePath' <$> (x .:? "Components" .!= mempty))
+
+instance Hashable ResourcePath where
+
+instance NFData ResourcePath where
+
+-- | Describes the resource path.
+--
+--
+--
+-- /See:/ 'resourcePathComponent' smart constructor.
+data ResourcePathComponent = ResourcePathComponent'
+  { _rpcName :: !(Maybe Text)
+  , _rpcId   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ResourcePathComponent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpcName' - The name of the resource path.
+--
+-- * 'rpcId' - The ID of the resource path.
+resourcePathComponent
+    :: ResourcePathComponent
+resourcePathComponent =
+  ResourcePathComponent' {_rpcName = Nothing, _rpcId = Nothing}
+
+
+-- | The name of the resource path.
+rpcName :: Lens' ResourcePathComponent (Maybe Text)
+rpcName = lens _rpcName (\ s a -> s{_rpcName = a});
+
+-- | The ID of the resource path.
+rpcId :: Lens' ResourcePathComponent (Maybe Text)
+rpcId = lens _rpcId (\ s a -> s{_rpcId = a});
+
+instance FromJSON ResourcePathComponent where
+        parseJSON
+          = withObject "ResourcePathComponent"
+              (\ x ->
+                 ResourcePathComponent' <$>
+                   (x .:? "Name") <*> (x .:? "Id"))
+
+instance Hashable ResourcePathComponent where
+
+instance NFData ResourcePathComponent where
+
+-- | Describes the recipient type and ID, if available.
+--
+--
+--
+-- /See:/ 'sharePrincipal' smart constructor.
+data SharePrincipal = SharePrincipal'
+  { _spId   :: !Text
+  , _spType :: !PrincipalType
+  , _spRole :: !RoleType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SharePrincipal' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spId' - The ID of the recipient.
+--
+-- * 'spType' - The type of the recipient.
+--
+-- * 'spRole' - The role of the recipient.
+sharePrincipal
+    :: Text -- ^ 'spId'
+    -> PrincipalType -- ^ 'spType'
+    -> RoleType -- ^ 'spRole'
+    -> SharePrincipal
+sharePrincipal pId_ pType_ pRole_ =
+  SharePrincipal' {_spId = pId_, _spType = pType_, _spRole = pRole_}
+
+
+-- | The ID of the recipient.
+spId :: Lens' SharePrincipal Text
+spId = lens _spId (\ s a -> s{_spId = a});
+
+-- | The type of the recipient.
+spType :: Lens' SharePrincipal PrincipalType
+spType = lens _spType (\ s a -> s{_spType = a});
+
+-- | The role of the recipient.
+spRole :: Lens' SharePrincipal RoleType
+spRole = lens _spRole (\ s a -> s{_spRole = a});
+
+instance Hashable SharePrincipal where
+
+instance NFData SharePrincipal where
+
+instance ToJSON SharePrincipal where
+        toJSON SharePrincipal'{..}
+          = object
+              (catMaybes
+                 [Just ("Id" .= _spId), Just ("Type" .= _spType),
+                  Just ("Role" .= _spRole)])
+
+-- | Describes the share results of a resource.
+--
+--
+--
+-- /See:/ 'shareResult' smart constructor.
+data ShareResult = ShareResult'
+  { _srStatus        :: !(Maybe ShareStatusType)
+  , _srPrincipalId   :: !(Maybe Text)
+  , _srRole          :: !(Maybe RoleType)
+  , _srStatusMessage :: !(Maybe (Sensitive Text))
+  , _srShareId       :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ShareResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srStatus' - The status.
+--
+-- * 'srPrincipalId' - The ID of the principal.
+--
+-- * 'srRole' - The role.
+--
+-- * 'srStatusMessage' - The status message.
+--
+-- * 'srShareId' - The ID of the resource that was shared.
+shareResult
+    :: ShareResult
+shareResult =
+  ShareResult'
+  { _srStatus = Nothing
+  , _srPrincipalId = Nothing
+  , _srRole = Nothing
+  , _srStatusMessage = Nothing
+  , _srShareId = Nothing
+  }
+
+
+-- | The status.
+srStatus :: Lens' ShareResult (Maybe ShareStatusType)
+srStatus = lens _srStatus (\ s a -> s{_srStatus = a});
+
+-- | The ID of the principal.
+srPrincipalId :: Lens' ShareResult (Maybe Text)
+srPrincipalId = lens _srPrincipalId (\ s a -> s{_srPrincipalId = a});
+
+-- | The role.
+srRole :: Lens' ShareResult (Maybe RoleType)
+srRole = lens _srRole (\ s a -> s{_srRole = a});
+
+-- | The status message.
+srStatusMessage :: Lens' ShareResult (Maybe Text)
+srStatusMessage = lens _srStatusMessage (\ s a -> s{_srStatusMessage = a}) . mapping _Sensitive;
+
+-- | The ID of the resource that was shared.
+srShareId :: Lens' ShareResult (Maybe Text)
+srShareId = lens _srShareId (\ s a -> s{_srShareId = a});
+
+instance FromJSON ShareResult where
+        parseJSON
+          = withObject "ShareResult"
+              (\ x ->
+                 ShareResult' <$>
+                   (x .:? "Status") <*> (x .:? "PrincipalId") <*>
+                     (x .:? "Role")
+                     <*> (x .:? "StatusMessage")
+                     <*> (x .:? "ShareId"))
+
+instance Hashable ShareResult where
+
+instance NFData ShareResult where
+
+-- | Describes the storage for a user.
+--
+--
+--
+-- /See:/ 'storageRuleType' smart constructor.
+data StorageRuleType = StorageRuleType'
+  { _srtStorageAllocatedInBytes :: !(Maybe Nat)
+  , _srtStorageType             :: !(Maybe StorageType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StorageRuleType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srtStorageAllocatedInBytes' - The amount of storage allocated, in bytes.
+--
+-- * 'srtStorageType' - The type of storage.
+storageRuleType
+    :: StorageRuleType
+storageRuleType =
+  StorageRuleType'
+  {_srtStorageAllocatedInBytes = Nothing, _srtStorageType = Nothing}
+
+
+-- | The amount of storage allocated, in bytes.
+srtStorageAllocatedInBytes :: Lens' StorageRuleType (Maybe Natural)
+srtStorageAllocatedInBytes = lens _srtStorageAllocatedInBytes (\ s a -> s{_srtStorageAllocatedInBytes = a}) . mapping _Nat;
+
+-- | The type of storage.
+srtStorageType :: Lens' StorageRuleType (Maybe StorageType)
+srtStorageType = lens _srtStorageType (\ s a -> s{_srtStorageType = a});
+
+instance FromJSON StorageRuleType where
+        parseJSON
+          = withObject "StorageRuleType"
+              (\ x ->
+                 StorageRuleType' <$>
+                   (x .:? "StorageAllocatedInBytes") <*>
+                     (x .:? "StorageType"))
+
+instance Hashable StorageRuleType where
+
+instance NFData StorageRuleType where
+
+instance ToJSON StorageRuleType where
+        toJSON StorageRuleType'{..}
+          = object
+              (catMaybes
+                 [("StorageAllocatedInBytes" .=) <$>
+                    _srtStorageAllocatedInBytes,
+                  ("StorageType" .=) <$> _srtStorageType])
+
+-- | Describes a subscription.
+--
+--
+--
+-- /See:/ 'subscription' smart constructor.
+data Subscription = Subscription'
+  { _sProtocol       :: !(Maybe SubscriptionProtocolType)
+  , _sEndPoint       :: !(Maybe Text)
+  , _sSubscriptionId :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Subscription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sProtocol' - The protocol of the subscription.
+--
+-- * 'sEndPoint' - The endpoint of the subscription.
+--
+-- * 'sSubscriptionId' - The ID of the subscription.
+subscription
+    :: Subscription
+subscription =
+  Subscription'
+  {_sProtocol = Nothing, _sEndPoint = Nothing, _sSubscriptionId = Nothing}
+
+
+-- | The protocol of the subscription.
+sProtocol :: Lens' Subscription (Maybe SubscriptionProtocolType)
+sProtocol = lens _sProtocol (\ s a -> s{_sProtocol = a});
+
+-- | The endpoint of the subscription.
+sEndPoint :: Lens' Subscription (Maybe Text)
+sEndPoint = lens _sEndPoint (\ s a -> s{_sEndPoint = a});
+
+-- | The ID of the subscription.
+sSubscriptionId :: Lens' Subscription (Maybe Text)
+sSubscriptionId = lens _sSubscriptionId (\ s a -> s{_sSubscriptionId = a});
+
+instance FromJSON Subscription where
+        parseJSON
+          = withObject "Subscription"
+              (\ x ->
+                 Subscription' <$>
+                   (x .:? "Protocol") <*> (x .:? "EndPoint") <*>
+                     (x .:? "SubscriptionId"))
+
+instance Hashable Subscription where
+
+instance NFData Subscription where
+
+-- | Describes the upload.
+--
+--
+--
+-- /See:/ 'uploadMetadata' smart constructor.
+data UploadMetadata = UploadMetadata'
+  { _umUploadURL     :: !(Maybe (Sensitive Text))
+  , _umSignedHeaders :: !(Maybe (Map Text Text))
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UploadMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umUploadURL' - The URL of the upload.
+--
+-- * 'umSignedHeaders' - The signed headers.
+uploadMetadata
+    :: UploadMetadata
+uploadMetadata =
+  UploadMetadata' {_umUploadURL = Nothing, _umSignedHeaders = Nothing}
+
+
+-- | The URL of the upload.
+umUploadURL :: Lens' UploadMetadata (Maybe Text)
+umUploadURL = lens _umUploadURL (\ s a -> s{_umUploadURL = a}) . mapping _Sensitive;
+
+-- | The signed headers.
+umSignedHeaders :: Lens' UploadMetadata (HashMap Text Text)
+umSignedHeaders = lens _umSignedHeaders (\ s a -> s{_umSignedHeaders = a}) . _Default . _Map;
+
+instance FromJSON UploadMetadata where
+        parseJSON
+          = withObject "UploadMetadata"
+              (\ x ->
+                 UploadMetadata' <$>
+                   (x .:? "UploadUrl") <*>
+                     (x .:? "SignedHeaders" .!= mempty))
+
+instance Hashable UploadMetadata where
+
+instance NFData UploadMetadata where
+
+-- | Describes a user.
+--
+--
+--
+-- /See:/ 'user' smart constructor.
+data User = User'
+  { _uGivenName          :: !(Maybe Text)
+  , _uStatus             :: !(Maybe UserStatusType)
+  , _uLocale             :: !(Maybe LocaleType)
+  , _uUsername           :: !(Maybe Text)
+  , _uStorage            :: !(Maybe UserStorageMetadata)
+  , _uModifiedTimestamp  :: !(Maybe POSIX)
+  , _uEmailAddress       :: !(Maybe Text)
+  , _uId                 :: !(Maybe Text)
+  , _uRootFolderId       :: !(Maybe Text)
+  , _uType               :: !(Maybe UserType)
+  , _uSurname            :: !(Maybe Text)
+  , _uTimeZoneId         :: !(Maybe Text)
+  , _uCreatedTimestamp   :: !(Maybe POSIX)
+  , _uOrganizationId     :: !(Maybe Text)
+  , _uRecycleBinFolderId :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'User' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uGivenName' - The given name of the user.
+--
+-- * 'uStatus' - The status of the user.
+--
+-- * 'uLocale' - The locale of the user.
+--
+-- * 'uUsername' - The login name of the user.
+--
+-- * 'uStorage' - The storage for the user.
+--
+-- * 'uModifiedTimestamp' - The time when the user was modified.
+--
+-- * 'uEmailAddress' - The email address of the user.
+--
+-- * 'uId' - The ID of the user.
+--
+-- * 'uRootFolderId' - The ID of the root folder.
+--
+-- * 'uType' - The type of user.
+--
+-- * 'uSurname' - The surname of the user.
+--
+-- * 'uTimeZoneId' - The time zone ID of the user.
+--
+-- * 'uCreatedTimestamp' - The time when the user was created.
+--
+-- * 'uOrganizationId' - The ID of the organization.
+--
+-- * 'uRecycleBinFolderId' - The ID of the recycle bin folder.
+user
+    :: User
+user =
+  User'
+  { _uGivenName = Nothing
+  , _uStatus = Nothing
+  , _uLocale = Nothing
+  , _uUsername = Nothing
+  , _uStorage = Nothing
+  , _uModifiedTimestamp = Nothing
+  , _uEmailAddress = Nothing
+  , _uId = Nothing
+  , _uRootFolderId = Nothing
+  , _uType = Nothing
+  , _uSurname = Nothing
+  , _uTimeZoneId = Nothing
+  , _uCreatedTimestamp = Nothing
+  , _uOrganizationId = Nothing
+  , _uRecycleBinFolderId = Nothing
+  }
+
+
+-- | The given name of the user.
+uGivenName :: Lens' User (Maybe Text)
+uGivenName = lens _uGivenName (\ s a -> s{_uGivenName = a});
+
+-- | The status of the user.
+uStatus :: Lens' User (Maybe UserStatusType)
+uStatus = lens _uStatus (\ s a -> s{_uStatus = a});
+
+-- | The locale of the user.
+uLocale :: Lens' User (Maybe LocaleType)
+uLocale = lens _uLocale (\ s a -> s{_uLocale = a});
+
+-- | The login name of the user.
+uUsername :: Lens' User (Maybe Text)
+uUsername = lens _uUsername (\ s a -> s{_uUsername = a});
+
+-- | The storage for the user.
+uStorage :: Lens' User (Maybe UserStorageMetadata)
+uStorage = lens _uStorage (\ s a -> s{_uStorage = a});
+
+-- | The time when the user was modified.
+uModifiedTimestamp :: Lens' User (Maybe UTCTime)
+uModifiedTimestamp = lens _uModifiedTimestamp (\ s a -> s{_uModifiedTimestamp = a}) . mapping _Time;
+
+-- | The email address of the user.
+uEmailAddress :: Lens' User (Maybe Text)
+uEmailAddress = lens _uEmailAddress (\ s a -> s{_uEmailAddress = a});
+
+-- | The ID of the user.
+uId :: Lens' User (Maybe Text)
+uId = lens _uId (\ s a -> s{_uId = a});
+
+-- | The ID of the root folder.
+uRootFolderId :: Lens' User (Maybe Text)
+uRootFolderId = lens _uRootFolderId (\ s a -> s{_uRootFolderId = a});
+
+-- | The type of user.
+uType :: Lens' User (Maybe UserType)
+uType = lens _uType (\ s a -> s{_uType = a});
+
+-- | The surname of the user.
+uSurname :: Lens' User (Maybe Text)
+uSurname = lens _uSurname (\ s a -> s{_uSurname = a});
+
+-- | The time zone ID of the user.
+uTimeZoneId :: Lens' User (Maybe Text)
+uTimeZoneId = lens _uTimeZoneId (\ s a -> s{_uTimeZoneId = a});
+
+-- | The time when the user was created.
+uCreatedTimestamp :: Lens' User (Maybe UTCTime)
+uCreatedTimestamp = lens _uCreatedTimestamp (\ s a -> s{_uCreatedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the organization.
+uOrganizationId :: Lens' User (Maybe Text)
+uOrganizationId = lens _uOrganizationId (\ s a -> s{_uOrganizationId = a});
+
+-- | The ID of the recycle bin folder.
+uRecycleBinFolderId :: Lens' User (Maybe Text)
+uRecycleBinFolderId = lens _uRecycleBinFolderId (\ s a -> s{_uRecycleBinFolderId = a});
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ x ->
+                 User' <$>
+                   (x .:? "GivenName") <*> (x .:? "Status") <*>
+                     (x .:? "Locale")
+                     <*> (x .:? "Username")
+                     <*> (x .:? "Storage")
+                     <*> (x .:? "ModifiedTimestamp")
+                     <*> (x .:? "EmailAddress")
+                     <*> (x .:? "Id")
+                     <*> (x .:? "RootFolderId")
+                     <*> (x .:? "Type")
+                     <*> (x .:? "Surname")
+                     <*> (x .:? "TimeZoneId")
+                     <*> (x .:? "CreatedTimestamp")
+                     <*> (x .:? "OrganizationId")
+                     <*> (x .:? "RecycleBinFolderId"))
+
+instance Hashable User where
+
+instance NFData User where
+
+-- | Describes the metadata of the user.
+--
+--
+--
+-- /See:/ 'userMetadata' smart constructor.
+data UserMetadata = UserMetadata'
+  { _umGivenName    :: !(Maybe Text)
+  , _umUsername     :: !(Maybe Text)
+  , _umEmailAddress :: !(Maybe Text)
+  , _umId           :: !(Maybe Text)
+  , _umSurname      :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UserMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umGivenName' - The given name of the user before a rename operation.
+--
+-- * 'umUsername' - The username of the user.
+--
+-- * 'umEmailAddress' - The email address of the user.
+--
+-- * 'umId' - The ID of the user.
+--
+-- * 'umSurname' - The surname of the user.
+userMetadata
+    :: UserMetadata
+userMetadata =
+  UserMetadata'
+  { _umGivenName = Nothing
+  , _umUsername = Nothing
+  , _umEmailAddress = Nothing
+  , _umId = Nothing
+  , _umSurname = Nothing
+  }
+
+
+-- | The given name of the user before a rename operation.
+umGivenName :: Lens' UserMetadata (Maybe Text)
+umGivenName = lens _umGivenName (\ s a -> s{_umGivenName = a});
+
+-- | The username of the user.
+umUsername :: Lens' UserMetadata (Maybe Text)
+umUsername = lens _umUsername (\ s a -> s{_umUsername = a});
+
+-- | The email address of the user.
+umEmailAddress :: Lens' UserMetadata (Maybe Text)
+umEmailAddress = lens _umEmailAddress (\ s a -> s{_umEmailAddress = a});
+
+-- | The ID of the user.
+umId :: Lens' UserMetadata (Maybe Text)
+umId = lens _umId (\ s a -> s{_umId = a});
+
+-- | The surname of the user.
+umSurname :: Lens' UserMetadata (Maybe Text)
+umSurname = lens _umSurname (\ s a -> s{_umSurname = a});
+
+instance FromJSON UserMetadata where
+        parseJSON
+          = withObject "UserMetadata"
+              (\ x ->
+                 UserMetadata' <$>
+                   (x .:? "GivenName") <*> (x .:? "Username") <*>
+                     (x .:? "EmailAddress")
+                     <*> (x .:? "Id")
+                     <*> (x .:? "Surname"))
+
+instance Hashable UserMetadata where
+
+instance NFData UserMetadata where
+
+-- | Describes the storage for a user.
+--
+--
+--
+-- /See:/ 'userStorageMetadata' smart constructor.
+data UserStorageMetadata = UserStorageMetadata'
+  { _usmStorageUtilizedInBytes :: !(Maybe Integer)
+  , _usmStorageRule            :: !(Maybe StorageRuleType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UserStorageMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usmStorageUtilizedInBytes' - The amount of storage utilized, in bytes.
+--
+-- * 'usmStorageRule' - The storage for a user.
+userStorageMetadata
+    :: UserStorageMetadata
+userStorageMetadata =
+  UserStorageMetadata'
+  {_usmStorageUtilizedInBytes = Nothing, _usmStorageRule = Nothing}
+
+
+-- | The amount of storage utilized, in bytes.
+usmStorageUtilizedInBytes :: Lens' UserStorageMetadata (Maybe Integer)
+usmStorageUtilizedInBytes = lens _usmStorageUtilizedInBytes (\ s a -> s{_usmStorageUtilizedInBytes = a});
+
+-- | The storage for a user.
+usmStorageRule :: Lens' UserStorageMetadata (Maybe StorageRuleType)
+usmStorageRule = lens _usmStorageRule (\ s a -> s{_usmStorageRule = a});
+
+instance FromJSON UserStorageMetadata where
+        parseJSON
+          = withObject "UserStorageMetadata"
+              (\ x ->
+                 UserStorageMetadata' <$>
+                   (x .:? "StorageUtilizedInBytes") <*>
+                     (x .:? "StorageRule"))
+
+instance Hashable UserStorageMetadata where
+
+instance NFData UserStorageMetadata where
diff --git a/gen/Network/AWS/WorkDocs/Types/Sum.hs b/gen/Network/AWS/WorkDocs/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/Types/Sum.hs
@@ -0,0 +1,839 @@
+{-# 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.WorkDocs.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.WorkDocs.Types.Sum where
+
+import Network.AWS.Prelude
+
+data ActivityType
+  = DocumentAnnotationAdded
+  | DocumentAnnotationDeleted
+  | DocumentCheckedIn
+  | DocumentCheckedOut
+  | DocumentCommentAdded
+  | DocumentCommentDeleted
+  | DocumentMoved
+  | DocumentRecycled
+  | DocumentRenamed
+  | DocumentRestored
+  | DocumentReverted
+  | DocumentSharePermissionChanged
+  | DocumentShareableLinkCreated
+  | DocumentShareableLinkPermissionChanged
+  | DocumentShareableLinkRemoved
+  | DocumentShared
+  | DocumentUnshared
+  | DocumentVersionDeleted
+  | DocumentVersionUploaded
+  | FolderCreated
+  | FolderDeleted
+  | FolderMoved
+  | FolderRecycled
+  | FolderRenamed
+  | FolderRestored
+  | FolderSharePermissionChanged
+  | FolderShareableLinkCreated
+  | FolderShareableLinkPermissionChanged
+  | FolderShareableLinkRemoved
+  | FolderShared
+  | FolderUnshared
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ActivityType where
+    parser = takeLowerText >>= \case
+        "document_annotation_added" -> pure DocumentAnnotationAdded
+        "document_annotation_deleted" -> pure DocumentAnnotationDeleted
+        "document_checked_in" -> pure DocumentCheckedIn
+        "document_checked_out" -> pure DocumentCheckedOut
+        "document_comment_added" -> pure DocumentCommentAdded
+        "document_comment_deleted" -> pure DocumentCommentDeleted
+        "document_moved" -> pure DocumentMoved
+        "document_recycled" -> pure DocumentRecycled
+        "document_renamed" -> pure DocumentRenamed
+        "document_restored" -> pure DocumentRestored
+        "document_reverted" -> pure DocumentReverted
+        "document_share_permission_changed" -> pure DocumentSharePermissionChanged
+        "document_shareable_link_created" -> pure DocumentShareableLinkCreated
+        "document_shareable_link_permission_changed" -> pure DocumentShareableLinkPermissionChanged
+        "document_shareable_link_removed" -> pure DocumentShareableLinkRemoved
+        "document_shared" -> pure DocumentShared
+        "document_unshared" -> pure DocumentUnshared
+        "document_version_deleted" -> pure DocumentVersionDeleted
+        "document_version_uploaded" -> pure DocumentVersionUploaded
+        "folder_created" -> pure FolderCreated
+        "folder_deleted" -> pure FolderDeleted
+        "folder_moved" -> pure FolderMoved
+        "folder_recycled" -> pure FolderRecycled
+        "folder_renamed" -> pure FolderRenamed
+        "folder_restored" -> pure FolderRestored
+        "folder_share_permission_changed" -> pure FolderSharePermissionChanged
+        "folder_shareable_link_created" -> pure FolderShareableLinkCreated
+        "folder_shareable_link_permission_changed" -> pure FolderShareableLinkPermissionChanged
+        "folder_shareable_link_removed" -> pure FolderShareableLinkRemoved
+        "folder_shared" -> pure FolderShared
+        "folder_unshared" -> pure FolderUnshared
+        e -> fromTextError $ "Failure parsing ActivityType from value: '" <> e
+           <> "'. Accepted values: document_annotation_added, document_annotation_deleted, document_checked_in, document_checked_out, document_comment_added, document_comment_deleted, document_moved, document_recycled, document_renamed, document_restored, document_reverted, document_share_permission_changed, document_shareable_link_created, document_shareable_link_permission_changed, document_shareable_link_removed, document_shared, document_unshared, document_version_deleted, document_version_uploaded, folder_created, folder_deleted, folder_moved, folder_recycled, folder_renamed, folder_restored, folder_share_permission_changed, folder_shareable_link_created, folder_shareable_link_permission_changed, folder_shareable_link_removed, folder_shared, folder_unshared"
+
+instance ToText ActivityType where
+    toText = \case
+        DocumentAnnotationAdded -> "DOCUMENT_ANNOTATION_ADDED"
+        DocumentAnnotationDeleted -> "DOCUMENT_ANNOTATION_DELETED"
+        DocumentCheckedIn -> "DOCUMENT_CHECKED_IN"
+        DocumentCheckedOut -> "DOCUMENT_CHECKED_OUT"
+        DocumentCommentAdded -> "DOCUMENT_COMMENT_ADDED"
+        DocumentCommentDeleted -> "DOCUMENT_COMMENT_DELETED"
+        DocumentMoved -> "DOCUMENT_MOVED"
+        DocumentRecycled -> "DOCUMENT_RECYCLED"
+        DocumentRenamed -> "DOCUMENT_RENAMED"
+        DocumentRestored -> "DOCUMENT_RESTORED"
+        DocumentReverted -> "DOCUMENT_REVERTED"
+        DocumentSharePermissionChanged -> "DOCUMENT_SHARE_PERMISSION_CHANGED"
+        DocumentShareableLinkCreated -> "DOCUMENT_SHAREABLE_LINK_CREATED"
+        DocumentShareableLinkPermissionChanged -> "DOCUMENT_SHAREABLE_LINK_PERMISSION_CHANGED"
+        DocumentShareableLinkRemoved -> "DOCUMENT_SHAREABLE_LINK_REMOVED"
+        DocumentShared -> "DOCUMENT_SHARED"
+        DocumentUnshared -> "DOCUMENT_UNSHARED"
+        DocumentVersionDeleted -> "DOCUMENT_VERSION_DELETED"
+        DocumentVersionUploaded -> "DOCUMENT_VERSION_UPLOADED"
+        FolderCreated -> "FOLDER_CREATED"
+        FolderDeleted -> "FOLDER_DELETED"
+        FolderMoved -> "FOLDER_MOVED"
+        FolderRecycled -> "FOLDER_RECYCLED"
+        FolderRenamed -> "FOLDER_RENAMED"
+        FolderRestored -> "FOLDER_RESTORED"
+        FolderSharePermissionChanged -> "FOLDER_SHARE_PERMISSION_CHANGED"
+        FolderShareableLinkCreated -> "FOLDER_SHAREABLE_LINK_CREATED"
+        FolderShareableLinkPermissionChanged -> "FOLDER_SHAREABLE_LINK_PERMISSION_CHANGED"
+        FolderShareableLinkRemoved -> "FOLDER_SHAREABLE_LINK_REMOVED"
+        FolderShared -> "FOLDER_SHARED"
+        FolderUnshared -> "FOLDER_UNSHARED"
+
+instance Hashable     ActivityType
+instance NFData       ActivityType
+instance ToByteString ActivityType
+instance ToQuery      ActivityType
+instance ToHeader     ActivityType
+
+instance FromJSON ActivityType where
+    parseJSON = parseJSONText "ActivityType"
+
+data CommentStatusType
+  = Deleted
+  | Draft
+  | Published
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText CommentStatusType where
+    parser = takeLowerText >>= \case
+        "deleted" -> pure Deleted
+        "draft" -> pure Draft
+        "published" -> pure Published
+        e -> fromTextError $ "Failure parsing CommentStatusType from value: '" <> e
+           <> "'. Accepted values: deleted, draft, published"
+
+instance ToText CommentStatusType where
+    toText = \case
+        Deleted -> "DELETED"
+        Draft -> "DRAFT"
+        Published -> "PUBLISHED"
+
+instance Hashable     CommentStatusType
+instance NFData       CommentStatusType
+instance ToByteString CommentStatusType
+instance ToQuery      CommentStatusType
+instance ToHeader     CommentStatusType
+
+instance FromJSON CommentStatusType where
+    parseJSON = parseJSONText "CommentStatusType"
+
+data CommentVisibilityType
+  = Private
+  | Public
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText CommentVisibilityType where
+    parser = takeLowerText >>= \case
+        "private" -> pure Private
+        "public" -> pure Public
+        e -> fromTextError $ "Failure parsing CommentVisibilityType from value: '" <> e
+           <> "'. Accepted values: private, public"
+
+instance ToText CommentVisibilityType where
+    toText = \case
+        Private -> "PRIVATE"
+        Public -> "PUBLIC"
+
+instance Hashable     CommentVisibilityType
+instance NFData       CommentVisibilityType
+instance ToByteString CommentVisibilityType
+instance ToQuery      CommentVisibilityType
+instance ToHeader     CommentVisibilityType
+
+instance ToJSON CommentVisibilityType where
+    toJSON = toJSONText
+
+instance FromJSON CommentVisibilityType where
+    parseJSON = parseJSONText "CommentVisibilityType"
+
+data DocumentSourceType
+  = Original
+  | WithComments
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText DocumentSourceType where
+    parser = takeLowerText >>= \case
+        "original" -> pure Original
+        "with_comments" -> pure WithComments
+        e -> fromTextError $ "Failure parsing DocumentSourceType from value: '" <> e
+           <> "'. Accepted values: original, with_comments"
+
+instance ToText DocumentSourceType where
+    toText = \case
+        Original -> "ORIGINAL"
+        WithComments -> "WITH_COMMENTS"
+
+instance Hashable     DocumentSourceType
+instance NFData       DocumentSourceType
+instance ToByteString DocumentSourceType
+instance ToQuery      DocumentSourceType
+instance ToHeader     DocumentSourceType
+
+instance FromJSON DocumentSourceType where
+    parseJSON = parseJSONText "DocumentSourceType"
+
+data DocumentStatusType
+  = DSTActive
+  | DSTInitialized
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText DocumentStatusType where
+    parser = takeLowerText >>= \case
+        "active" -> pure DSTActive
+        "initialized" -> pure DSTInitialized
+        e -> fromTextError $ "Failure parsing DocumentStatusType from value: '" <> e
+           <> "'. Accepted values: active, initialized"
+
+instance ToText DocumentStatusType where
+    toText = \case
+        DSTActive -> "ACTIVE"
+        DSTInitialized -> "INITIALIZED"
+
+instance Hashable     DocumentStatusType
+instance NFData       DocumentStatusType
+instance ToByteString DocumentStatusType
+instance ToQuery      DocumentStatusType
+instance ToHeader     DocumentStatusType
+
+instance FromJSON DocumentStatusType where
+    parseJSON = parseJSONText "DocumentStatusType"
+
+data DocumentThumbnailType
+  = Large
+  | Small
+  | SmallHq
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText DocumentThumbnailType where
+    parser = takeLowerText >>= \case
+        "large" -> pure Large
+        "small" -> pure Small
+        "small_hq" -> pure SmallHq
+        e -> fromTextError $ "Failure parsing DocumentThumbnailType from value: '" <> e
+           <> "'. Accepted values: large, small, small_hq"
+
+instance ToText DocumentThumbnailType where
+    toText = \case
+        Large -> "LARGE"
+        Small -> "SMALL"
+        SmallHq -> "SMALL_HQ"
+
+instance Hashable     DocumentThumbnailType
+instance NFData       DocumentThumbnailType
+instance ToByteString DocumentThumbnailType
+instance ToQuery      DocumentThumbnailType
+instance ToHeader     DocumentThumbnailType
+
+instance FromJSON DocumentThumbnailType where
+    parseJSON = parseJSONText "DocumentThumbnailType"
+
+data DocumentVersionStatus =
+  DVSActive
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText DocumentVersionStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure DVSActive
+        e -> fromTextError $ "Failure parsing DocumentVersionStatus from value: '" <> e
+           <> "'. Accepted values: active"
+
+instance ToText DocumentVersionStatus where
+    toText = \case
+        DVSActive -> "ACTIVE"
+
+instance Hashable     DocumentVersionStatus
+instance NFData       DocumentVersionStatus
+instance ToByteString DocumentVersionStatus
+instance ToQuery      DocumentVersionStatus
+instance ToHeader     DocumentVersionStatus
+
+instance ToJSON DocumentVersionStatus where
+    toJSON = toJSONText
+
+data FolderContentType
+  = FCTAll
+  | FCTDocument
+  | FCTFolder
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText FolderContentType where
+    parser = takeLowerText >>= \case
+        "all" -> pure FCTAll
+        "document" -> pure FCTDocument
+        "folder" -> pure FCTFolder
+        e -> fromTextError $ "Failure parsing FolderContentType from value: '" <> e
+           <> "'. Accepted values: all, document, folder"
+
+instance ToText FolderContentType where
+    toText = \case
+        FCTAll -> "ALL"
+        FCTDocument -> "DOCUMENT"
+        FCTFolder -> "FOLDER"
+
+instance Hashable     FolderContentType
+instance NFData       FolderContentType
+instance ToByteString FolderContentType
+instance ToQuery      FolderContentType
+instance ToHeader     FolderContentType
+
+instance ToJSON FolderContentType where
+    toJSON = toJSONText
+
+data LocaleType
+  = DE
+  | Default
+  | EN
+  | ES
+  | FR
+  | JA
+  | KO
+  | PtBr
+  | RU
+  | ZhCn
+  | ZhTw
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText LocaleType where
+    parser = takeLowerText >>= \case
+        "de" -> pure DE
+        "default" -> pure Default
+        "en" -> pure EN
+        "es" -> pure ES
+        "fr" -> pure FR
+        "ja" -> pure JA
+        "ko" -> pure KO
+        "pt_br" -> pure PtBr
+        "ru" -> pure RU
+        "zh_cn" -> pure ZhCn
+        "zh_tw" -> pure ZhTw
+        e -> fromTextError $ "Failure parsing LocaleType from value: '" <> e
+           <> "'. Accepted values: de, default, en, es, fr, ja, ko, pt_br, ru, zh_cn, zh_tw"
+
+instance ToText LocaleType where
+    toText = \case
+        DE -> "de"
+        Default -> "default"
+        EN -> "en"
+        ES -> "es"
+        FR -> "fr"
+        JA -> "ja"
+        KO -> "ko"
+        PtBr -> "pt_BR"
+        RU -> "ru"
+        ZhCn -> "zh_CN"
+        ZhTw -> "zh_TW"
+
+instance Hashable     LocaleType
+instance NFData       LocaleType
+instance ToByteString LocaleType
+instance ToQuery      LocaleType
+instance ToHeader     LocaleType
+
+instance ToJSON LocaleType where
+    toJSON = toJSONText
+
+instance FromJSON LocaleType where
+    parseJSON = parseJSONText "LocaleType"
+
+data OrderType
+  = Ascending
+  | Descending
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText OrderType where
+    parser = takeLowerText >>= \case
+        "ascending" -> pure Ascending
+        "descending" -> pure Descending
+        e -> fromTextError $ "Failure parsing OrderType from value: '" <> e
+           <> "'. Accepted values: ascending, descending"
+
+instance ToText OrderType where
+    toText = \case
+        Ascending -> "ASCENDING"
+        Descending -> "DESCENDING"
+
+instance Hashable     OrderType
+instance NFData       OrderType
+instance ToByteString OrderType
+instance ToQuery      OrderType
+instance ToHeader     OrderType
+
+instance ToJSON OrderType where
+    toJSON = toJSONText
+
+data PrincipalType
+  = Anonymous
+  | Group
+  | Invite
+  | Organization
+  | User
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText PrincipalType where
+    parser = takeLowerText >>= \case
+        "anonymous" -> pure Anonymous
+        "group" -> pure Group
+        "invite" -> pure Invite
+        "organization" -> pure Organization
+        "user" -> pure User
+        e -> fromTextError $ "Failure parsing PrincipalType from value: '" <> e
+           <> "'. Accepted values: anonymous, group, invite, organization, user"
+
+instance ToText PrincipalType where
+    toText = \case
+        Anonymous -> "ANONYMOUS"
+        Group -> "GROUP"
+        Invite -> "INVITE"
+        Organization -> "ORGANIZATION"
+        User -> "USER"
+
+instance Hashable     PrincipalType
+instance NFData       PrincipalType
+instance ToByteString PrincipalType
+instance ToQuery      PrincipalType
+instance ToHeader     PrincipalType
+
+instance ToJSON PrincipalType where
+    toJSON = toJSONText
+
+instance FromJSON PrincipalType where
+    parseJSON = parseJSONText "PrincipalType"
+
+data ResourceSortType
+  = Date
+  | Name
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ResourceSortType where
+    parser = takeLowerText >>= \case
+        "date" -> pure Date
+        "name" -> pure Name
+        e -> fromTextError $ "Failure parsing ResourceSortType from value: '" <> e
+           <> "'. Accepted values: date, name"
+
+instance ToText ResourceSortType where
+    toText = \case
+        Date -> "DATE"
+        Name -> "NAME"
+
+instance Hashable     ResourceSortType
+instance NFData       ResourceSortType
+instance ToByteString ResourceSortType
+instance ToQuery      ResourceSortType
+instance ToHeader     ResourceSortType
+
+instance ToJSON ResourceSortType where
+    toJSON = toJSONText
+
+data ResourceStateType
+  = RSTActive
+  | RSTRecycled
+  | RSTRecycling
+  | RSTRestoring
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ResourceStateType where
+    parser = takeLowerText >>= \case
+        "active" -> pure RSTActive
+        "recycled" -> pure RSTRecycled
+        "recycling" -> pure RSTRecycling
+        "restoring" -> pure RSTRestoring
+        e -> fromTextError $ "Failure parsing ResourceStateType from value: '" <> e
+           <> "'. Accepted values: active, recycled, recycling, restoring"
+
+instance ToText ResourceStateType where
+    toText = \case
+        RSTActive -> "ACTIVE"
+        RSTRecycled -> "RECYCLED"
+        RSTRecycling -> "RECYCLING"
+        RSTRestoring -> "RESTORING"
+
+instance Hashable     ResourceStateType
+instance NFData       ResourceStateType
+instance ToByteString ResourceStateType
+instance ToQuery      ResourceStateType
+instance ToHeader     ResourceStateType
+
+instance ToJSON ResourceStateType where
+    toJSON = toJSONText
+
+instance FromJSON ResourceStateType where
+    parseJSON = parseJSONText "ResourceStateType"
+
+data ResourceType
+  = Document
+  | Folder
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ResourceType where
+    parser = takeLowerText >>= \case
+        "document" -> pure Document
+        "folder" -> pure Folder
+        e -> fromTextError $ "Failure parsing ResourceType from value: '" <> e
+           <> "'. Accepted values: document, folder"
+
+instance ToText ResourceType where
+    toText = \case
+        Document -> "DOCUMENT"
+        Folder -> "FOLDER"
+
+instance Hashable     ResourceType
+instance NFData       ResourceType
+instance ToByteString ResourceType
+instance ToQuery      ResourceType
+instance ToHeader     ResourceType
+
+instance FromJSON ResourceType where
+    parseJSON = parseJSONText "ResourceType"
+
+data RolePermissionType
+  = Direct
+  | Inherited
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText RolePermissionType where
+    parser = takeLowerText >>= \case
+        "direct" -> pure Direct
+        "inherited" -> pure Inherited
+        e -> fromTextError $ "Failure parsing RolePermissionType from value: '" <> e
+           <> "'. Accepted values: direct, inherited"
+
+instance ToText RolePermissionType where
+    toText = \case
+        Direct -> "DIRECT"
+        Inherited -> "INHERITED"
+
+instance Hashable     RolePermissionType
+instance NFData       RolePermissionType
+instance ToByteString RolePermissionType
+instance ToQuery      RolePermissionType
+instance ToHeader     RolePermissionType
+
+instance FromJSON RolePermissionType where
+    parseJSON = parseJSONText "RolePermissionType"
+
+data RoleType
+  = Contributor
+  | Coowner
+  | Owner
+  | Viewer
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText RoleType where
+    parser = takeLowerText >>= \case
+        "contributor" -> pure Contributor
+        "coowner" -> pure Coowner
+        "owner" -> pure Owner
+        "viewer" -> pure Viewer
+        e -> fromTextError $ "Failure parsing RoleType from value: '" <> e
+           <> "'. Accepted values: contributor, coowner, owner, viewer"
+
+instance ToText RoleType where
+    toText = \case
+        Contributor -> "CONTRIBUTOR"
+        Coowner -> "COOWNER"
+        Owner -> "OWNER"
+        Viewer -> "VIEWER"
+
+instance Hashable     RoleType
+instance NFData       RoleType
+instance ToByteString RoleType
+instance ToQuery      RoleType
+instance ToHeader     RoleType
+
+instance ToJSON RoleType where
+    toJSON = toJSONText
+
+instance FromJSON RoleType where
+    parseJSON = parseJSONText "RoleType"
+
+data ShareStatusType
+  = Failure
+  | Success
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ShareStatusType where
+    parser = takeLowerText >>= \case
+        "failure" -> pure Failure
+        "success" -> pure Success
+        e -> fromTextError $ "Failure parsing ShareStatusType from value: '" <> e
+           <> "'. Accepted values: failure, success"
+
+instance ToText ShareStatusType where
+    toText = \case
+        Failure -> "FAILURE"
+        Success -> "SUCCESS"
+
+instance Hashable     ShareStatusType
+instance NFData       ShareStatusType
+instance ToByteString ShareStatusType
+instance ToQuery      ShareStatusType
+instance ToHeader     ShareStatusType
+
+instance FromJSON ShareStatusType where
+    parseJSON = parseJSONText "ShareStatusType"
+
+data StorageType
+  = Quota
+  | Unlimited
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText StorageType where
+    parser = takeLowerText >>= \case
+        "quota" -> pure Quota
+        "unlimited" -> pure Unlimited
+        e -> fromTextError $ "Failure parsing StorageType from value: '" <> e
+           <> "'. Accepted values: quota, unlimited"
+
+instance ToText StorageType where
+    toText = \case
+        Quota -> "QUOTA"
+        Unlimited -> "UNLIMITED"
+
+instance Hashable     StorageType
+instance NFData       StorageType
+instance ToByteString StorageType
+instance ToQuery      StorageType
+instance ToHeader     StorageType
+
+instance ToJSON StorageType where
+    toJSON = toJSONText
+
+instance FromJSON StorageType where
+    parseJSON = parseJSONText "StorageType"
+
+data SubscriptionProtocolType =
+  HTTPS
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SubscriptionProtocolType where
+    parser = takeLowerText >>= \case
+        "https" -> pure HTTPS
+        e -> fromTextError $ "Failure parsing SubscriptionProtocolType from value: '" <> e
+           <> "'. Accepted values: https"
+
+instance ToText SubscriptionProtocolType where
+    toText = \case
+        HTTPS -> "HTTPS"
+
+instance Hashable     SubscriptionProtocolType
+instance NFData       SubscriptionProtocolType
+instance ToByteString SubscriptionProtocolType
+instance ToQuery      SubscriptionProtocolType
+instance ToHeader     SubscriptionProtocolType
+
+instance ToJSON SubscriptionProtocolType where
+    toJSON = toJSONText
+
+instance FromJSON SubscriptionProtocolType where
+    parseJSON = parseJSONText "SubscriptionProtocolType"
+
+data SubscriptionType =
+  STAll
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SubscriptionType where
+    parser = takeLowerText >>= \case
+        "all" -> pure STAll
+        e -> fromTextError $ "Failure parsing SubscriptionType from value: '" <> e
+           <> "'. Accepted values: all"
+
+instance ToText SubscriptionType where
+    toText = \case
+        STAll -> "ALL"
+
+instance Hashable     SubscriptionType
+instance NFData       SubscriptionType
+instance ToByteString SubscriptionType
+instance ToQuery      SubscriptionType
+instance ToHeader     SubscriptionType
+
+instance ToJSON SubscriptionType where
+    toJSON = toJSONText
+
+data UserFilterType
+  = ActivePending
+  | All
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText UserFilterType where
+    parser = takeLowerText >>= \case
+        "active_pending" -> pure ActivePending
+        "all" -> pure All
+        e -> fromTextError $ "Failure parsing UserFilterType from value: '" <> e
+           <> "'. Accepted values: active_pending, all"
+
+instance ToText UserFilterType where
+    toText = \case
+        ActivePending -> "ACTIVE_PENDING"
+        All -> "ALL"
+
+instance Hashable     UserFilterType
+instance NFData       UserFilterType
+instance ToByteString UserFilterType
+instance ToQuery      UserFilterType
+instance ToHeader     UserFilterType
+
+instance ToJSON UserFilterType where
+    toJSON = toJSONText
+
+data UserSortType
+  = FullName
+  | StorageLimit
+  | StorageUsed
+  | UserName
+  | UserStatus
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText UserSortType where
+    parser = takeLowerText >>= \case
+        "full_name" -> pure FullName
+        "storage_limit" -> pure StorageLimit
+        "storage_used" -> pure StorageUsed
+        "user_name" -> pure UserName
+        "user_status" -> pure UserStatus
+        e -> fromTextError $ "Failure parsing UserSortType from value: '" <> e
+           <> "'. Accepted values: full_name, storage_limit, storage_used, user_name, user_status"
+
+instance ToText UserSortType where
+    toText = \case
+        FullName -> "FULL_NAME"
+        StorageLimit -> "STORAGE_LIMIT"
+        StorageUsed -> "STORAGE_USED"
+        UserName -> "USER_NAME"
+        UserStatus -> "USER_STATUS"
+
+instance Hashable     UserSortType
+instance NFData       UserSortType
+instance ToByteString UserSortType
+instance ToQuery      UserSortType
+instance ToHeader     UserSortType
+
+instance ToJSON UserSortType where
+    toJSON = toJSONText
+
+data UserStatusType
+  = Active
+  | Inactive
+  | Pending
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText UserStatusType where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "inactive" -> pure Inactive
+        "pending" -> pure Pending
+        e -> fromTextError $ "Failure parsing UserStatusType from value: '" <> e
+           <> "'. Accepted values: active, inactive, pending"
+
+instance ToText UserStatusType where
+    toText = \case
+        Active -> "ACTIVE"
+        Inactive -> "INACTIVE"
+        Pending -> "PENDING"
+
+instance Hashable     UserStatusType
+instance NFData       UserStatusType
+instance ToByteString UserStatusType
+instance ToQuery      UserStatusType
+instance ToHeader     UserStatusType
+
+instance FromJSON UserStatusType where
+    parseJSON = parseJSONText "UserStatusType"
+
+data UserType
+  = UTAdmin
+  | UTUser
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText UserType where
+    parser = takeLowerText >>= \case
+        "admin" -> pure UTAdmin
+        "user" -> pure UTUser
+        e -> fromTextError $ "Failure parsing UserType from value: '" <> e
+           <> "'. Accepted values: admin, user"
+
+instance ToText UserType where
+    toText = \case
+        UTAdmin -> "ADMIN"
+        UTUser -> "USER"
+
+instance Hashable     UserType
+instance NFData       UserType
+instance ToByteString UserType
+instance ToQuery      UserType
+instance ToHeader     UserType
+
+instance ToJSON UserType where
+    toJSON = toJSONText
+
+instance FromJSON UserType where
+    parseJSON = parseJSONText "UserType"
diff --git a/gen/Network/AWS/WorkDocs/UpdateDocument.hs b/gen/Network/AWS/WorkDocs/UpdateDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/UpdateDocument.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.UpdateDocument
+-- 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)
+--
+-- Updates the specified attributes of a document. The user must have access to both the document and its parent folder, if applicable.
+--
+--
+module Network.AWS.WorkDocs.UpdateDocument
+    (
+    -- * Creating a Request
+      updateDocument
+    , UpdateDocument
+    -- * Request Lenses
+    , udParentFolderId
+    , udAuthenticationToken
+    , udName
+    , udResourceState
+    , udDocumentId
+
+    -- * Destructuring the Response
+    , updateDocumentResponse
+    , UpdateDocumentResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'updateDocument' smart constructor.
+data UpdateDocument = UpdateDocument'
+  { _udParentFolderId      :: !(Maybe Text)
+  , _udAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _udName                :: !(Maybe Text)
+  , _udResourceState       :: !(Maybe ResourceStateType)
+  , _udDocumentId          :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udParentFolderId' - The ID of the parent folder.
+--
+-- * 'udAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'udName' - The name of the document.
+--
+-- * 'udResourceState' - The resource state of the document. Note that only ACTIVE and RECYCLED are supported.
+--
+-- * 'udDocumentId' - The ID of the document.
+updateDocument
+    :: Text -- ^ 'udDocumentId'
+    -> UpdateDocument
+updateDocument pDocumentId_ =
+  UpdateDocument'
+  { _udParentFolderId = Nothing
+  , _udAuthenticationToken = Nothing
+  , _udName = Nothing
+  , _udResourceState = Nothing
+  , _udDocumentId = pDocumentId_
+  }
+
+
+-- | The ID of the parent folder.
+udParentFolderId :: Lens' UpdateDocument (Maybe Text)
+udParentFolderId = lens _udParentFolderId (\ s a -> s{_udParentFolderId = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+udAuthenticationToken :: Lens' UpdateDocument (Maybe Text)
+udAuthenticationToken = lens _udAuthenticationToken (\ s a -> s{_udAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The name of the document.
+udName :: Lens' UpdateDocument (Maybe Text)
+udName = lens _udName (\ s a -> s{_udName = a});
+
+-- | The resource state of the document. Note that only ACTIVE and RECYCLED are supported.
+udResourceState :: Lens' UpdateDocument (Maybe ResourceStateType)
+udResourceState = lens _udResourceState (\ s a -> s{_udResourceState = a});
+
+-- | The ID of the document.
+udDocumentId :: Lens' UpdateDocument Text
+udDocumentId = lens _udDocumentId (\ s a -> s{_udDocumentId = a});
+
+instance AWSRequest UpdateDocument where
+        type Rs UpdateDocument = UpdateDocumentResponse
+        request = patchJSON workDocs
+        response = receiveNull UpdateDocumentResponse'
+
+instance Hashable UpdateDocument where
+
+instance NFData UpdateDocument where
+
+instance ToHeaders UpdateDocument where
+        toHeaders UpdateDocument'{..}
+          = mconcat
+              ["Authentication" =# _udAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON UpdateDocument where
+        toJSON UpdateDocument'{..}
+          = object
+              (catMaybes
+                 [("ParentFolderId" .=) <$> _udParentFolderId,
+                  ("Name" .=) <$> _udName,
+                  ("ResourceState" .=) <$> _udResourceState])
+
+instance ToPath UpdateDocument where
+        toPath UpdateDocument'{..}
+          = mconcat ["/api/v1/documents/", toBS _udDocumentId]
+
+instance ToQuery UpdateDocument where
+        toQuery = const mempty
+
+-- | /See:/ 'updateDocumentResponse' smart constructor.
+data UpdateDocumentResponse =
+  UpdateDocumentResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDocumentResponse' with the minimum fields required to make a request.
+--
+updateDocumentResponse
+    :: UpdateDocumentResponse
+updateDocumentResponse = UpdateDocumentResponse'
+
+
+instance NFData UpdateDocumentResponse where
diff --git a/gen/Network/AWS/WorkDocs/UpdateDocumentVersion.hs b/gen/Network/AWS/WorkDocs/UpdateDocumentVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/UpdateDocumentVersion.hs
@@ -0,0 +1,143 @@
+{-# 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.WorkDocs.UpdateDocumentVersion
+-- 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)
+--
+-- Changes the status of the document version to ACTIVE.
+--
+--
+-- Amazon WorkDocs also sets its document container to ACTIVE. This is the last step in a document upload, after the client uploads the document to an S3-presigned URL returned by 'InitiateDocumentVersionUpload' .
+--
+module Network.AWS.WorkDocs.UpdateDocumentVersion
+    (
+    -- * Creating a Request
+      updateDocumentVersion
+    , UpdateDocumentVersion
+    -- * Request Lenses
+    , udvAuthenticationToken
+    , udvVersionStatus
+    , udvDocumentId
+    , udvVersionId
+
+    -- * Destructuring the Response
+    , updateDocumentVersionResponse
+    , UpdateDocumentVersionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'updateDocumentVersion' smart constructor.
+data UpdateDocumentVersion = UpdateDocumentVersion'
+  { _udvAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _udvVersionStatus       :: !(Maybe DocumentVersionStatus)
+  , _udvDocumentId          :: !Text
+  , _udvVersionId           :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDocumentVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udvAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'udvVersionStatus' - The status of the version.
+--
+-- * 'udvDocumentId' - The ID of the document.
+--
+-- * 'udvVersionId' - The version ID of the document.
+updateDocumentVersion
+    :: Text -- ^ 'udvDocumentId'
+    -> Text -- ^ 'udvVersionId'
+    -> UpdateDocumentVersion
+updateDocumentVersion pDocumentId_ pVersionId_ =
+  UpdateDocumentVersion'
+  { _udvAuthenticationToken = Nothing
+  , _udvVersionStatus = Nothing
+  , _udvDocumentId = pDocumentId_
+  , _udvVersionId = pVersionId_
+  }
+
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+udvAuthenticationToken :: Lens' UpdateDocumentVersion (Maybe Text)
+udvAuthenticationToken = lens _udvAuthenticationToken (\ s a -> s{_udvAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The status of the version.
+udvVersionStatus :: Lens' UpdateDocumentVersion (Maybe DocumentVersionStatus)
+udvVersionStatus = lens _udvVersionStatus (\ s a -> s{_udvVersionStatus = a});
+
+-- | The ID of the document.
+udvDocumentId :: Lens' UpdateDocumentVersion Text
+udvDocumentId = lens _udvDocumentId (\ s a -> s{_udvDocumentId = a});
+
+-- | The version ID of the document.
+udvVersionId :: Lens' UpdateDocumentVersion Text
+udvVersionId = lens _udvVersionId (\ s a -> s{_udvVersionId = a});
+
+instance AWSRequest UpdateDocumentVersion where
+        type Rs UpdateDocumentVersion =
+             UpdateDocumentVersionResponse
+        request = patchJSON workDocs
+        response = receiveNull UpdateDocumentVersionResponse'
+
+instance Hashable UpdateDocumentVersion where
+
+instance NFData UpdateDocumentVersion where
+
+instance ToHeaders UpdateDocumentVersion where
+        toHeaders UpdateDocumentVersion'{..}
+          = mconcat
+              ["Authentication" =# _udvAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON UpdateDocumentVersion where
+        toJSON UpdateDocumentVersion'{..}
+          = object
+              (catMaybes
+                 [("VersionStatus" .=) <$> _udvVersionStatus])
+
+instance ToPath UpdateDocumentVersion where
+        toPath UpdateDocumentVersion'{..}
+          = mconcat
+              ["/api/v1/documents/", toBS _udvDocumentId,
+               "/versions/", toBS _udvVersionId]
+
+instance ToQuery UpdateDocumentVersion where
+        toQuery = const mempty
+
+-- | /See:/ 'updateDocumentVersionResponse' smart constructor.
+data UpdateDocumentVersionResponse =
+  UpdateDocumentVersionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDocumentVersionResponse' with the minimum fields required to make a request.
+--
+updateDocumentVersionResponse
+    :: UpdateDocumentVersionResponse
+updateDocumentVersionResponse = UpdateDocumentVersionResponse'
+
+
+instance NFData UpdateDocumentVersionResponse where
diff --git a/gen/Network/AWS/WorkDocs/UpdateFolder.hs b/gen/Network/AWS/WorkDocs/UpdateFolder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/UpdateFolder.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.WorkDocs.UpdateFolder
+-- 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)
+--
+-- Updates the specified attributes of the specified folder. The user must have access to both the folder and its parent folder, if applicable.
+--
+--
+module Network.AWS.WorkDocs.UpdateFolder
+    (
+    -- * Creating a Request
+      updateFolder
+    , UpdateFolder
+    -- * Request Lenses
+    , ufParentFolderId
+    , ufAuthenticationToken
+    , ufName
+    , ufResourceState
+    , ufFolderId
+
+    -- * Destructuring the Response
+    , updateFolderResponse
+    , UpdateFolderResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'updateFolder' smart constructor.
+data UpdateFolder = UpdateFolder'
+  { _ufParentFolderId      :: !(Maybe Text)
+  , _ufAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _ufName                :: !(Maybe Text)
+  , _ufResourceState       :: !(Maybe ResourceStateType)
+  , _ufFolderId            :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateFolder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufParentFolderId' - The ID of the parent folder.
+--
+-- * 'ufAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'ufName' - The name of the folder.
+--
+-- * 'ufResourceState' - The resource state of the folder. Note that only ACTIVE and RECYCLED are accepted values from the API.
+--
+-- * 'ufFolderId' - The ID of the folder.
+updateFolder
+    :: Text -- ^ 'ufFolderId'
+    -> UpdateFolder
+updateFolder pFolderId_ =
+  UpdateFolder'
+  { _ufParentFolderId = Nothing
+  , _ufAuthenticationToken = Nothing
+  , _ufName = Nothing
+  , _ufResourceState = Nothing
+  , _ufFolderId = pFolderId_
+  }
+
+
+-- | The ID of the parent folder.
+ufParentFolderId :: Lens' UpdateFolder (Maybe Text)
+ufParentFolderId = lens _ufParentFolderId (\ s a -> s{_ufParentFolderId = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+ufAuthenticationToken :: Lens' UpdateFolder (Maybe Text)
+ufAuthenticationToken = lens _ufAuthenticationToken (\ s a -> s{_ufAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The name of the folder.
+ufName :: Lens' UpdateFolder (Maybe Text)
+ufName = lens _ufName (\ s a -> s{_ufName = a});
+
+-- | The resource state of the folder. Note that only ACTIVE and RECYCLED are accepted values from the API.
+ufResourceState :: Lens' UpdateFolder (Maybe ResourceStateType)
+ufResourceState = lens _ufResourceState (\ s a -> s{_ufResourceState = a});
+
+-- | The ID of the folder.
+ufFolderId :: Lens' UpdateFolder Text
+ufFolderId = lens _ufFolderId (\ s a -> s{_ufFolderId = a});
+
+instance AWSRequest UpdateFolder where
+        type Rs UpdateFolder = UpdateFolderResponse
+        request = patchJSON workDocs
+        response = receiveNull UpdateFolderResponse'
+
+instance Hashable UpdateFolder where
+
+instance NFData UpdateFolder where
+
+instance ToHeaders UpdateFolder where
+        toHeaders UpdateFolder'{..}
+          = mconcat
+              ["Authentication" =# _ufAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON UpdateFolder where
+        toJSON UpdateFolder'{..}
+          = object
+              (catMaybes
+                 [("ParentFolderId" .=) <$> _ufParentFolderId,
+                  ("Name" .=) <$> _ufName,
+                  ("ResourceState" .=) <$> _ufResourceState])
+
+instance ToPath UpdateFolder where
+        toPath UpdateFolder'{..}
+          = mconcat ["/api/v1/folders/", toBS _ufFolderId]
+
+instance ToQuery UpdateFolder where
+        toQuery = const mempty
+
+-- | /See:/ 'updateFolderResponse' smart constructor.
+data UpdateFolderResponse =
+  UpdateFolderResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateFolderResponse' with the minimum fields required to make a request.
+--
+updateFolderResponse
+    :: UpdateFolderResponse
+updateFolderResponse = UpdateFolderResponse'
+
+
+instance NFData UpdateFolderResponse where
diff --git a/gen/Network/AWS/WorkDocs/UpdateUser.hs b/gen/Network/AWS/WorkDocs/UpdateUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/UpdateUser.hs
@@ -0,0 +1,202 @@
+{-# 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.WorkDocs.UpdateUser
+-- 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)
+--
+-- Updates the specified attributes of the specified user, and grants or revokes administrative privileges to the Amazon WorkDocs site.
+--
+--
+module Network.AWS.WorkDocs.UpdateUser
+    (
+    -- * Creating a Request
+      updateUser
+    , UpdateUser
+    -- * Request Lenses
+    , uuGivenName
+    , uuLocale
+    , uuAuthenticationToken
+    , uuStorageRule
+    , uuType
+    , uuSurname
+    , uuTimeZoneId
+    , uuUserId
+
+    -- * Destructuring the Response
+    , updateUserResponse
+    , UpdateUserResponse
+    -- * Response Lenses
+    , uursUser
+    , uursResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.WorkDocs.Types
+import Network.AWS.WorkDocs.Types.Product
+
+-- | /See:/ 'updateUser' smart constructor.
+data UpdateUser = UpdateUser'
+  { _uuGivenName           :: !(Maybe Text)
+  , _uuLocale              :: !(Maybe LocaleType)
+  , _uuAuthenticationToken :: !(Maybe (Sensitive Text))
+  , _uuStorageRule         :: !(Maybe StorageRuleType)
+  , _uuType                :: !(Maybe UserType)
+  , _uuSurname             :: !(Maybe Text)
+  , _uuTimeZoneId          :: !(Maybe Text)
+  , _uuUserId              :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uuGivenName' - The given name of the user.
+--
+-- * 'uuLocale' - The locale of the user.
+--
+-- * 'uuAuthenticationToken' - Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+--
+-- * 'uuStorageRule' - The amount of storage for the user.
+--
+-- * 'uuType' - The type of the user.
+--
+-- * 'uuSurname' - The surname of the user.
+--
+-- * 'uuTimeZoneId' - The time zone ID of the user.
+--
+-- * 'uuUserId' - The ID of the user.
+updateUser
+    :: Text -- ^ 'uuUserId'
+    -> UpdateUser
+updateUser pUserId_ =
+  UpdateUser'
+  { _uuGivenName = Nothing
+  , _uuLocale = Nothing
+  , _uuAuthenticationToken = Nothing
+  , _uuStorageRule = Nothing
+  , _uuType = Nothing
+  , _uuSurname = Nothing
+  , _uuTimeZoneId = Nothing
+  , _uuUserId = pUserId_
+  }
+
+
+-- | The given name of the user.
+uuGivenName :: Lens' UpdateUser (Maybe Text)
+uuGivenName = lens _uuGivenName (\ s a -> s{_uuGivenName = a});
+
+-- | The locale of the user.
+uuLocale :: Lens' UpdateUser (Maybe LocaleType)
+uuLocale = lens _uuLocale (\ s a -> s{_uuLocale = a});
+
+-- | Amazon WorkDocs authentication token. This field should not be set when using administrative API actions, as in accessing the API using AWS credentials.
+uuAuthenticationToken :: Lens' UpdateUser (Maybe Text)
+uuAuthenticationToken = lens _uuAuthenticationToken (\ s a -> s{_uuAuthenticationToken = a}) . mapping _Sensitive;
+
+-- | The amount of storage for the user.
+uuStorageRule :: Lens' UpdateUser (Maybe StorageRuleType)
+uuStorageRule = lens _uuStorageRule (\ s a -> s{_uuStorageRule = a});
+
+-- | The type of the user.
+uuType :: Lens' UpdateUser (Maybe UserType)
+uuType = lens _uuType (\ s a -> s{_uuType = a});
+
+-- | The surname of the user.
+uuSurname :: Lens' UpdateUser (Maybe Text)
+uuSurname = lens _uuSurname (\ s a -> s{_uuSurname = a});
+
+-- | The time zone ID of the user.
+uuTimeZoneId :: Lens' UpdateUser (Maybe Text)
+uuTimeZoneId = lens _uuTimeZoneId (\ s a -> s{_uuTimeZoneId = a});
+
+-- | The ID of the user.
+uuUserId :: Lens' UpdateUser Text
+uuUserId = lens _uuUserId (\ s a -> s{_uuUserId = a});
+
+instance AWSRequest UpdateUser where
+        type Rs UpdateUser = UpdateUserResponse
+        request = patchJSON workDocs
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateUserResponse' <$>
+                   (x .?> "User") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateUser where
+
+instance NFData UpdateUser where
+
+instance ToHeaders UpdateUser where
+        toHeaders UpdateUser'{..}
+          = mconcat
+              ["Authentication" =# _uuAuthenticationToken,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToJSON UpdateUser where
+        toJSON UpdateUser'{..}
+          = object
+              (catMaybes
+                 [("GivenName" .=) <$> _uuGivenName,
+                  ("Locale" .=) <$> _uuLocale,
+                  ("StorageRule" .=) <$> _uuStorageRule,
+                  ("Type" .=) <$> _uuType,
+                  ("Surname" .=) <$> _uuSurname,
+                  ("TimeZoneId" .=) <$> _uuTimeZoneId])
+
+instance ToPath UpdateUser where
+        toPath UpdateUser'{..}
+          = mconcat ["/api/v1/users/", toBS _uuUserId]
+
+instance ToQuery UpdateUser where
+        toQuery = const mempty
+
+-- | /See:/ 'updateUserResponse' smart constructor.
+data UpdateUserResponse = UpdateUserResponse'
+  { _uursUser           :: !(Maybe User)
+  , _uursResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateUserResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uursUser' - The user information.
+--
+-- * 'uursResponseStatus' - -- | The response status code.
+updateUserResponse
+    :: Int -- ^ 'uursResponseStatus'
+    -> UpdateUserResponse
+updateUserResponse pResponseStatus_ =
+  UpdateUserResponse'
+  {_uursUser = Nothing, _uursResponseStatus = pResponseStatus_}
+
+
+-- | The user information.
+uursUser :: Lens' UpdateUserResponse (Maybe User)
+uursUser = lens _uursUser (\ s a -> s{_uursUser = a});
+
+-- | -- | The response status code.
+uursResponseStatus :: Lens' UpdateUserResponse Int
+uursResponseStatus = lens _uursResponseStatus (\ s a -> s{_uursResponseStatus = a});
+
+instance NFData UpdateUserResponse where
diff --git a/gen/Network/AWS/WorkDocs/Waiters.hs b/gen/Network/AWS/WorkDocs/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/WorkDocs/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.WorkDocs.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.WorkDocs.Waiters where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Waiter
+import Network.AWS.WorkDocs.Types
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.WorkDocs
+import Test.AWS.WorkDocs.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "WorkDocs"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/WorkDocs.hs b/test/Test/AWS/Gen/WorkDocs.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/WorkDocs.hs
@@ -0,0 +1,741 @@
+{-# 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.WorkDocs
+-- 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.WorkDocs where
+
+import Data.Proxy
+import Network.AWS.WorkDocs
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.AWS.WorkDocs.Internal
+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"
+--         [ requestDeleteLabels $
+--             deleteLabels
+--
+--         , requestAbortDocumentVersionUpload $
+--             abortDocumentVersionUpload
+--
+--         , requestGetDocumentPath $
+--             getDocumentPath
+--
+--         , requestCreateComment $
+--             createComment
+--
+--         , requestDescribeUsers $
+--             describeUsers
+--
+--         , requestDeleteFolder $
+--             deleteFolder
+--
+--         , requestUpdateFolder $
+--             updateFolder
+--
+--         , requestDeleteCustomMetadata $
+--             deleteCustomMetadata
+--
+--         , requestDescribeResourcePermissions $
+--             describeResourcePermissions
+--
+--         , requestDeleteNotificationSubscription $
+--             deleteNotificationSubscription
+--
+--         , requestCreateFolder $
+--             createFolder
+--
+--         , requestCreateNotificationSubscription $
+--             createNotificationSubscription
+--
+--         , requestCreateCustomMetadata $
+--             createCustomMetadata
+--
+--         , requestGetFolderPath $
+--             getFolderPath
+--
+--         , requestDescribeComments $
+--             describeComments
+--
+--         , requestDeleteFolderContents $
+--             deleteFolderContents
+--
+--         , requestRemoveAllResourcePermissions $
+--             removeAllResourcePermissions
+--
+--         , requestGetFolder $
+--             getFolder
+--
+--         , requestDescribeNotificationSubscriptions $
+--             describeNotificationSubscriptions
+--
+--         , requestActivateUser $
+--             activateUser
+--
+--         , requestDescribeDocumentVersions $
+--             describeDocumentVersions
+--
+--         , requestGetDocumentVersion $
+--             getDocumentVersion
+--
+--         , requestDescribeActivities $
+--             describeActivities
+--
+--         , requestDescribeRootFolders $
+--             describeRootFolders
+--
+--         , requestGetCurrentUser $
+--             getCurrentUser
+--
+--         , requestDeactivateUser $
+--             deactivateUser
+--
+--         , requestGetDocument $
+--             getDocument
+--
+--         , requestDescribeFolderContents $
+--             describeFolderContents
+--
+--         , requestCreateLabels $
+--             createLabels
+--
+--         , requestUpdateDocumentVersion $
+--             updateDocumentVersion
+--
+--         , requestRemoveResourcePermission $
+--             removeResourcePermission
+--
+--         , requestDeleteComment $
+--             deleteComment
+--
+--         , requestInitiateDocumentVersionUpload $
+--             initiateDocumentVersionUpload
+--
+--         , requestCreateUser $
+--             createUser
+--
+--         , requestUpdateUser $
+--             updateUser
+--
+--         , requestDeleteUser $
+--             deleteUser
+--
+--         , requestAddResourcePermissions $
+--             addResourcePermissions
+--
+--         , requestUpdateDocument $
+--             updateDocument
+--
+--         , requestDeleteDocument $
+--             deleteDocument
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseDeleteLabels $
+--             deleteLabelsResponse
+--
+--         , responseAbortDocumentVersionUpload $
+--             abortDocumentVersionUploadResponse
+--
+--         , responseGetDocumentPath $
+--             getDocumentPathResponse
+--
+--         , responseCreateComment $
+--             createCommentResponse
+--
+--         , responseDescribeUsers $
+--             describeUsersResponse
+--
+--         , responseDeleteFolder $
+--             deleteFolderResponse
+--
+--         , responseUpdateFolder $
+--             updateFolderResponse
+--
+--         , responseDeleteCustomMetadata $
+--             deleteCustomMetadataResponse
+--
+--         , responseDescribeResourcePermissions $
+--             describeResourcePermissionsResponse
+--
+--         , responseDeleteNotificationSubscription $
+--             deleteNotificationSubscriptionResponse
+--
+--         , responseCreateFolder $
+--             createFolderResponse
+--
+--         , responseCreateNotificationSubscription $
+--             createNotificationSubscriptionResponse
+--
+--         , responseCreateCustomMetadata $
+--             createCustomMetadataResponse
+--
+--         , responseGetFolderPath $
+--             getFolderPathResponse
+--
+--         , responseDescribeComments $
+--             describeCommentsResponse
+--
+--         , responseDeleteFolderContents $
+--             deleteFolderContentsResponse
+--
+--         , responseRemoveAllResourcePermissions $
+--             removeAllResourcePermissionsResponse
+--
+--         , responseGetFolder $
+--             getFolderResponse
+--
+--         , responseDescribeNotificationSubscriptions $
+--             describeNotificationSubscriptionsResponse
+--
+--         , responseActivateUser $
+--             activateUserResponse
+--
+--         , responseDescribeDocumentVersions $
+--             describeDocumentVersionsResponse
+--
+--         , responseGetDocumentVersion $
+--             getDocumentVersionResponse
+--
+--         , responseDescribeActivities $
+--             describeActivitiesResponse
+--
+--         , responseDescribeRootFolders $
+--             describeRootFoldersResponse
+--
+--         , responseGetCurrentUser $
+--             getCurrentUserResponse
+--
+--         , responseDeactivateUser $
+--             deactivateUserResponse
+--
+--         , responseGetDocument $
+--             getDocumentResponse
+--
+--         , responseDescribeFolderContents $
+--             describeFolderContentsResponse
+--
+--         , responseCreateLabels $
+--             createLabelsResponse
+--
+--         , responseUpdateDocumentVersion $
+--             updateDocumentVersionResponse
+--
+--         , responseRemoveResourcePermission $
+--             removeResourcePermissionResponse
+--
+--         , responseDeleteComment $
+--             deleteCommentResponse
+--
+--         , responseInitiateDocumentVersionUpload $
+--             initiateDocumentVersionUploadResponse
+--
+--         , responseCreateUser $
+--             createUserResponse
+--
+--         , responseUpdateUser $
+--             updateUserResponse
+--
+--         , responseDeleteUser $
+--             deleteUserResponse
+--
+--         , responseAddResourcePermissions $
+--             addResourcePermissionsResponse
+--
+--         , responseUpdateDocument $
+--             updateDocumentResponse
+--
+--         , responseDeleteDocument $
+--             deleteDocumentResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestDeleteLabels :: DeleteLabels -> TestTree
+requestDeleteLabels = req
+    "DeleteLabels"
+    "fixture/DeleteLabels.yaml"
+
+requestAbortDocumentVersionUpload :: AbortDocumentVersionUpload -> TestTree
+requestAbortDocumentVersionUpload = req
+    "AbortDocumentVersionUpload"
+    "fixture/AbortDocumentVersionUpload.yaml"
+
+requestGetDocumentPath :: GetDocumentPath -> TestTree
+requestGetDocumentPath = req
+    "GetDocumentPath"
+    "fixture/GetDocumentPath.yaml"
+
+requestCreateComment :: CreateComment -> TestTree
+requestCreateComment = req
+    "CreateComment"
+    "fixture/CreateComment.yaml"
+
+requestDescribeUsers :: DescribeUsers -> TestTree
+requestDescribeUsers = req
+    "DescribeUsers"
+    "fixture/DescribeUsers.yaml"
+
+requestDeleteFolder :: DeleteFolder -> TestTree
+requestDeleteFolder = req
+    "DeleteFolder"
+    "fixture/DeleteFolder.yaml"
+
+requestUpdateFolder :: UpdateFolder -> TestTree
+requestUpdateFolder = req
+    "UpdateFolder"
+    "fixture/UpdateFolder.yaml"
+
+requestDeleteCustomMetadata :: DeleteCustomMetadata -> TestTree
+requestDeleteCustomMetadata = req
+    "DeleteCustomMetadata"
+    "fixture/DeleteCustomMetadata.yaml"
+
+requestDescribeResourcePermissions :: DescribeResourcePermissions -> TestTree
+requestDescribeResourcePermissions = req
+    "DescribeResourcePermissions"
+    "fixture/DescribeResourcePermissions.yaml"
+
+requestDeleteNotificationSubscription :: DeleteNotificationSubscription -> TestTree
+requestDeleteNotificationSubscription = req
+    "DeleteNotificationSubscription"
+    "fixture/DeleteNotificationSubscription.yaml"
+
+requestCreateFolder :: CreateFolder -> TestTree
+requestCreateFolder = req
+    "CreateFolder"
+    "fixture/CreateFolder.yaml"
+
+requestCreateNotificationSubscription :: CreateNotificationSubscription -> TestTree
+requestCreateNotificationSubscription = req
+    "CreateNotificationSubscription"
+    "fixture/CreateNotificationSubscription.yaml"
+
+requestCreateCustomMetadata :: CreateCustomMetadata -> TestTree
+requestCreateCustomMetadata = req
+    "CreateCustomMetadata"
+    "fixture/CreateCustomMetadata.yaml"
+
+requestGetFolderPath :: GetFolderPath -> TestTree
+requestGetFolderPath = req
+    "GetFolderPath"
+    "fixture/GetFolderPath.yaml"
+
+requestDescribeComments :: DescribeComments -> TestTree
+requestDescribeComments = req
+    "DescribeComments"
+    "fixture/DescribeComments.yaml"
+
+requestDeleteFolderContents :: DeleteFolderContents -> TestTree
+requestDeleteFolderContents = req
+    "DeleteFolderContents"
+    "fixture/DeleteFolderContents.yaml"
+
+requestRemoveAllResourcePermissions :: RemoveAllResourcePermissions -> TestTree
+requestRemoveAllResourcePermissions = req
+    "RemoveAllResourcePermissions"
+    "fixture/RemoveAllResourcePermissions.yaml"
+
+requestGetFolder :: GetFolder -> TestTree
+requestGetFolder = req
+    "GetFolder"
+    "fixture/GetFolder.yaml"
+
+requestDescribeNotificationSubscriptions :: DescribeNotificationSubscriptions -> TestTree
+requestDescribeNotificationSubscriptions = req
+    "DescribeNotificationSubscriptions"
+    "fixture/DescribeNotificationSubscriptions.yaml"
+
+requestActivateUser :: ActivateUser -> TestTree
+requestActivateUser = req
+    "ActivateUser"
+    "fixture/ActivateUser.yaml"
+
+requestDescribeDocumentVersions :: DescribeDocumentVersions -> TestTree
+requestDescribeDocumentVersions = req
+    "DescribeDocumentVersions"
+    "fixture/DescribeDocumentVersions.yaml"
+
+requestGetDocumentVersion :: GetDocumentVersion -> TestTree
+requestGetDocumentVersion = req
+    "GetDocumentVersion"
+    "fixture/GetDocumentVersion.yaml"
+
+requestDescribeActivities :: DescribeActivities -> TestTree
+requestDescribeActivities = req
+    "DescribeActivities"
+    "fixture/DescribeActivities.yaml"
+
+requestDescribeRootFolders :: DescribeRootFolders -> TestTree
+requestDescribeRootFolders = req
+    "DescribeRootFolders"
+    "fixture/DescribeRootFolders.yaml"
+
+requestGetCurrentUser :: GetCurrentUser -> TestTree
+requestGetCurrentUser = req
+    "GetCurrentUser"
+    "fixture/GetCurrentUser.yaml"
+
+requestDeactivateUser :: DeactivateUser -> TestTree
+requestDeactivateUser = req
+    "DeactivateUser"
+    "fixture/DeactivateUser.yaml"
+
+requestGetDocument :: GetDocument -> TestTree
+requestGetDocument = req
+    "GetDocument"
+    "fixture/GetDocument.yaml"
+
+requestDescribeFolderContents :: DescribeFolderContents -> TestTree
+requestDescribeFolderContents = req
+    "DescribeFolderContents"
+    "fixture/DescribeFolderContents.yaml"
+
+requestCreateLabels :: CreateLabels -> TestTree
+requestCreateLabels = req
+    "CreateLabels"
+    "fixture/CreateLabels.yaml"
+
+requestUpdateDocumentVersion :: UpdateDocumentVersion -> TestTree
+requestUpdateDocumentVersion = req
+    "UpdateDocumentVersion"
+    "fixture/UpdateDocumentVersion.yaml"
+
+requestRemoveResourcePermission :: RemoveResourcePermission -> TestTree
+requestRemoveResourcePermission = req
+    "RemoveResourcePermission"
+    "fixture/RemoveResourcePermission.yaml"
+
+requestDeleteComment :: DeleteComment -> TestTree
+requestDeleteComment = req
+    "DeleteComment"
+    "fixture/DeleteComment.yaml"
+
+requestInitiateDocumentVersionUpload :: InitiateDocumentVersionUpload -> TestTree
+requestInitiateDocumentVersionUpload = req
+    "InitiateDocumentVersionUpload"
+    "fixture/InitiateDocumentVersionUpload.yaml"
+
+requestCreateUser :: CreateUser -> TestTree
+requestCreateUser = req
+    "CreateUser"
+    "fixture/CreateUser.yaml"
+
+requestUpdateUser :: UpdateUser -> TestTree
+requestUpdateUser = req
+    "UpdateUser"
+    "fixture/UpdateUser.yaml"
+
+requestDeleteUser :: DeleteUser -> TestTree
+requestDeleteUser = req
+    "DeleteUser"
+    "fixture/DeleteUser.yaml"
+
+requestAddResourcePermissions :: AddResourcePermissions -> TestTree
+requestAddResourcePermissions = req
+    "AddResourcePermissions"
+    "fixture/AddResourcePermissions.yaml"
+
+requestUpdateDocument :: UpdateDocument -> TestTree
+requestUpdateDocument = req
+    "UpdateDocument"
+    "fixture/UpdateDocument.yaml"
+
+requestDeleteDocument :: DeleteDocument -> TestTree
+requestDeleteDocument = req
+    "DeleteDocument"
+    "fixture/DeleteDocument.yaml"
+
+-- Responses
+
+responseDeleteLabels :: DeleteLabelsResponse -> TestTree
+responseDeleteLabels = res
+    "DeleteLabelsResponse"
+    "fixture/DeleteLabelsResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteLabels)
+
+responseAbortDocumentVersionUpload :: AbortDocumentVersionUploadResponse -> TestTree
+responseAbortDocumentVersionUpload = res
+    "AbortDocumentVersionUploadResponse"
+    "fixture/AbortDocumentVersionUploadResponse.proto"
+    workDocs
+    (Proxy :: Proxy AbortDocumentVersionUpload)
+
+responseGetDocumentPath :: GetDocumentPathResponse -> TestTree
+responseGetDocumentPath = res
+    "GetDocumentPathResponse"
+    "fixture/GetDocumentPathResponse.proto"
+    workDocs
+    (Proxy :: Proxy GetDocumentPath)
+
+responseCreateComment :: CreateCommentResponse -> TestTree
+responseCreateComment = res
+    "CreateCommentResponse"
+    "fixture/CreateCommentResponse.proto"
+    workDocs
+    (Proxy :: Proxy CreateComment)
+
+responseDescribeUsers :: DescribeUsersResponse -> TestTree
+responseDescribeUsers = res
+    "DescribeUsersResponse"
+    "fixture/DescribeUsersResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeUsers)
+
+responseDeleteFolder :: DeleteFolderResponse -> TestTree
+responseDeleteFolder = res
+    "DeleteFolderResponse"
+    "fixture/DeleteFolderResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteFolder)
+
+responseUpdateFolder :: UpdateFolderResponse -> TestTree
+responseUpdateFolder = res
+    "UpdateFolderResponse"
+    "fixture/UpdateFolderResponse.proto"
+    workDocs
+    (Proxy :: Proxy UpdateFolder)
+
+responseDeleteCustomMetadata :: DeleteCustomMetadataResponse -> TestTree
+responseDeleteCustomMetadata = res
+    "DeleteCustomMetadataResponse"
+    "fixture/DeleteCustomMetadataResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteCustomMetadata)
+
+responseDescribeResourcePermissions :: DescribeResourcePermissionsResponse -> TestTree
+responseDescribeResourcePermissions = res
+    "DescribeResourcePermissionsResponse"
+    "fixture/DescribeResourcePermissionsResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeResourcePermissions)
+
+responseDeleteNotificationSubscription :: DeleteNotificationSubscriptionResponse -> TestTree
+responseDeleteNotificationSubscription = res
+    "DeleteNotificationSubscriptionResponse"
+    "fixture/DeleteNotificationSubscriptionResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteNotificationSubscription)
+
+responseCreateFolder :: CreateFolderResponse -> TestTree
+responseCreateFolder = res
+    "CreateFolderResponse"
+    "fixture/CreateFolderResponse.proto"
+    workDocs
+    (Proxy :: Proxy CreateFolder)
+
+responseCreateNotificationSubscription :: CreateNotificationSubscriptionResponse -> TestTree
+responseCreateNotificationSubscription = res
+    "CreateNotificationSubscriptionResponse"
+    "fixture/CreateNotificationSubscriptionResponse.proto"
+    workDocs
+    (Proxy :: Proxy CreateNotificationSubscription)
+
+responseCreateCustomMetadata :: CreateCustomMetadataResponse -> TestTree
+responseCreateCustomMetadata = res
+    "CreateCustomMetadataResponse"
+    "fixture/CreateCustomMetadataResponse.proto"
+    workDocs
+    (Proxy :: Proxy CreateCustomMetadata)
+
+responseGetFolderPath :: GetFolderPathResponse -> TestTree
+responseGetFolderPath = res
+    "GetFolderPathResponse"
+    "fixture/GetFolderPathResponse.proto"
+    workDocs
+    (Proxy :: Proxy GetFolderPath)
+
+responseDescribeComments :: DescribeCommentsResponse -> TestTree
+responseDescribeComments = res
+    "DescribeCommentsResponse"
+    "fixture/DescribeCommentsResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeComments)
+
+responseDeleteFolderContents :: DeleteFolderContentsResponse -> TestTree
+responseDeleteFolderContents = res
+    "DeleteFolderContentsResponse"
+    "fixture/DeleteFolderContentsResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteFolderContents)
+
+responseRemoveAllResourcePermissions :: RemoveAllResourcePermissionsResponse -> TestTree
+responseRemoveAllResourcePermissions = res
+    "RemoveAllResourcePermissionsResponse"
+    "fixture/RemoveAllResourcePermissionsResponse.proto"
+    workDocs
+    (Proxy :: Proxy RemoveAllResourcePermissions)
+
+responseGetFolder :: GetFolderResponse -> TestTree
+responseGetFolder = res
+    "GetFolderResponse"
+    "fixture/GetFolderResponse.proto"
+    workDocs
+    (Proxy :: Proxy GetFolder)
+
+responseDescribeNotificationSubscriptions :: DescribeNotificationSubscriptionsResponse -> TestTree
+responseDescribeNotificationSubscriptions = res
+    "DescribeNotificationSubscriptionsResponse"
+    "fixture/DescribeNotificationSubscriptionsResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeNotificationSubscriptions)
+
+responseActivateUser :: ActivateUserResponse -> TestTree
+responseActivateUser = res
+    "ActivateUserResponse"
+    "fixture/ActivateUserResponse.proto"
+    workDocs
+    (Proxy :: Proxy ActivateUser)
+
+responseDescribeDocumentVersions :: DescribeDocumentVersionsResponse -> TestTree
+responseDescribeDocumentVersions = res
+    "DescribeDocumentVersionsResponse"
+    "fixture/DescribeDocumentVersionsResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeDocumentVersions)
+
+responseGetDocumentVersion :: GetDocumentVersionResponse -> TestTree
+responseGetDocumentVersion = res
+    "GetDocumentVersionResponse"
+    "fixture/GetDocumentVersionResponse.proto"
+    workDocs
+    (Proxy :: Proxy GetDocumentVersion)
+
+responseDescribeActivities :: DescribeActivitiesResponse -> TestTree
+responseDescribeActivities = res
+    "DescribeActivitiesResponse"
+    "fixture/DescribeActivitiesResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeActivities)
+
+responseDescribeRootFolders :: DescribeRootFoldersResponse -> TestTree
+responseDescribeRootFolders = res
+    "DescribeRootFoldersResponse"
+    "fixture/DescribeRootFoldersResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeRootFolders)
+
+responseGetCurrentUser :: GetCurrentUserResponse -> TestTree
+responseGetCurrentUser = res
+    "GetCurrentUserResponse"
+    "fixture/GetCurrentUserResponse.proto"
+    workDocs
+    (Proxy :: Proxy GetCurrentUser)
+
+responseDeactivateUser :: DeactivateUserResponse -> TestTree
+responseDeactivateUser = res
+    "DeactivateUserResponse"
+    "fixture/DeactivateUserResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeactivateUser)
+
+responseGetDocument :: GetDocumentResponse -> TestTree
+responseGetDocument = res
+    "GetDocumentResponse"
+    "fixture/GetDocumentResponse.proto"
+    workDocs
+    (Proxy :: Proxy GetDocument)
+
+responseDescribeFolderContents :: DescribeFolderContentsResponse -> TestTree
+responseDescribeFolderContents = res
+    "DescribeFolderContentsResponse"
+    "fixture/DescribeFolderContentsResponse.proto"
+    workDocs
+    (Proxy :: Proxy DescribeFolderContents)
+
+responseCreateLabels :: CreateLabelsResponse -> TestTree
+responseCreateLabels = res
+    "CreateLabelsResponse"
+    "fixture/CreateLabelsResponse.proto"
+    workDocs
+    (Proxy :: Proxy CreateLabels)
+
+responseUpdateDocumentVersion :: UpdateDocumentVersionResponse -> TestTree
+responseUpdateDocumentVersion = res
+    "UpdateDocumentVersionResponse"
+    "fixture/UpdateDocumentVersionResponse.proto"
+    workDocs
+    (Proxy :: Proxy UpdateDocumentVersion)
+
+responseRemoveResourcePermission :: RemoveResourcePermissionResponse -> TestTree
+responseRemoveResourcePermission = res
+    "RemoveResourcePermissionResponse"
+    "fixture/RemoveResourcePermissionResponse.proto"
+    workDocs
+    (Proxy :: Proxy RemoveResourcePermission)
+
+responseDeleteComment :: DeleteCommentResponse -> TestTree
+responseDeleteComment = res
+    "DeleteCommentResponse"
+    "fixture/DeleteCommentResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteComment)
+
+responseInitiateDocumentVersionUpload :: InitiateDocumentVersionUploadResponse -> TestTree
+responseInitiateDocumentVersionUpload = res
+    "InitiateDocumentVersionUploadResponse"
+    "fixture/InitiateDocumentVersionUploadResponse.proto"
+    workDocs
+    (Proxy :: Proxy InitiateDocumentVersionUpload)
+
+responseCreateUser :: CreateUserResponse -> TestTree
+responseCreateUser = res
+    "CreateUserResponse"
+    "fixture/CreateUserResponse.proto"
+    workDocs
+    (Proxy :: Proxy CreateUser)
+
+responseUpdateUser :: UpdateUserResponse -> TestTree
+responseUpdateUser = res
+    "UpdateUserResponse"
+    "fixture/UpdateUserResponse.proto"
+    workDocs
+    (Proxy :: Proxy UpdateUser)
+
+responseDeleteUser :: DeleteUserResponse -> TestTree
+responseDeleteUser = res
+    "DeleteUserResponse"
+    "fixture/DeleteUserResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteUser)
+
+responseAddResourcePermissions :: AddResourcePermissionsResponse -> TestTree
+responseAddResourcePermissions = res
+    "AddResourcePermissionsResponse"
+    "fixture/AddResourcePermissionsResponse.proto"
+    workDocs
+    (Proxy :: Proxy AddResourcePermissions)
+
+responseUpdateDocument :: UpdateDocumentResponse -> TestTree
+responseUpdateDocument = res
+    "UpdateDocumentResponse"
+    "fixture/UpdateDocumentResponse.proto"
+    workDocs
+    (Proxy :: Proxy UpdateDocument)
+
+responseDeleteDocument :: DeleteDocumentResponse -> TestTree
+responseDeleteDocument = res
+    "DeleteDocumentResponse"
+    "fixture/DeleteDocumentResponse.proto"
+    workDocs
+    (Proxy :: Proxy DeleteDocument)
diff --git a/test/Test/AWS/WorkDocs.hs b/test/Test/AWS/WorkDocs.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/WorkDocs.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.AWS.WorkDocs
+-- 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.WorkDocs
+    ( tests
+    , fixtures
+    ) where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/WorkDocs/Internal.hs b/test/Test/AWS/WorkDocs/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/WorkDocs/Internal.hs
@@ -0,0 +1,9 @@
+-- |
+-- Module      : Test.AWS.WorkDocs.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.WorkDocs.Internal where
