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 Budgets SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.4.5`
+
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-budgets)
+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.Budgets](http://hackage.haskell.org/package/amazonka-budgets/docs/Network-AWS-Budgets.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-budgets` 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-budgets.cabal b/amazonka-budgets.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-budgets.cabal
@@ -0,0 +1,93 @@
+name:                  amazonka-budgets
+version:               1.4.5
+synopsis:              Amazon Budgets SDK.
+homepage:              https://github.com/brendanhay/amazonka
+bug-reports:           https://github.com/brendanhay/amazonka/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2013-2016 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.Budgets" or <https://aws.amazon.com/documentation/ the AWS documentation>
+    to get started.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/amazonka.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.AWS.Budgets
+        , Network.AWS.Budgets.CreateBudget
+        , Network.AWS.Budgets.CreateNotification
+        , Network.AWS.Budgets.CreateSubscriber
+        , Network.AWS.Budgets.DeleteBudget
+        , Network.AWS.Budgets.DeleteNotification
+        , Network.AWS.Budgets.DeleteSubscriber
+        , Network.AWS.Budgets.DescribeBudget
+        , Network.AWS.Budgets.DescribeBudgets
+        , Network.AWS.Budgets.DescribeNotificationsForBudget
+        , Network.AWS.Budgets.DescribeSubscribersForNotification
+        , Network.AWS.Budgets.Types
+        , Network.AWS.Budgets.UpdateBudget
+        , Network.AWS.Budgets.UpdateNotification
+        , Network.AWS.Budgets.UpdateSubscriber
+        , Network.AWS.Budgets.Waiters
+
+    other-modules:
+          Network.AWS.Budgets.Types.Product
+        , Network.AWS.Budgets.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.4.5.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-budgets-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.Budgets
+        , Test.AWS.Gen.Budgets
+        , Test.AWS.Budgets.Internal
+
+    build-depends:
+          amazonka-core == 1.4.5.*
+        , amazonka-test == 1.4.5.*
+        , amazonka-budgets == 1.4.5.*
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/CreateBudget.yaml b/fixture/CreateBudget.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBudget.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/CreateBudgetResponse.proto b/fixture/CreateBudgetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBudgetResponse.proto
diff --git a/fixture/CreateNotification.yaml b/fixture/CreateNotification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNotification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/CreateNotificationResponse.proto b/fixture/CreateNotificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNotificationResponse.proto
diff --git a/fixture/CreateSubscriber.yaml b/fixture/CreateSubscriber.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSubscriber.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/CreateSubscriberResponse.proto b/fixture/CreateSubscriberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSubscriberResponse.proto
diff --git a/fixture/DeleteBudget.yaml b/fixture/DeleteBudget.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBudget.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/DeleteBudgetResponse.proto b/fixture/DeleteBudgetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBudgetResponse.proto
diff --git a/fixture/DeleteNotification.yaml b/fixture/DeleteNotification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNotification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/DeleteNotificationResponse.proto b/fixture/DeleteNotificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNotificationResponse.proto
diff --git a/fixture/DeleteSubscriber.yaml b/fixture/DeleteSubscriber.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSubscriber.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/DeleteSubscriberResponse.proto b/fixture/DeleteSubscriberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSubscriberResponse.proto
diff --git a/fixture/DescribeBudget.yaml b/fixture/DescribeBudget.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBudget.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/DescribeBudgetResponse.proto b/fixture/DescribeBudgetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBudgetResponse.proto
diff --git a/fixture/DescribeBudgets.yaml b/fixture/DescribeBudgets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBudgets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/DescribeBudgetsResponse.proto b/fixture/DescribeBudgetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBudgetsResponse.proto
diff --git a/fixture/DescribeNotificationsForBudget.yaml b/fixture/DescribeNotificationsForBudget.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNotificationsForBudget.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/DescribeNotificationsForBudgetResponse.proto b/fixture/DescribeNotificationsForBudgetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNotificationsForBudgetResponse.proto
diff --git a/fixture/DescribeSubscribersForNotification.yaml b/fixture/DescribeSubscribersForNotification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSubscribersForNotification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/DescribeSubscribersForNotificationResponse.proto b/fixture/DescribeSubscribersForNotificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSubscribersForNotificationResponse.proto
diff --git a/fixture/UpdateBudget.yaml b/fixture/UpdateBudget.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBudget.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/UpdateBudgetResponse.proto b/fixture/UpdateBudgetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBudgetResponse.proto
diff --git a/fixture/UpdateNotification.yaml b/fixture/UpdateNotification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNotification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/UpdateNotificationResponse.proto b/fixture/UpdateNotificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNotificationResponse.proto
diff --git a/fixture/UpdateSubscriber.yaml b/fixture/UpdateSubscriber.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSubscriber.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/budgets/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  budgets.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/UpdateSubscriberResponse.proto b/fixture/UpdateSubscriberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSubscriberResponse.proto
diff --git a/gen/Network/AWS/Budgets.hs b/gen/Network/AWS/Budgets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets.hs
@@ -0,0 +1,207 @@
+{-# 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.Budgets
+-- 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)
+--
+-- All public APIs for AWS Budgets
+module Network.AWS.Budgets
+    (
+    -- * Service Configuration
+      budgets
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidParameterException
+    , _InvalidParameterException
+
+    -- ** InternalErrorException
+    , _InternalErrorException
+
+    -- ** ExpiredNextTokenException
+    , _ExpiredNextTokenException
+
+    -- ** NotFoundException
+    , _NotFoundException
+
+    -- ** InvalidNextTokenException
+    , _InvalidNextTokenException
+
+    -- ** DuplicateRecordException
+    , _DuplicateRecordException
+
+    -- ** CreationLimitExceededException
+    , _CreationLimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeSubscribersForNotification
+    , module Network.AWS.Budgets.DescribeSubscribersForNotification
+
+    -- ** DescribeNotificationsForBudget
+    , module Network.AWS.Budgets.DescribeNotificationsForBudget
+
+    -- ** DescribeBudgets
+    , module Network.AWS.Budgets.DescribeBudgets
+
+    -- ** CreateSubscriber
+    , module Network.AWS.Budgets.CreateSubscriber
+
+    -- ** UpdateBudget
+    , module Network.AWS.Budgets.UpdateBudget
+
+    -- ** DeleteBudget
+    , module Network.AWS.Budgets.DeleteBudget
+
+    -- ** DeleteNotification
+    , module Network.AWS.Budgets.DeleteNotification
+
+    -- ** UpdateNotification
+    , module Network.AWS.Budgets.UpdateNotification
+
+    -- ** DescribeBudget
+    , module Network.AWS.Budgets.DescribeBudget
+
+    -- ** UpdateSubscriber
+    , module Network.AWS.Budgets.UpdateSubscriber
+
+    -- ** DeleteSubscriber
+    , module Network.AWS.Budgets.DeleteSubscriber
+
+    -- ** CreateBudget
+    , module Network.AWS.Budgets.CreateBudget
+
+    -- ** CreateNotification
+    , module Network.AWS.Budgets.CreateNotification
+
+    -- * Types
+
+    -- ** BudgetType
+    , BudgetType (..)
+
+    -- ** ComparisonOperator
+    , ComparisonOperator (..)
+
+    -- ** NotificationType
+    , NotificationType (..)
+
+    -- ** SubscriptionType
+    , SubscriptionType (..)
+
+    -- ** TimeUnit
+    , TimeUnit (..)
+
+    -- ** Budget
+    , Budget
+    , budget
+    , bCalculatedSpend
+    , bCostFilters
+    , bBudgetName
+    , bBudgetLimit
+    , bCostTypes
+    , bTimeUnit
+    , bTimePeriod
+    , bBudgetType
+
+    -- ** CalculatedSpend
+    , CalculatedSpend
+    , calculatedSpend
+    , csForecastedSpend
+    , csActualSpend
+
+    -- ** CostTypes
+    , CostTypes
+    , costTypes
+    , ctIncludeTax
+    , ctIncludeSubscription
+    , ctUseBlended
+
+    -- ** Notification
+    , Notification
+    , notification
+    , nNotificationType
+    , nComparisonOperator
+    , nThreshold
+
+    -- ** NotificationWithSubscribers
+    , NotificationWithSubscribers
+    , notificationWithSubscribers
+    , nwsNotification
+    , nwsSubscribers
+
+    -- ** Spend
+    , Spend
+    , spend
+    , sAmount
+    , sUnit
+
+    -- ** Subscriber
+    , Subscriber
+    , subscriber
+    , sSubscriptionType
+    , sAddress
+
+    -- ** TimePeriod
+    , TimePeriod
+    , timePeriod
+    , tpStart
+    , tpEnd
+    ) where
+
+import           Network.AWS.Budgets.CreateBudget
+import           Network.AWS.Budgets.CreateNotification
+import           Network.AWS.Budgets.CreateSubscriber
+import           Network.AWS.Budgets.DeleteBudget
+import           Network.AWS.Budgets.DeleteNotification
+import           Network.AWS.Budgets.DeleteSubscriber
+import           Network.AWS.Budgets.DescribeBudget
+import           Network.AWS.Budgets.DescribeBudgets
+import           Network.AWS.Budgets.DescribeNotificationsForBudget
+import           Network.AWS.Budgets.DescribeSubscribersForNotification
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.UpdateBudget
+import           Network.AWS.Budgets.UpdateNotification
+import           Network.AWS.Budgets.UpdateSubscriber
+import           Network.AWS.Budgets.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 'Budgets'.
+-}
+
+{- $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/Budgets/CreateBudget.hs b/gen/Network/AWS/Budgets/CreateBudget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/CreateBudget.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.Budgets.CreateBudget
+-- 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)
+--
+-- Create a new budget
+module Network.AWS.Budgets.CreateBudget
+    (
+    -- * Creating a Request
+      createBudget
+    , CreateBudget
+    -- * Request Lenses
+    , cbNotificationsWithSubscribers
+    , cbAccountId
+    , cbBudget
+
+    -- * Destructuring the Response
+    , createBudgetResponse
+    , CreateBudgetResponse
+    -- * Response Lenses
+    , cbrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of CreateBudget
+--
+-- /See:/ 'createBudget' smart constructor.
+data CreateBudget = CreateBudget'
+    { _cbNotificationsWithSubscribers :: !(Maybe [NotificationWithSubscribers])
+    , _cbAccountId                    :: !Text
+    , _cbBudget                       :: !Budget
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateBudget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbNotificationsWithSubscribers' - Undocumented member.
+--
+-- * 'cbAccountId' - Undocumented member.
+--
+-- * 'cbBudget' - Undocumented member.
+createBudget
+    :: Text -- ^ 'cbAccountId'
+    -> Budget -- ^ 'cbBudget'
+    -> CreateBudget
+createBudget pAccountId_ pBudget_ =
+    CreateBudget'
+    { _cbNotificationsWithSubscribers = Nothing
+    , _cbAccountId = pAccountId_
+    , _cbBudget = pBudget_
+    }
+
+-- | Undocumented member.
+cbNotificationsWithSubscribers :: Lens' CreateBudget [NotificationWithSubscribers]
+cbNotificationsWithSubscribers = lens _cbNotificationsWithSubscribers (\ s a -> s{_cbNotificationsWithSubscribers = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+cbAccountId :: Lens' CreateBudget Text
+cbAccountId = lens _cbAccountId (\ s a -> s{_cbAccountId = a});
+
+-- | Undocumented member.
+cbBudget :: Lens' CreateBudget Budget
+cbBudget = lens _cbBudget (\ s a -> s{_cbBudget = a});
+
+instance AWSRequest CreateBudget where
+        type Rs CreateBudget = CreateBudgetResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateBudgetResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateBudget
+
+instance NFData CreateBudget
+
+instance ToHeaders CreateBudget where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.CreateBudget" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateBudget where
+        toJSON CreateBudget'{..}
+          = object
+              (catMaybes
+                 [("NotificationsWithSubscribers" .=) <$>
+                    _cbNotificationsWithSubscribers,
+                  Just ("AccountId" .= _cbAccountId),
+                  Just ("Budget" .= _cbBudget)])
+
+instance ToPath CreateBudget where
+        toPath = const "/"
+
+instance ToQuery CreateBudget where
+        toQuery = const mempty
+
+-- | Response of CreateBudget
+--
+-- /See:/ 'createBudgetResponse' smart constructor.
+newtype CreateBudgetResponse = CreateBudgetResponse'
+    { _cbrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateBudgetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbrsResponseStatus' - -- | The response status code.
+createBudgetResponse
+    :: Int -- ^ 'cbrsResponseStatus'
+    -> CreateBudgetResponse
+createBudgetResponse pResponseStatus_ =
+    CreateBudgetResponse'
+    { _cbrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+cbrsResponseStatus :: Lens' CreateBudgetResponse Int
+cbrsResponseStatus = lens _cbrsResponseStatus (\ s a -> s{_cbrsResponseStatus = a});
+
+instance NFData CreateBudgetResponse
diff --git a/gen/Network/AWS/Budgets/CreateNotification.hs b/gen/Network/AWS/Budgets/CreateNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/CreateNotification.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.Budgets.CreateNotification
+-- 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)
+--
+-- Create a new Notification with subscribers for a budget
+module Network.AWS.Budgets.CreateNotification
+    (
+    -- * Creating a Request
+      createNotification
+    , CreateNotification
+    -- * Request Lenses
+    , cnAccountId
+    , cnBudgetName
+    , cnNotification
+    , cnSubscribers
+
+    -- * Destructuring the Response
+    , createNotificationResponse
+    , CreateNotificationResponse
+    -- * Response Lenses
+    , cnrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of CreateNotification
+--
+-- /See:/ 'createNotification' smart constructor.
+data CreateNotification = CreateNotification'
+    { _cnAccountId    :: !Text
+    , _cnBudgetName   :: !Text
+    , _cnNotification :: !Notification
+    , _cnSubscribers  :: !(List1 Subscriber)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cnAccountId' - Undocumented member.
+--
+-- * 'cnBudgetName' - Undocumented member.
+--
+-- * 'cnNotification' - Undocumented member.
+--
+-- * 'cnSubscribers' - Undocumented member.
+createNotification
+    :: Text -- ^ 'cnAccountId'
+    -> Text -- ^ 'cnBudgetName'
+    -> Notification -- ^ 'cnNotification'
+    -> NonEmpty Subscriber -- ^ 'cnSubscribers'
+    -> CreateNotification
+createNotification pAccountId_ pBudgetName_ pNotification_ pSubscribers_ =
+    CreateNotification'
+    { _cnAccountId = pAccountId_
+    , _cnBudgetName = pBudgetName_
+    , _cnNotification = pNotification_
+    , _cnSubscribers = _List1 # pSubscribers_
+    }
+
+-- | Undocumented member.
+cnAccountId :: Lens' CreateNotification Text
+cnAccountId = lens _cnAccountId (\ s a -> s{_cnAccountId = a});
+
+-- | Undocumented member.
+cnBudgetName :: Lens' CreateNotification Text
+cnBudgetName = lens _cnBudgetName (\ s a -> s{_cnBudgetName = a});
+
+-- | Undocumented member.
+cnNotification :: Lens' CreateNotification Notification
+cnNotification = lens _cnNotification (\ s a -> s{_cnNotification = a});
+
+-- | Undocumented member.
+cnSubscribers :: Lens' CreateNotification (NonEmpty Subscriber)
+cnSubscribers = lens _cnSubscribers (\ s a -> s{_cnSubscribers = a}) . _List1;
+
+instance AWSRequest CreateNotification where
+        type Rs CreateNotification =
+             CreateNotificationResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateNotificationResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateNotification
+
+instance NFData CreateNotification
+
+instance ToHeaders CreateNotification where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.CreateNotification" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateNotification where
+        toJSON CreateNotification'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _cnAccountId),
+                  Just ("BudgetName" .= _cnBudgetName),
+                  Just ("Notification" .= _cnNotification),
+                  Just ("Subscribers" .= _cnSubscribers)])
+
+instance ToPath CreateNotification where
+        toPath = const "/"
+
+instance ToQuery CreateNotification where
+        toQuery = const mempty
+
+-- | Response of CreateNotification
+--
+-- /See:/ 'createNotificationResponse' smart constructor.
+newtype CreateNotificationResponse = CreateNotificationResponse'
+    { _cnrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateNotificationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cnrsResponseStatus' - -- | The response status code.
+createNotificationResponse
+    :: Int -- ^ 'cnrsResponseStatus'
+    -> CreateNotificationResponse
+createNotificationResponse pResponseStatus_ =
+    CreateNotificationResponse'
+    { _cnrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+cnrsResponseStatus :: Lens' CreateNotificationResponse Int
+cnrsResponseStatus = lens _cnrsResponseStatus (\ s a -> s{_cnrsResponseStatus = a});
+
+instance NFData CreateNotificationResponse
diff --git a/gen/Network/AWS/Budgets/CreateSubscriber.hs b/gen/Network/AWS/Budgets/CreateSubscriber.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/CreateSubscriber.hs
@@ -0,0 +1,159 @@
+{-# 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.Budgets.CreateSubscriber
+-- 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)
+--
+-- Create a new Subscriber for a notification
+module Network.AWS.Budgets.CreateSubscriber
+    (
+    -- * Creating a Request
+      createSubscriber
+    , CreateSubscriber
+    -- * Request Lenses
+    , csAccountId
+    , csBudgetName
+    , csNotification
+    , csSubscriber
+
+    -- * Destructuring the Response
+    , createSubscriberResponse
+    , CreateSubscriberResponse
+    -- * Response Lenses
+    , csrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of CreateSubscriber
+--
+-- /See:/ 'createSubscriber' smart constructor.
+data CreateSubscriber = CreateSubscriber'
+    { _csAccountId    :: !Text
+    , _csBudgetName   :: !Text
+    , _csNotification :: !Notification
+    , _csSubscriber   :: !Subscriber
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateSubscriber' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csAccountId' - Undocumented member.
+--
+-- * 'csBudgetName' - Undocumented member.
+--
+-- * 'csNotification' - Undocumented member.
+--
+-- * 'csSubscriber' - Undocumented member.
+createSubscriber
+    :: Text -- ^ 'csAccountId'
+    -> Text -- ^ 'csBudgetName'
+    -> Notification -- ^ 'csNotification'
+    -> Subscriber -- ^ 'csSubscriber'
+    -> CreateSubscriber
+createSubscriber pAccountId_ pBudgetName_ pNotification_ pSubscriber_ =
+    CreateSubscriber'
+    { _csAccountId = pAccountId_
+    , _csBudgetName = pBudgetName_
+    , _csNotification = pNotification_
+    , _csSubscriber = pSubscriber_
+    }
+
+-- | Undocumented member.
+csAccountId :: Lens' CreateSubscriber Text
+csAccountId = lens _csAccountId (\ s a -> s{_csAccountId = a});
+
+-- | Undocumented member.
+csBudgetName :: Lens' CreateSubscriber Text
+csBudgetName = lens _csBudgetName (\ s a -> s{_csBudgetName = a});
+
+-- | Undocumented member.
+csNotification :: Lens' CreateSubscriber Notification
+csNotification = lens _csNotification (\ s a -> s{_csNotification = a});
+
+-- | Undocumented member.
+csSubscriber :: Lens' CreateSubscriber Subscriber
+csSubscriber = lens _csSubscriber (\ s a -> s{_csSubscriber = a});
+
+instance AWSRequest CreateSubscriber where
+        type Rs CreateSubscriber = CreateSubscriberResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateSubscriberResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateSubscriber
+
+instance NFData CreateSubscriber
+
+instance ToHeaders CreateSubscriber where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.CreateSubscriber" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateSubscriber where
+        toJSON CreateSubscriber'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _csAccountId),
+                  Just ("BudgetName" .= _csBudgetName),
+                  Just ("Notification" .= _csNotification),
+                  Just ("Subscriber" .= _csSubscriber)])
+
+instance ToPath CreateSubscriber where
+        toPath = const "/"
+
+instance ToQuery CreateSubscriber where
+        toQuery = const mempty
+
+-- | Response of CreateSubscriber
+--
+-- /See:/ 'createSubscriberResponse' smart constructor.
+newtype CreateSubscriberResponse = CreateSubscriberResponse'
+    { _csrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateSubscriberResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csrsResponseStatus' - -- | The response status code.
+createSubscriberResponse
+    :: Int -- ^ 'csrsResponseStatus'
+    -> CreateSubscriberResponse
+createSubscriberResponse pResponseStatus_ =
+    CreateSubscriberResponse'
+    { _csrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+csrsResponseStatus :: Lens' CreateSubscriberResponse Int
+csrsResponseStatus = lens _csrsResponseStatus (\ s a -> s{_csrsResponseStatus = a});
+
+instance NFData CreateSubscriberResponse
diff --git a/gen/Network/AWS/Budgets/DeleteBudget.hs b/gen/Network/AWS/Budgets/DeleteBudget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/DeleteBudget.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Budgets.DeleteBudget
+-- 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)
+--
+-- Delete a budget and related notifications
+module Network.AWS.Budgets.DeleteBudget
+    (
+    -- * Creating a Request
+      deleteBudget
+    , DeleteBudget
+    -- * Request Lenses
+    , dAccountId
+    , dBudgetName
+
+    -- * Destructuring the Response
+    , deleteBudgetResponse
+    , DeleteBudgetResponse
+    -- * Response Lenses
+    , drsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of DeleteBudget
+--
+-- /See:/ 'deleteBudget' smart constructor.
+data DeleteBudget = DeleteBudget'
+    { _dAccountId  :: !Text
+    , _dBudgetName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBudget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dAccountId' - Undocumented member.
+--
+-- * 'dBudgetName' - Undocumented member.
+deleteBudget
+    :: Text -- ^ 'dAccountId'
+    -> Text -- ^ 'dBudgetName'
+    -> DeleteBudget
+deleteBudget pAccountId_ pBudgetName_ =
+    DeleteBudget'
+    { _dAccountId = pAccountId_
+    , _dBudgetName = pBudgetName_
+    }
+
+-- | Undocumented member.
+dAccountId :: Lens' DeleteBudget Text
+dAccountId = lens _dAccountId (\ s a -> s{_dAccountId = a});
+
+-- | Undocumented member.
+dBudgetName :: Lens' DeleteBudget Text
+dBudgetName = lens _dBudgetName (\ s a -> s{_dBudgetName = a});
+
+instance AWSRequest DeleteBudget where
+        type Rs DeleteBudget = DeleteBudgetResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteBudgetResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteBudget
+
+instance NFData DeleteBudget
+
+instance ToHeaders DeleteBudget where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.DeleteBudget" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteBudget where
+        toJSON DeleteBudget'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _dAccountId),
+                  Just ("BudgetName" .= _dBudgetName)])
+
+instance ToPath DeleteBudget where
+        toPath = const "/"
+
+instance ToQuery DeleteBudget where
+        toQuery = const mempty
+
+-- | Response of DeleteBudget
+--
+-- /See:/ 'deleteBudgetResponse' smart constructor.
+newtype DeleteBudgetResponse = DeleteBudgetResponse'
+    { _drsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBudgetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsResponseStatus' - -- | The response status code.
+deleteBudgetResponse
+    :: Int -- ^ 'drsResponseStatus'
+    -> DeleteBudgetResponse
+deleteBudgetResponse pResponseStatus_ =
+    DeleteBudgetResponse'
+    { _drsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+drsResponseStatus :: Lens' DeleteBudgetResponse Int
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+
+instance NFData DeleteBudgetResponse
diff --git a/gen/Network/AWS/Budgets/DeleteNotification.hs b/gen/Network/AWS/Budgets/DeleteNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/DeleteNotification.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Budgets.DeleteNotification
+-- 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)
+--
+-- Delete a notification and related subscribers
+module Network.AWS.Budgets.DeleteNotification
+    (
+    -- * Creating a Request
+      deleteNotification
+    , DeleteNotification
+    -- * Request Lenses
+    , dnAccountId
+    , dnBudgetName
+    , dnNotification
+
+    -- * Destructuring the Response
+    , deleteNotificationResponse
+    , DeleteNotificationResponse
+    -- * Response Lenses
+    , dnrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of DeleteNotification
+--
+-- /See:/ 'deleteNotification' smart constructor.
+data DeleteNotification = DeleteNotification'
+    { _dnAccountId    :: !Text
+    , _dnBudgetName   :: !Text
+    , _dnNotification :: !Notification
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dnAccountId' - Undocumented member.
+--
+-- * 'dnBudgetName' - Undocumented member.
+--
+-- * 'dnNotification' - Undocumented member.
+deleteNotification
+    :: Text -- ^ 'dnAccountId'
+    -> Text -- ^ 'dnBudgetName'
+    -> Notification -- ^ 'dnNotification'
+    -> DeleteNotification
+deleteNotification pAccountId_ pBudgetName_ pNotification_ =
+    DeleteNotification'
+    { _dnAccountId = pAccountId_
+    , _dnBudgetName = pBudgetName_
+    , _dnNotification = pNotification_
+    }
+
+-- | Undocumented member.
+dnAccountId :: Lens' DeleteNotification Text
+dnAccountId = lens _dnAccountId (\ s a -> s{_dnAccountId = a});
+
+-- | Undocumented member.
+dnBudgetName :: Lens' DeleteNotification Text
+dnBudgetName = lens _dnBudgetName (\ s a -> s{_dnBudgetName = a});
+
+-- | Undocumented member.
+dnNotification :: Lens' DeleteNotification Notification
+dnNotification = lens _dnNotification (\ s a -> s{_dnNotification = a});
+
+instance AWSRequest DeleteNotification where
+        type Rs DeleteNotification =
+             DeleteNotificationResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteNotificationResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteNotification
+
+instance NFData DeleteNotification
+
+instance ToHeaders DeleteNotification where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.DeleteNotification" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteNotification where
+        toJSON DeleteNotification'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _dnAccountId),
+                  Just ("BudgetName" .= _dnBudgetName),
+                  Just ("Notification" .= _dnNotification)])
+
+instance ToPath DeleteNotification where
+        toPath = const "/"
+
+instance ToQuery DeleteNotification where
+        toQuery = const mempty
+
+-- | Response of DeleteNotification
+--
+-- /See:/ 'deleteNotificationResponse' smart constructor.
+newtype DeleteNotificationResponse = DeleteNotificationResponse'
+    { _dnrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteNotificationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dnrsResponseStatus' - -- | The response status code.
+deleteNotificationResponse
+    :: Int -- ^ 'dnrsResponseStatus'
+    -> DeleteNotificationResponse
+deleteNotificationResponse pResponseStatus_ =
+    DeleteNotificationResponse'
+    { _dnrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+dnrsResponseStatus :: Lens' DeleteNotificationResponse Int
+dnrsResponseStatus = lens _dnrsResponseStatus (\ s a -> s{_dnrsResponseStatus = a});
+
+instance NFData DeleteNotificationResponse
diff --git a/gen/Network/AWS/Budgets/DeleteSubscriber.hs b/gen/Network/AWS/Budgets/DeleteSubscriber.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/DeleteSubscriber.hs
@@ -0,0 +1,159 @@
+{-# 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.Budgets.DeleteSubscriber
+-- 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)
+--
+-- Delete a Subscriber for a notification
+module Network.AWS.Budgets.DeleteSubscriber
+    (
+    -- * Creating a Request
+      deleteSubscriber
+    , DeleteSubscriber
+    -- * Request Lenses
+    , dsAccountId
+    , dsBudgetName
+    , dsNotification
+    , dsSubscriber
+
+    -- * Destructuring the Response
+    , deleteSubscriberResponse
+    , DeleteSubscriberResponse
+    -- * Response Lenses
+    , dsrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of DeleteSubscriber
+--
+-- /See:/ 'deleteSubscriber' smart constructor.
+data DeleteSubscriber = DeleteSubscriber'
+    { _dsAccountId    :: !Text
+    , _dsBudgetName   :: !Text
+    , _dsNotification :: !Notification
+    , _dsSubscriber   :: !Subscriber
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteSubscriber' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsAccountId' - Undocumented member.
+--
+-- * 'dsBudgetName' - Undocumented member.
+--
+-- * 'dsNotification' - Undocumented member.
+--
+-- * 'dsSubscriber' - Undocumented member.
+deleteSubscriber
+    :: Text -- ^ 'dsAccountId'
+    -> Text -- ^ 'dsBudgetName'
+    -> Notification -- ^ 'dsNotification'
+    -> Subscriber -- ^ 'dsSubscriber'
+    -> DeleteSubscriber
+deleteSubscriber pAccountId_ pBudgetName_ pNotification_ pSubscriber_ =
+    DeleteSubscriber'
+    { _dsAccountId = pAccountId_
+    , _dsBudgetName = pBudgetName_
+    , _dsNotification = pNotification_
+    , _dsSubscriber = pSubscriber_
+    }
+
+-- | Undocumented member.
+dsAccountId :: Lens' DeleteSubscriber Text
+dsAccountId = lens _dsAccountId (\ s a -> s{_dsAccountId = a});
+
+-- | Undocumented member.
+dsBudgetName :: Lens' DeleteSubscriber Text
+dsBudgetName = lens _dsBudgetName (\ s a -> s{_dsBudgetName = a});
+
+-- | Undocumented member.
+dsNotification :: Lens' DeleteSubscriber Notification
+dsNotification = lens _dsNotification (\ s a -> s{_dsNotification = a});
+
+-- | Undocumented member.
+dsSubscriber :: Lens' DeleteSubscriber Subscriber
+dsSubscriber = lens _dsSubscriber (\ s a -> s{_dsSubscriber = a});
+
+instance AWSRequest DeleteSubscriber where
+        type Rs DeleteSubscriber = DeleteSubscriberResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteSubscriberResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteSubscriber
+
+instance NFData DeleteSubscriber
+
+instance ToHeaders DeleteSubscriber where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.DeleteSubscriber" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteSubscriber where
+        toJSON DeleteSubscriber'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _dsAccountId),
+                  Just ("BudgetName" .= _dsBudgetName),
+                  Just ("Notification" .= _dsNotification),
+                  Just ("Subscriber" .= _dsSubscriber)])
+
+instance ToPath DeleteSubscriber where
+        toPath = const "/"
+
+instance ToQuery DeleteSubscriber where
+        toQuery = const mempty
+
+-- | Response of DeleteSubscriber
+--
+-- /See:/ 'deleteSubscriberResponse' smart constructor.
+newtype DeleteSubscriberResponse = DeleteSubscriberResponse'
+    { _dsrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteSubscriberResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrsResponseStatus' - -- | The response status code.
+deleteSubscriberResponse
+    :: Int -- ^ 'dsrsResponseStatus'
+    -> DeleteSubscriberResponse
+deleteSubscriberResponse pResponseStatus_ =
+    DeleteSubscriberResponse'
+    { _dsrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+dsrsResponseStatus :: Lens' DeleteSubscriberResponse Int
+dsrsResponseStatus = lens _dsrsResponseStatus (\ s a -> s{_dsrsResponseStatus = a});
+
+instance NFData DeleteSubscriberResponse
diff --git a/gen/Network/AWS/Budgets/DescribeBudget.hs b/gen/Network/AWS/Budgets/DescribeBudget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/DescribeBudget.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Budgets.DescribeBudget
+-- 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)
+--
+-- Get a single budget
+module Network.AWS.Budgets.DescribeBudget
+    (
+    -- * Creating a Request
+      describeBudget
+    , DescribeBudget
+    -- * Request Lenses
+    , desAccountId
+    , desBudgetName
+
+    -- * Destructuring the Response
+    , describeBudgetResponse
+    , DescribeBudgetResponse
+    -- * Response Lenses
+    , desrsBudget
+    , desrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of DescribeBudget
+--
+-- /See:/ 'describeBudget' smart constructor.
+data DescribeBudget = DescribeBudget'
+    { _desAccountId  :: !Text
+    , _desBudgetName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeBudget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'desAccountId' - Undocumented member.
+--
+-- * 'desBudgetName' - Undocumented member.
+describeBudget
+    :: Text -- ^ 'desAccountId'
+    -> Text -- ^ 'desBudgetName'
+    -> DescribeBudget
+describeBudget pAccountId_ pBudgetName_ =
+    DescribeBudget'
+    { _desAccountId = pAccountId_
+    , _desBudgetName = pBudgetName_
+    }
+
+-- | Undocumented member.
+desAccountId :: Lens' DescribeBudget Text
+desAccountId = lens _desAccountId (\ s a -> s{_desAccountId = a});
+
+-- | Undocumented member.
+desBudgetName :: Lens' DescribeBudget Text
+desBudgetName = lens _desBudgetName (\ s a -> s{_desBudgetName = a});
+
+instance AWSRequest DescribeBudget where
+        type Rs DescribeBudget = DescribeBudgetResponse
+        request = postJSON budgets
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeBudgetResponse' <$>
+                   (x .?> "Budget") <*> (pure (fromEnum s)))
+
+instance Hashable DescribeBudget
+
+instance NFData DescribeBudget
+
+instance ToHeaders DescribeBudget where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.DescribeBudget" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeBudget where
+        toJSON DescribeBudget'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _desAccountId),
+                  Just ("BudgetName" .= _desBudgetName)])
+
+instance ToPath DescribeBudget where
+        toPath = const "/"
+
+instance ToQuery DescribeBudget where
+        toQuery = const mempty
+
+-- | Response of DescribeBudget
+--
+-- /See:/ 'describeBudgetResponse' smart constructor.
+data DescribeBudgetResponse = DescribeBudgetResponse'
+    { _desrsBudget         :: !(Maybe Budget)
+    , _desrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeBudgetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'desrsBudget' - Undocumented member.
+--
+-- * 'desrsResponseStatus' - -- | The response status code.
+describeBudgetResponse
+    :: Int -- ^ 'desrsResponseStatus'
+    -> DescribeBudgetResponse
+describeBudgetResponse pResponseStatus_ =
+    DescribeBudgetResponse'
+    { _desrsBudget = Nothing
+    , _desrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+desrsBudget :: Lens' DescribeBudgetResponse (Maybe Budget)
+desrsBudget = lens _desrsBudget (\ s a -> s{_desrsBudget = a});
+
+-- | -- | The response status code.
+desrsResponseStatus :: Lens' DescribeBudgetResponse Int
+desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a});
+
+instance NFData DescribeBudgetResponse
diff --git a/gen/Network/AWS/Budgets/DescribeBudgets.hs b/gen/Network/AWS/Budgets/DescribeBudgets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/DescribeBudgets.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Budgets.DescribeBudgets
+-- 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)
+--
+-- Get all budgets for an account
+module Network.AWS.Budgets.DescribeBudgets
+    (
+    -- * Creating a Request
+      describeBudgets
+    , DescribeBudgets
+    -- * Request Lenses
+    , dbNextToken
+    , dbMaxResults
+    , dbAccountId
+
+    -- * Destructuring the Response
+    , describeBudgetsResponse
+    , DescribeBudgetsResponse
+    -- * Response Lenses
+    , dbrsNextToken
+    , dbrsBudgets
+    , dbrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of DescribeBudgets
+--
+-- /See:/ 'describeBudgets' smart constructor.
+data DescribeBudgets = DescribeBudgets'
+    { _dbNextToken  :: !(Maybe Text)
+    , _dbMaxResults :: !(Maybe Nat)
+    , _dbAccountId  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeBudgets' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbNextToken' - Undocumented member.
+--
+-- * 'dbMaxResults' - Undocumented member.
+--
+-- * 'dbAccountId' - Undocumented member.
+describeBudgets
+    :: Text -- ^ 'dbAccountId'
+    -> DescribeBudgets
+describeBudgets pAccountId_ =
+    DescribeBudgets'
+    { _dbNextToken = Nothing
+    , _dbMaxResults = Nothing
+    , _dbAccountId = pAccountId_
+    }
+
+-- | Undocumented member.
+dbNextToken :: Lens' DescribeBudgets (Maybe Text)
+dbNextToken = lens _dbNextToken (\ s a -> s{_dbNextToken = a});
+
+-- | Undocumented member.
+dbMaxResults :: Lens' DescribeBudgets (Maybe Natural)
+dbMaxResults = lens _dbMaxResults (\ s a -> s{_dbMaxResults = a}) . mapping _Nat;
+
+-- | Undocumented member.
+dbAccountId :: Lens' DescribeBudgets Text
+dbAccountId = lens _dbAccountId (\ s a -> s{_dbAccountId = a});
+
+instance AWSRequest DescribeBudgets where
+        type Rs DescribeBudgets = DescribeBudgetsResponse
+        request = postJSON budgets
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeBudgetsResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "Budgets" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeBudgets
+
+instance NFData DescribeBudgets
+
+instance ToHeaders DescribeBudgets where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.DescribeBudgets" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeBudgets where
+        toJSON DescribeBudgets'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _dbNextToken,
+                  ("MaxResults" .=) <$> _dbMaxResults,
+                  Just ("AccountId" .= _dbAccountId)])
+
+instance ToPath DescribeBudgets where
+        toPath = const "/"
+
+instance ToQuery DescribeBudgets where
+        toQuery = const mempty
+
+-- | Response of DescribeBudgets
+--
+-- /See:/ 'describeBudgetsResponse' smart constructor.
+data DescribeBudgetsResponse = DescribeBudgetsResponse'
+    { _dbrsNextToken      :: !(Maybe Text)
+    , _dbrsBudgets        :: !(Maybe [Budget])
+    , _dbrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeBudgetsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbrsNextToken' - Undocumented member.
+--
+-- * 'dbrsBudgets' - Undocumented member.
+--
+-- * 'dbrsResponseStatus' - -- | The response status code.
+describeBudgetsResponse
+    :: Int -- ^ 'dbrsResponseStatus'
+    -> DescribeBudgetsResponse
+describeBudgetsResponse pResponseStatus_ =
+    DescribeBudgetsResponse'
+    { _dbrsNextToken = Nothing
+    , _dbrsBudgets = Nothing
+    , _dbrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+dbrsNextToken :: Lens' DescribeBudgetsResponse (Maybe Text)
+dbrsNextToken = lens _dbrsNextToken (\ s a -> s{_dbrsNextToken = a});
+
+-- | Undocumented member.
+dbrsBudgets :: Lens' DescribeBudgetsResponse [Budget]
+dbrsBudgets = lens _dbrsBudgets (\ s a -> s{_dbrsBudgets = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+dbrsResponseStatus :: Lens' DescribeBudgetsResponse Int
+dbrsResponseStatus = lens _dbrsResponseStatus (\ s a -> s{_dbrsResponseStatus = a});
+
+instance NFData DescribeBudgetsResponse
diff --git a/gen/Network/AWS/Budgets/DescribeNotificationsForBudget.hs b/gen/Network/AWS/Budgets/DescribeNotificationsForBudget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/DescribeNotificationsForBudget.hs
@@ -0,0 +1,182 @@
+{-# 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.Budgets.DescribeNotificationsForBudget
+-- 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)
+--
+-- Get notifications of a budget
+module Network.AWS.Budgets.DescribeNotificationsForBudget
+    (
+    -- * Creating a Request
+      describeNotificationsForBudget
+    , DescribeNotificationsForBudget
+    -- * Request Lenses
+    , dnfbNextToken
+    , dnfbMaxResults
+    , dnfbAccountId
+    , dnfbBudgetName
+
+    -- * Destructuring the Response
+    , describeNotificationsForBudgetResponse
+    , DescribeNotificationsForBudgetResponse
+    -- * Response Lenses
+    , dnfbrsNextToken
+    , dnfbrsNotifications
+    , dnfbrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of DescribeNotificationsForBudget
+--
+-- /See:/ 'describeNotificationsForBudget' smart constructor.
+data DescribeNotificationsForBudget = DescribeNotificationsForBudget'
+    { _dnfbNextToken  :: !(Maybe Text)
+    , _dnfbMaxResults :: !(Maybe Nat)
+    , _dnfbAccountId  :: !Text
+    , _dnfbBudgetName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeNotificationsForBudget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dnfbNextToken' - Undocumented member.
+--
+-- * 'dnfbMaxResults' - Undocumented member.
+--
+-- * 'dnfbAccountId' - Undocumented member.
+--
+-- * 'dnfbBudgetName' - Undocumented member.
+describeNotificationsForBudget
+    :: Text -- ^ 'dnfbAccountId'
+    -> Text -- ^ 'dnfbBudgetName'
+    -> DescribeNotificationsForBudget
+describeNotificationsForBudget pAccountId_ pBudgetName_ =
+    DescribeNotificationsForBudget'
+    { _dnfbNextToken = Nothing
+    , _dnfbMaxResults = Nothing
+    , _dnfbAccountId = pAccountId_
+    , _dnfbBudgetName = pBudgetName_
+    }
+
+-- | Undocumented member.
+dnfbNextToken :: Lens' DescribeNotificationsForBudget (Maybe Text)
+dnfbNextToken = lens _dnfbNextToken (\ s a -> s{_dnfbNextToken = a});
+
+-- | Undocumented member.
+dnfbMaxResults :: Lens' DescribeNotificationsForBudget (Maybe Natural)
+dnfbMaxResults = lens _dnfbMaxResults (\ s a -> s{_dnfbMaxResults = a}) . mapping _Nat;
+
+-- | Undocumented member.
+dnfbAccountId :: Lens' DescribeNotificationsForBudget Text
+dnfbAccountId = lens _dnfbAccountId (\ s a -> s{_dnfbAccountId = a});
+
+-- | Undocumented member.
+dnfbBudgetName :: Lens' DescribeNotificationsForBudget Text
+dnfbBudgetName = lens _dnfbBudgetName (\ s a -> s{_dnfbBudgetName = a});
+
+instance AWSRequest DescribeNotificationsForBudget
+         where
+        type Rs DescribeNotificationsForBudget =
+             DescribeNotificationsForBudgetResponse
+        request = postJSON budgets
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeNotificationsForBudgetResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "Notifications" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeNotificationsForBudget
+
+instance NFData DescribeNotificationsForBudget
+
+instance ToHeaders DescribeNotificationsForBudget
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.DescribeNotificationsForBudget"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeNotificationsForBudget where
+        toJSON DescribeNotificationsForBudget'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _dnfbNextToken,
+                  ("MaxResults" .=) <$> _dnfbMaxResults,
+                  Just ("AccountId" .= _dnfbAccountId),
+                  Just ("BudgetName" .= _dnfbBudgetName)])
+
+instance ToPath DescribeNotificationsForBudget where
+        toPath = const "/"
+
+instance ToQuery DescribeNotificationsForBudget where
+        toQuery = const mempty
+
+-- | Response of GetNotificationsForBudget
+--
+-- /See:/ 'describeNotificationsForBudgetResponse' smart constructor.
+data DescribeNotificationsForBudgetResponse = DescribeNotificationsForBudgetResponse'
+    { _dnfbrsNextToken      :: !(Maybe Text)
+    , _dnfbrsNotifications  :: !(Maybe [Notification])
+    , _dnfbrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeNotificationsForBudgetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dnfbrsNextToken' - Undocumented member.
+--
+-- * 'dnfbrsNotifications' - Undocumented member.
+--
+-- * 'dnfbrsResponseStatus' - -- | The response status code.
+describeNotificationsForBudgetResponse
+    :: Int -- ^ 'dnfbrsResponseStatus'
+    -> DescribeNotificationsForBudgetResponse
+describeNotificationsForBudgetResponse pResponseStatus_ =
+    DescribeNotificationsForBudgetResponse'
+    { _dnfbrsNextToken = Nothing
+    , _dnfbrsNotifications = Nothing
+    , _dnfbrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+dnfbrsNextToken :: Lens' DescribeNotificationsForBudgetResponse (Maybe Text)
+dnfbrsNextToken = lens _dnfbrsNextToken (\ s a -> s{_dnfbrsNextToken = a});
+
+-- | Undocumented member.
+dnfbrsNotifications :: Lens' DescribeNotificationsForBudgetResponse [Notification]
+dnfbrsNotifications = lens _dnfbrsNotifications (\ s a -> s{_dnfbrsNotifications = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+dnfbrsResponseStatus :: Lens' DescribeNotificationsForBudgetResponse Int
+dnfbrsResponseStatus = lens _dnfbrsResponseStatus (\ s a -> s{_dnfbrsResponseStatus = a});
+
+instance NFData
+         DescribeNotificationsForBudgetResponse
diff --git a/gen/Network/AWS/Budgets/DescribeSubscribersForNotification.hs b/gen/Network/AWS/Budgets/DescribeSubscribersForNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/DescribeSubscribersForNotification.hs
@@ -0,0 +1,195 @@
+{-# 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.Budgets.DescribeSubscribersForNotification
+-- 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)
+--
+-- Get subscribers of a notification
+module Network.AWS.Budgets.DescribeSubscribersForNotification
+    (
+    -- * Creating a Request
+      describeSubscribersForNotification
+    , DescribeSubscribersForNotification
+    -- * Request Lenses
+    , dsfnNextToken
+    , dsfnMaxResults
+    , dsfnAccountId
+    , dsfnBudgetName
+    , dsfnNotification
+
+    -- * Destructuring the Response
+    , describeSubscribersForNotificationResponse
+    , DescribeSubscribersForNotificationResponse
+    -- * Response Lenses
+    , dsfnrsNextToken
+    , dsfnrsSubscribers
+    , dsfnrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of DescribeSubscribersForNotification
+--
+-- /See:/ 'describeSubscribersForNotification' smart constructor.
+data DescribeSubscribersForNotification = DescribeSubscribersForNotification'
+    { _dsfnNextToken    :: !(Maybe Text)
+    , _dsfnMaxResults   :: !(Maybe Nat)
+    , _dsfnAccountId    :: !Text
+    , _dsfnBudgetName   :: !Text
+    , _dsfnNotification :: !Notification
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeSubscribersForNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsfnNextToken' - Undocumented member.
+--
+-- * 'dsfnMaxResults' - Undocumented member.
+--
+-- * 'dsfnAccountId' - Undocumented member.
+--
+-- * 'dsfnBudgetName' - Undocumented member.
+--
+-- * 'dsfnNotification' - Undocumented member.
+describeSubscribersForNotification
+    :: Text -- ^ 'dsfnAccountId'
+    -> Text -- ^ 'dsfnBudgetName'
+    -> Notification -- ^ 'dsfnNotification'
+    -> DescribeSubscribersForNotification
+describeSubscribersForNotification pAccountId_ pBudgetName_ pNotification_ =
+    DescribeSubscribersForNotification'
+    { _dsfnNextToken = Nothing
+    , _dsfnMaxResults = Nothing
+    , _dsfnAccountId = pAccountId_
+    , _dsfnBudgetName = pBudgetName_
+    , _dsfnNotification = pNotification_
+    }
+
+-- | Undocumented member.
+dsfnNextToken :: Lens' DescribeSubscribersForNotification (Maybe Text)
+dsfnNextToken = lens _dsfnNextToken (\ s a -> s{_dsfnNextToken = a});
+
+-- | Undocumented member.
+dsfnMaxResults :: Lens' DescribeSubscribersForNotification (Maybe Natural)
+dsfnMaxResults = lens _dsfnMaxResults (\ s a -> s{_dsfnMaxResults = a}) . mapping _Nat;
+
+-- | Undocumented member.
+dsfnAccountId :: Lens' DescribeSubscribersForNotification Text
+dsfnAccountId = lens _dsfnAccountId (\ s a -> s{_dsfnAccountId = a});
+
+-- | Undocumented member.
+dsfnBudgetName :: Lens' DescribeSubscribersForNotification Text
+dsfnBudgetName = lens _dsfnBudgetName (\ s a -> s{_dsfnBudgetName = a});
+
+-- | Undocumented member.
+dsfnNotification :: Lens' DescribeSubscribersForNotification Notification
+dsfnNotification = lens _dsfnNotification (\ s a -> s{_dsfnNotification = a});
+
+instance AWSRequest
+         DescribeSubscribersForNotification where
+        type Rs DescribeSubscribersForNotification =
+             DescribeSubscribersForNotificationResponse
+        request = postJSON budgets
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeSubscribersForNotificationResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "Subscribers") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeSubscribersForNotification
+
+instance NFData DescribeSubscribersForNotification
+
+instance ToHeaders DescribeSubscribersForNotification
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.DescribeSubscribersForNotification"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeSubscribersForNotification
+         where
+        toJSON DescribeSubscribersForNotification'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _dsfnNextToken,
+                  ("MaxResults" .=) <$> _dsfnMaxResults,
+                  Just ("AccountId" .= _dsfnAccountId),
+                  Just ("BudgetName" .= _dsfnBudgetName),
+                  Just ("Notification" .= _dsfnNotification)])
+
+instance ToPath DescribeSubscribersForNotification
+         where
+        toPath = const "/"
+
+instance ToQuery DescribeSubscribersForNotification
+         where
+        toQuery = const mempty
+
+-- | Response of DescribeSubscribersForNotification
+--
+-- /See:/ 'describeSubscribersForNotificationResponse' smart constructor.
+data DescribeSubscribersForNotificationResponse = DescribeSubscribersForNotificationResponse'
+    { _dsfnrsNextToken      :: !(Maybe Text)
+    , _dsfnrsSubscribers    :: !(Maybe (List1 Subscriber))
+    , _dsfnrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeSubscribersForNotificationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsfnrsNextToken' - Undocumented member.
+--
+-- * 'dsfnrsSubscribers' - Undocumented member.
+--
+-- * 'dsfnrsResponseStatus' - -- | The response status code.
+describeSubscribersForNotificationResponse
+    :: Int -- ^ 'dsfnrsResponseStatus'
+    -> DescribeSubscribersForNotificationResponse
+describeSubscribersForNotificationResponse pResponseStatus_ =
+    DescribeSubscribersForNotificationResponse'
+    { _dsfnrsNextToken = Nothing
+    , _dsfnrsSubscribers = Nothing
+    , _dsfnrsResponseStatus = pResponseStatus_
+    }
+
+-- | Undocumented member.
+dsfnrsNextToken :: Lens' DescribeSubscribersForNotificationResponse (Maybe Text)
+dsfnrsNextToken = lens _dsfnrsNextToken (\ s a -> s{_dsfnrsNextToken = a});
+
+-- | Undocumented member.
+dsfnrsSubscribers :: Lens' DescribeSubscribersForNotificationResponse (Maybe (NonEmpty Subscriber))
+dsfnrsSubscribers = lens _dsfnrsSubscribers (\ s a -> s{_dsfnrsSubscribers = a}) . mapping _List1;
+
+-- | -- | The response status code.
+dsfnrsResponseStatus :: Lens' DescribeSubscribersForNotificationResponse Int
+dsfnrsResponseStatus = lens _dsfnrsResponseStatus (\ s a -> s{_dsfnrsResponseStatus = a});
+
+instance NFData
+         DescribeSubscribersForNotificationResponse
diff --git a/gen/Network/AWS/Budgets/Types.hs b/gen/Network/AWS/Budgets/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/Types.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Budgets.Types
+-- 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 Network.AWS.Budgets.Types
+    (
+    -- * Service Configuration
+      budgets
+
+    -- * Errors
+    , _InvalidParameterException
+    , _InternalErrorException
+    , _ExpiredNextTokenException
+    , _NotFoundException
+    , _InvalidNextTokenException
+    , _DuplicateRecordException
+    , _CreationLimitExceededException
+
+    -- * BudgetType
+    , BudgetType (..)
+
+    -- * ComparisonOperator
+    , ComparisonOperator (..)
+
+    -- * NotificationType
+    , NotificationType (..)
+
+    -- * SubscriptionType
+    , SubscriptionType (..)
+
+    -- * TimeUnit
+    , TimeUnit (..)
+
+    -- * Budget
+    , Budget
+    , budget
+    , bCalculatedSpend
+    , bCostFilters
+    , bBudgetName
+    , bBudgetLimit
+    , bCostTypes
+    , bTimeUnit
+    , bTimePeriod
+    , bBudgetType
+
+    -- * CalculatedSpend
+    , CalculatedSpend
+    , calculatedSpend
+    , csForecastedSpend
+    , csActualSpend
+
+    -- * CostTypes
+    , CostTypes
+    , costTypes
+    , ctIncludeTax
+    , ctIncludeSubscription
+    , ctUseBlended
+
+    -- * Notification
+    , Notification
+    , notification
+    , nNotificationType
+    , nComparisonOperator
+    , nThreshold
+
+    -- * NotificationWithSubscribers
+    , NotificationWithSubscribers
+    , notificationWithSubscribers
+    , nwsNotification
+    , nwsSubscribers
+
+    -- * Spend
+    , Spend
+    , spend
+    , sAmount
+    , sUnit
+
+    -- * Subscriber
+    , Subscriber
+    , subscriber
+    , sSubscriptionType
+    , sAddress
+
+    -- * TimePeriod
+    , TimePeriod
+    , timePeriod
+    , tpStart
+    , tpEnd
+    ) where
+
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Budgets.Types.Sum
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | API version @2016-10-20@ of the Amazon Budgets SDK configuration.
+budgets :: Service
+budgets =
+    Service
+    { _svcAbbrev = "Budgets"
+    , _svcSigner = v4
+    , _svcPrefix = "budgets"
+    , _svcVersion = "2016-10-20"
+    , _svcEndpoint = defaultEndpoint budgets
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError "Budgets"
+    , _svcRetry = retry
+    }
+  where
+    retry =
+        Exponential
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
+    check e
+      | 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
+
+-- | This exception is thrown if any request is given an invalid parameter. E.g., if a required Date field is null.
+_InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameterException =
+    _ServiceError . hasCode "InvalidParameterException"
+
+-- | This exception is thrown on an unknown internal failure.
+_InternalErrorException :: AsError a => Getting (First ServiceError) a ServiceError
+_InternalErrorException = _ServiceError . hasCode "InternalErrorException"
+
+-- | This exception is thrown if the paging token is expired - past its TTL
+_ExpiredNextTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_ExpiredNextTokenException =
+    _ServiceError . hasCode "ExpiredNextTokenException"
+
+-- | This exception is thrown if a requested entity is not found. E.g., if a budget id doesn't exist for an account ID.
+_NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_NotFoundException = _ServiceError . hasCode "NotFoundException"
+
+-- | This exception is thrown if paging token signature didn't match the token, or the paging token isn't for this request
+_InvalidNextTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidNextTokenException =
+    _ServiceError . hasCode "InvalidNextTokenException"
+
+-- | The exception is thrown when customer tries to create a record (e.g. budget) that already exists.
+_DuplicateRecordException :: AsError a => Getting (First ServiceError) a ServiceError
+_DuplicateRecordException = _ServiceError . hasCode "DuplicateRecordException"
+
+-- | The exception is thrown when customer tries to create a record (e.g. budget), but the number this record already exceeds the limitation.
+_CreationLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_CreationLimitExceededException =
+    _ServiceError . hasCode "CreationLimitExceededException"
diff --git a/gen/Network/AWS/Budgets/Types/Product.hs b/gen/Network/AWS/Budgets/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/Types/Product.hs
@@ -0,0 +1,507 @@
+{-# 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.Budgets.Types.Product
+-- 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 Network.AWS.Budgets.Types.Product where
+
+import           Network.AWS.Budgets.Types.Sum
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+
+-- | AWS Budget model
+--
+-- /See:/ 'budget' smart constructor.
+data Budget = Budget'
+    { _bCalculatedSpend :: !(Maybe CalculatedSpend)
+    , _bCostFilters     :: !(Maybe (Map Text [Text]))
+    , _bBudgetName      :: !Text
+    , _bBudgetLimit     :: !Spend
+    , _bCostTypes       :: !CostTypes
+    , _bTimeUnit        :: !TimeUnit
+    , _bTimePeriod      :: !TimePeriod
+    , _bBudgetType      :: !BudgetType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Budget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bCalculatedSpend' - Undocumented member.
+--
+-- * 'bCostFilters' - Undocumented member.
+--
+-- * 'bBudgetName' - Undocumented member.
+--
+-- * 'bBudgetLimit' - Undocumented member.
+--
+-- * 'bCostTypes' - Undocumented member.
+--
+-- * 'bTimeUnit' - Undocumented member.
+--
+-- * 'bTimePeriod' - Undocumented member.
+--
+-- * 'bBudgetType' - Undocumented member.
+budget
+    :: Text -- ^ 'bBudgetName'
+    -> Spend -- ^ 'bBudgetLimit'
+    -> CostTypes -- ^ 'bCostTypes'
+    -> TimeUnit -- ^ 'bTimeUnit'
+    -> TimePeriod -- ^ 'bTimePeriod'
+    -> BudgetType -- ^ 'bBudgetType'
+    -> Budget
+budget pBudgetName_ pBudgetLimit_ pCostTypes_ pTimeUnit_ pTimePeriod_ pBudgetType_ =
+    Budget'
+    { _bCalculatedSpend = Nothing
+    , _bCostFilters = Nothing
+    , _bBudgetName = pBudgetName_
+    , _bBudgetLimit = pBudgetLimit_
+    , _bCostTypes = pCostTypes_
+    , _bTimeUnit = pTimeUnit_
+    , _bTimePeriod = pTimePeriod_
+    , _bBudgetType = pBudgetType_
+    }
+
+-- | Undocumented member.
+bCalculatedSpend :: Lens' Budget (Maybe CalculatedSpend)
+bCalculatedSpend = lens _bCalculatedSpend (\ s a -> s{_bCalculatedSpend = a});
+
+-- | Undocumented member.
+bCostFilters :: Lens' Budget (HashMap Text [Text])
+bCostFilters = lens _bCostFilters (\ s a -> s{_bCostFilters = a}) . _Default . _Map;
+
+-- | Undocumented member.
+bBudgetName :: Lens' Budget Text
+bBudgetName = lens _bBudgetName (\ s a -> s{_bBudgetName = a});
+
+-- | Undocumented member.
+bBudgetLimit :: Lens' Budget Spend
+bBudgetLimit = lens _bBudgetLimit (\ s a -> s{_bBudgetLimit = a});
+
+-- | Undocumented member.
+bCostTypes :: Lens' Budget CostTypes
+bCostTypes = lens _bCostTypes (\ s a -> s{_bCostTypes = a});
+
+-- | Undocumented member.
+bTimeUnit :: Lens' Budget TimeUnit
+bTimeUnit = lens _bTimeUnit (\ s a -> s{_bTimeUnit = a});
+
+-- | Undocumented member.
+bTimePeriod :: Lens' Budget TimePeriod
+bTimePeriod = lens _bTimePeriod (\ s a -> s{_bTimePeriod = a});
+
+-- | Undocumented member.
+bBudgetType :: Lens' Budget BudgetType
+bBudgetType = lens _bBudgetType (\ s a -> s{_bBudgetType = a});
+
+instance FromJSON Budget where
+        parseJSON
+          = withObject "Budget"
+              (\ x ->
+                 Budget' <$>
+                   (x .:? "CalculatedSpend") <*>
+                     (x .:? "CostFilters" .!= mempty)
+                     <*> (x .: "BudgetName")
+                     <*> (x .: "BudgetLimit")
+                     <*> (x .: "CostTypes")
+                     <*> (x .: "TimeUnit")
+                     <*> (x .: "TimePeriod")
+                     <*> (x .: "BudgetType"))
+
+instance Hashable Budget
+
+instance NFData Budget
+
+instance ToJSON Budget where
+        toJSON Budget'{..}
+          = object
+              (catMaybes
+                 [("CalculatedSpend" .=) <$> _bCalculatedSpend,
+                  ("CostFilters" .=) <$> _bCostFilters,
+                  Just ("BudgetName" .= _bBudgetName),
+                  Just ("BudgetLimit" .= _bBudgetLimit),
+                  Just ("CostTypes" .= _bCostTypes),
+                  Just ("TimeUnit" .= _bTimeUnit),
+                  Just ("TimePeriod" .= _bTimePeriod),
+                  Just ("BudgetType" .= _bBudgetType)])
+
+-- | A structure holds the actual and forecasted spend for a budget.
+--
+-- /See:/ 'calculatedSpend' smart constructor.
+data CalculatedSpend = CalculatedSpend'
+    { _csForecastedSpend :: !(Maybe Spend)
+    , _csActualSpend     :: !Spend
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CalculatedSpend' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csForecastedSpend' - Undocumented member.
+--
+-- * 'csActualSpend' - Undocumented member.
+calculatedSpend
+    :: Spend -- ^ 'csActualSpend'
+    -> CalculatedSpend
+calculatedSpend pActualSpend_ =
+    CalculatedSpend'
+    { _csForecastedSpend = Nothing
+    , _csActualSpend = pActualSpend_
+    }
+
+-- | Undocumented member.
+csForecastedSpend :: Lens' CalculatedSpend (Maybe Spend)
+csForecastedSpend = lens _csForecastedSpend (\ s a -> s{_csForecastedSpend = a});
+
+-- | Undocumented member.
+csActualSpend :: Lens' CalculatedSpend Spend
+csActualSpend = lens _csActualSpend (\ s a -> s{_csActualSpend = a});
+
+instance FromJSON CalculatedSpend where
+        parseJSON
+          = withObject "CalculatedSpend"
+              (\ x ->
+                 CalculatedSpend' <$>
+                   (x .:? "ForecastedSpend") <*> (x .: "ActualSpend"))
+
+instance Hashable CalculatedSpend
+
+instance NFData CalculatedSpend
+
+instance ToJSON CalculatedSpend where
+        toJSON CalculatedSpend'{..}
+          = object
+              (catMaybes
+                 [("ForecastedSpend" .=) <$> _csForecastedSpend,
+                  Just ("ActualSpend" .= _csActualSpend)])
+
+-- | This includes the options for getting the cost of a budget.
+--
+-- /See:/ 'costTypes' smart constructor.
+data CostTypes = CostTypes'
+    { _ctIncludeTax          :: !Bool
+    , _ctIncludeSubscription :: !Bool
+    , _ctUseBlended          :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CostTypes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctIncludeTax' - Undocumented member.
+--
+-- * 'ctIncludeSubscription' - Undocumented member.
+--
+-- * 'ctUseBlended' - Undocumented member.
+costTypes
+    :: Bool -- ^ 'ctIncludeTax'
+    -> Bool -- ^ 'ctIncludeSubscription'
+    -> Bool -- ^ 'ctUseBlended'
+    -> CostTypes
+costTypes pIncludeTax_ pIncludeSubscription_ pUseBlended_ =
+    CostTypes'
+    { _ctIncludeTax = pIncludeTax_
+    , _ctIncludeSubscription = pIncludeSubscription_
+    , _ctUseBlended = pUseBlended_
+    }
+
+-- | Undocumented member.
+ctIncludeTax :: Lens' CostTypes Bool
+ctIncludeTax = lens _ctIncludeTax (\ s a -> s{_ctIncludeTax = a});
+
+-- | Undocumented member.
+ctIncludeSubscription :: Lens' CostTypes Bool
+ctIncludeSubscription = lens _ctIncludeSubscription (\ s a -> s{_ctIncludeSubscription = a});
+
+-- | Undocumented member.
+ctUseBlended :: Lens' CostTypes Bool
+ctUseBlended = lens _ctUseBlended (\ s a -> s{_ctUseBlended = a});
+
+instance FromJSON CostTypes where
+        parseJSON
+          = withObject "CostTypes"
+              (\ x ->
+                 CostTypes' <$>
+                   (x .: "IncludeTax") <*> (x .: "IncludeSubscription")
+                     <*> (x .: "UseBlended"))
+
+instance Hashable CostTypes
+
+instance NFData CostTypes
+
+instance ToJSON CostTypes where
+        toJSON CostTypes'{..}
+          = object
+              (catMaybes
+                 [Just ("IncludeTax" .= _ctIncludeTax),
+                  Just
+                    ("IncludeSubscription" .= _ctIncludeSubscription),
+                  Just ("UseBlended" .= _ctUseBlended)])
+
+-- | Notification model. Each budget may contain multiple notifications with different settings.
+--
+-- /See:/ 'notification' smart constructor.
+data Notification = Notification'
+    { _nNotificationType   :: !NotificationType
+    , _nComparisonOperator :: !ComparisonOperator
+    , _nThreshold          :: !Double
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Notification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nNotificationType' - Undocumented member.
+--
+-- * 'nComparisonOperator' - Undocumented member.
+--
+-- * 'nThreshold' - Undocumented member.
+notification
+    :: NotificationType -- ^ 'nNotificationType'
+    -> ComparisonOperator -- ^ 'nComparisonOperator'
+    -> Double -- ^ 'nThreshold'
+    -> Notification
+notification pNotificationType_ pComparisonOperator_ pThreshold_ =
+    Notification'
+    { _nNotificationType = pNotificationType_
+    , _nComparisonOperator = pComparisonOperator_
+    , _nThreshold = pThreshold_
+    }
+
+-- | Undocumented member.
+nNotificationType :: Lens' Notification NotificationType
+nNotificationType = lens _nNotificationType (\ s a -> s{_nNotificationType = a});
+
+-- | Undocumented member.
+nComparisonOperator :: Lens' Notification ComparisonOperator
+nComparisonOperator = lens _nComparisonOperator (\ s a -> s{_nComparisonOperator = a});
+
+-- | Undocumented member.
+nThreshold :: Lens' Notification Double
+nThreshold = lens _nThreshold (\ s a -> s{_nThreshold = a});
+
+instance FromJSON Notification where
+        parseJSON
+          = withObject "Notification"
+              (\ x ->
+                 Notification' <$>
+                   (x .: "NotificationType") <*>
+                     (x .: "ComparisonOperator")
+                     <*> (x .: "Threshold"))
+
+instance Hashable Notification
+
+instance NFData Notification
+
+instance ToJSON Notification where
+        toJSON Notification'{..}
+          = object
+              (catMaybes
+                 [Just ("NotificationType" .= _nNotificationType),
+                  Just ("ComparisonOperator" .= _nComparisonOperator),
+                  Just ("Threshold" .= _nThreshold)])
+
+-- | A structure to relate notification and a list of subscribers who belong to the notification.
+--
+-- /See:/ 'notificationWithSubscribers' smart constructor.
+data NotificationWithSubscribers = NotificationWithSubscribers'
+    { _nwsNotification :: !Notification
+    , _nwsSubscribers  :: !(List1 Subscriber)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationWithSubscribers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nwsNotification' - Undocumented member.
+--
+-- * 'nwsSubscribers' - Undocumented member.
+notificationWithSubscribers
+    :: Notification -- ^ 'nwsNotification'
+    -> NonEmpty Subscriber -- ^ 'nwsSubscribers'
+    -> NotificationWithSubscribers
+notificationWithSubscribers pNotification_ pSubscribers_ =
+    NotificationWithSubscribers'
+    { _nwsNotification = pNotification_
+    , _nwsSubscribers = _List1 # pSubscribers_
+    }
+
+-- | Undocumented member.
+nwsNotification :: Lens' NotificationWithSubscribers Notification
+nwsNotification = lens _nwsNotification (\ s a -> s{_nwsNotification = a});
+
+-- | Undocumented member.
+nwsSubscribers :: Lens' NotificationWithSubscribers (NonEmpty Subscriber)
+nwsSubscribers = lens _nwsSubscribers (\ s a -> s{_nwsSubscribers = a}) . _List1;
+
+instance Hashable NotificationWithSubscribers
+
+instance NFData NotificationWithSubscribers
+
+instance ToJSON NotificationWithSubscribers where
+        toJSON NotificationWithSubscribers'{..}
+          = object
+              (catMaybes
+                 [Just ("Notification" .= _nwsNotification),
+                  Just ("Subscribers" .= _nwsSubscribers)])
+
+-- | A structure represent either a cost spend or usage spend. Contains an amount and a unit.
+--
+-- /See:/ 'spend' smart constructor.
+data Spend = Spend'
+    { _sAmount :: !Text
+    , _sUnit   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Spend' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sAmount' - Undocumented member.
+--
+-- * 'sUnit' - Undocumented member.
+spend
+    :: Text -- ^ 'sAmount'
+    -> Text -- ^ 'sUnit'
+    -> Spend
+spend pAmount_ pUnit_ =
+    Spend'
+    { _sAmount = pAmount_
+    , _sUnit = pUnit_
+    }
+
+-- | Undocumented member.
+sAmount :: Lens' Spend Text
+sAmount = lens _sAmount (\ s a -> s{_sAmount = a});
+
+-- | Undocumented member.
+sUnit :: Lens' Spend Text
+sUnit = lens _sUnit (\ s a -> s{_sUnit = a});
+
+instance FromJSON Spend where
+        parseJSON
+          = withObject "Spend"
+              (\ x -> Spend' <$> (x .: "Amount") <*> (x .: "Unit"))
+
+instance Hashable Spend
+
+instance NFData Spend
+
+instance ToJSON Spend where
+        toJSON Spend'{..}
+          = object
+              (catMaybes
+                 [Just ("Amount" .= _sAmount),
+                  Just ("Unit" .= _sUnit)])
+
+-- | Subscriber model. Each notification may contain multiple subscribers with different addresses.
+--
+-- /See:/ 'subscriber' smart constructor.
+data Subscriber = Subscriber'
+    { _sSubscriptionType :: !SubscriptionType
+    , _sAddress          :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Subscriber' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sSubscriptionType' - Undocumented member.
+--
+-- * 'sAddress' - Undocumented member.
+subscriber
+    :: SubscriptionType -- ^ 'sSubscriptionType'
+    -> Text -- ^ 'sAddress'
+    -> Subscriber
+subscriber pSubscriptionType_ pAddress_ =
+    Subscriber'
+    { _sSubscriptionType = pSubscriptionType_
+    , _sAddress = pAddress_
+    }
+
+-- | Undocumented member.
+sSubscriptionType :: Lens' Subscriber SubscriptionType
+sSubscriptionType = lens _sSubscriptionType (\ s a -> s{_sSubscriptionType = a});
+
+-- | Undocumented member.
+sAddress :: Lens' Subscriber Text
+sAddress = lens _sAddress (\ s a -> s{_sAddress = a});
+
+instance FromJSON Subscriber where
+        parseJSON
+          = withObject "Subscriber"
+              (\ x ->
+                 Subscriber' <$>
+                   (x .: "SubscriptionType") <*> (x .: "Address"))
+
+instance Hashable Subscriber
+
+instance NFData Subscriber
+
+instance ToJSON Subscriber where
+        toJSON Subscriber'{..}
+          = object
+              (catMaybes
+                 [Just ("SubscriptionType" .= _sSubscriptionType),
+                  Just ("Address" .= _sAddress)])
+
+-- | A time period indicated the start date and end date of a budget.
+--
+-- /See:/ 'timePeriod' smart constructor.
+data TimePeriod = TimePeriod'
+    { _tpStart :: !POSIX
+    , _tpEnd   :: !POSIX
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimePeriod' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpStart' - Undocumented member.
+--
+-- * 'tpEnd' - Undocumented member.
+timePeriod
+    :: UTCTime -- ^ 'tpStart'
+    -> UTCTime -- ^ 'tpEnd'
+    -> TimePeriod
+timePeriod pStart_ pEnd_ =
+    TimePeriod'
+    { _tpStart = _Time # pStart_
+    , _tpEnd = _Time # pEnd_
+    }
+
+-- | Undocumented member.
+tpStart :: Lens' TimePeriod UTCTime
+tpStart = lens _tpStart (\ s a -> s{_tpStart = a}) . _Time;
+
+-- | Undocumented member.
+tpEnd :: Lens' TimePeriod UTCTime
+tpEnd = lens _tpEnd (\ s a -> s{_tpEnd = a}) . _Time;
+
+instance FromJSON TimePeriod where
+        parseJSON
+          = withObject "TimePeriod"
+              (\ x ->
+                 TimePeriod' <$> (x .: "Start") <*> (x .: "End"))
+
+instance Hashable TimePeriod
+
+instance NFData TimePeriod
+
+instance ToJSON TimePeriod where
+        toJSON TimePeriod'{..}
+          = object
+              (catMaybes
+                 [Just ("Start" .= _tpStart), Just ("End" .= _tpEnd)])
diff --git a/gen/Network/AWS/Budgets/Types/Sum.hs b/gen/Network/AWS/Budgets/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/Types/Sum.hs
@@ -0,0 +1,176 @@
+{-# 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.Budgets.Types.Sum
+-- 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 Network.AWS.Budgets.Types.Sum where
+
+import           Network.AWS.Prelude
+
+-- | The type of a budget. Can be COST or USAGE.
+data BudgetType
+    = Cost
+    | Usage
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText BudgetType where
+    parser = takeLowerText >>= \case
+        "cost" -> pure Cost
+        "usage" -> pure Usage
+        e -> fromTextError $ "Failure parsing BudgetType from value: '" <> e
+           <> "'. Accepted values: cost, usage"
+
+instance ToText BudgetType where
+    toText = \case
+        Cost -> "COST"
+        Usage -> "USAGE"
+
+instance Hashable     BudgetType
+instance NFData       BudgetType
+instance ToByteString BudgetType
+instance ToQuery      BudgetType
+instance ToHeader     BudgetType
+
+instance ToJSON BudgetType where
+    toJSON = toJSONText
+
+instance FromJSON BudgetType where
+    parseJSON = parseJSONText "BudgetType"
+
+-- | The comparison operator of a notification. Currently we support less than, equal to and greater than.
+data ComparisonOperator
+    = EqualTo
+    | GreaterThan
+    | LessThan
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ComparisonOperator where
+    parser = takeLowerText >>= \case
+        "equal_to" -> pure EqualTo
+        "greater_than" -> pure GreaterThan
+        "less_than" -> pure LessThan
+        e -> fromTextError $ "Failure parsing ComparisonOperator from value: '" <> e
+           <> "'. Accepted values: equal_to, greater_than, less_than"
+
+instance ToText ComparisonOperator where
+    toText = \case
+        EqualTo -> "EQUAL_TO"
+        GreaterThan -> "GREATER_THAN"
+        LessThan -> "LESS_THAN"
+
+instance Hashable     ComparisonOperator
+instance NFData       ComparisonOperator
+instance ToByteString ComparisonOperator
+instance ToQuery      ComparisonOperator
+instance ToHeader     ComparisonOperator
+
+instance ToJSON ComparisonOperator where
+    toJSON = toJSONText
+
+instance FromJSON ComparisonOperator where
+    parseJSON = parseJSONText "ComparisonOperator"
+
+-- | The type of a notification. It should be ACTUAL or FORECASTED.
+data NotificationType
+    = Actual
+    | Forecasted
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText NotificationType where
+    parser = takeLowerText >>= \case
+        "actual" -> pure Actual
+        "forecasted" -> pure Forecasted
+        e -> fromTextError $ "Failure parsing NotificationType from value: '" <> e
+           <> "'. Accepted values: actual, forecasted"
+
+instance ToText NotificationType where
+    toText = \case
+        Actual -> "ACTUAL"
+        Forecasted -> "FORECASTED"
+
+instance Hashable     NotificationType
+instance NFData       NotificationType
+instance ToByteString NotificationType
+instance ToQuery      NotificationType
+instance ToHeader     NotificationType
+
+instance ToJSON NotificationType where
+    toJSON = toJSONText
+
+instance FromJSON NotificationType where
+    parseJSON = parseJSONText "NotificationType"
+
+-- | The subscription type of the subscriber. It can be SMS or EMAIL.
+data SubscriptionType
+    = Email
+    | SNS
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText SubscriptionType where
+    parser = takeLowerText >>= \case
+        "email" -> pure Email
+        "sns" -> pure SNS
+        e -> fromTextError $ "Failure parsing SubscriptionType from value: '" <> e
+           <> "'. Accepted values: email, sns"
+
+instance ToText SubscriptionType where
+    toText = \case
+        Email -> "EMAIL"
+        SNS -> "SNS"
+
+instance Hashable     SubscriptionType
+instance NFData       SubscriptionType
+instance ToByteString SubscriptionType
+instance ToQuery      SubscriptionType
+instance ToHeader     SubscriptionType
+
+instance ToJSON SubscriptionType where
+    toJSON = toJSONText
+
+instance FromJSON SubscriptionType where
+    parseJSON = parseJSONText "SubscriptionType"
+
+-- | The time unit of the budget. e.g. weekly, monthly, etc.
+data TimeUnit
+    = Annually
+    | Monthly
+    | Quarterly
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText TimeUnit where
+    parser = takeLowerText >>= \case
+        "annually" -> pure Annually
+        "monthly" -> pure Monthly
+        "quarterly" -> pure Quarterly
+        e -> fromTextError $ "Failure parsing TimeUnit from value: '" <> e
+           <> "'. Accepted values: annually, monthly, quarterly"
+
+instance ToText TimeUnit where
+    toText = \case
+        Annually -> "ANNUALLY"
+        Monthly -> "MONTHLY"
+        Quarterly -> "QUARTERLY"
+
+instance Hashable     TimeUnit
+instance NFData       TimeUnit
+instance ToByteString TimeUnit
+instance ToQuery      TimeUnit
+instance ToHeader     TimeUnit
+
+instance ToJSON TimeUnit where
+    toJSON = toJSONText
+
+instance FromJSON TimeUnit where
+    parseJSON = parseJSONText "TimeUnit"
diff --git a/gen/Network/AWS/Budgets/UpdateBudget.hs b/gen/Network/AWS/Budgets/UpdateBudget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/UpdateBudget.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Budgets.UpdateBudget
+-- 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)
+--
+-- Update the information of a budget already created
+module Network.AWS.Budgets.UpdateBudget
+    (
+    -- * Creating a Request
+      updateBudget
+    , UpdateBudget
+    -- * Request Lenses
+    , ubAccountId
+    , ubNewBudget
+
+    -- * Destructuring the Response
+    , updateBudgetResponse
+    , UpdateBudgetResponse
+    -- * Response Lenses
+    , ubrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of UpdateBudget
+--
+-- /See:/ 'updateBudget' smart constructor.
+data UpdateBudget = UpdateBudget'
+    { _ubAccountId :: !Text
+    , _ubNewBudget :: !Budget
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateBudget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubAccountId' - Undocumented member.
+--
+-- * 'ubNewBudget' - Undocumented member.
+updateBudget
+    :: Text -- ^ 'ubAccountId'
+    -> Budget -- ^ 'ubNewBudget'
+    -> UpdateBudget
+updateBudget pAccountId_ pNewBudget_ =
+    UpdateBudget'
+    { _ubAccountId = pAccountId_
+    , _ubNewBudget = pNewBudget_
+    }
+
+-- | Undocumented member.
+ubAccountId :: Lens' UpdateBudget Text
+ubAccountId = lens _ubAccountId (\ s a -> s{_ubAccountId = a});
+
+-- | Undocumented member.
+ubNewBudget :: Lens' UpdateBudget Budget
+ubNewBudget = lens _ubNewBudget (\ s a -> s{_ubNewBudget = a});
+
+instance AWSRequest UpdateBudget where
+        type Rs UpdateBudget = UpdateBudgetResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateBudgetResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateBudget
+
+instance NFData UpdateBudget
+
+instance ToHeaders UpdateBudget where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.UpdateBudget" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateBudget where
+        toJSON UpdateBudget'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _ubAccountId),
+                  Just ("NewBudget" .= _ubNewBudget)])
+
+instance ToPath UpdateBudget where
+        toPath = const "/"
+
+instance ToQuery UpdateBudget where
+        toQuery = const mempty
+
+-- | Response of UpdateBudget
+--
+-- /See:/ 'updateBudgetResponse' smart constructor.
+newtype UpdateBudgetResponse = UpdateBudgetResponse'
+    { _ubrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateBudgetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubrsResponseStatus' - -- | The response status code.
+updateBudgetResponse
+    :: Int -- ^ 'ubrsResponseStatus'
+    -> UpdateBudgetResponse
+updateBudgetResponse pResponseStatus_ =
+    UpdateBudgetResponse'
+    { _ubrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+ubrsResponseStatus :: Lens' UpdateBudgetResponse Int
+ubrsResponseStatus = lens _ubrsResponseStatus (\ s a -> s{_ubrsResponseStatus = a});
+
+instance NFData UpdateBudgetResponse
diff --git a/gen/Network/AWS/Budgets/UpdateNotification.hs b/gen/Network/AWS/Budgets/UpdateNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/UpdateNotification.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.Budgets.UpdateNotification
+-- 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)
+--
+-- Update the information about a notification already created
+module Network.AWS.Budgets.UpdateNotification
+    (
+    -- * Creating a Request
+      updateNotification
+    , UpdateNotification
+    -- * Request Lenses
+    , unAccountId
+    , unBudgetName
+    , unOldNotification
+    , unNewNotification
+
+    -- * Destructuring the Response
+    , updateNotificationResponse
+    , UpdateNotificationResponse
+    -- * Response Lenses
+    , unrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of UpdateNotification
+--
+-- /See:/ 'updateNotification' smart constructor.
+data UpdateNotification = UpdateNotification'
+    { _unAccountId       :: !Text
+    , _unBudgetName      :: !Text
+    , _unOldNotification :: !Notification
+    , _unNewNotification :: !Notification
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'unAccountId' - Undocumented member.
+--
+-- * 'unBudgetName' - Undocumented member.
+--
+-- * 'unOldNotification' - Undocumented member.
+--
+-- * 'unNewNotification' - Undocumented member.
+updateNotification
+    :: Text -- ^ 'unAccountId'
+    -> Text -- ^ 'unBudgetName'
+    -> Notification -- ^ 'unOldNotification'
+    -> Notification -- ^ 'unNewNotification'
+    -> UpdateNotification
+updateNotification pAccountId_ pBudgetName_ pOldNotification_ pNewNotification_ =
+    UpdateNotification'
+    { _unAccountId = pAccountId_
+    , _unBudgetName = pBudgetName_
+    , _unOldNotification = pOldNotification_
+    , _unNewNotification = pNewNotification_
+    }
+
+-- | Undocumented member.
+unAccountId :: Lens' UpdateNotification Text
+unAccountId = lens _unAccountId (\ s a -> s{_unAccountId = a});
+
+-- | Undocumented member.
+unBudgetName :: Lens' UpdateNotification Text
+unBudgetName = lens _unBudgetName (\ s a -> s{_unBudgetName = a});
+
+-- | Undocumented member.
+unOldNotification :: Lens' UpdateNotification Notification
+unOldNotification = lens _unOldNotification (\ s a -> s{_unOldNotification = a});
+
+-- | Undocumented member.
+unNewNotification :: Lens' UpdateNotification Notification
+unNewNotification = lens _unNewNotification (\ s a -> s{_unNewNotification = a});
+
+instance AWSRequest UpdateNotification where
+        type Rs UpdateNotification =
+             UpdateNotificationResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateNotificationResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateNotification
+
+instance NFData UpdateNotification
+
+instance ToHeaders UpdateNotification where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.UpdateNotification" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateNotification where
+        toJSON UpdateNotification'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _unAccountId),
+                  Just ("BudgetName" .= _unBudgetName),
+                  Just ("OldNotification" .= _unOldNotification),
+                  Just ("NewNotification" .= _unNewNotification)])
+
+instance ToPath UpdateNotification where
+        toPath = const "/"
+
+instance ToQuery UpdateNotification where
+        toQuery = const mempty
+
+-- | Response of UpdateNotification
+--
+-- /See:/ 'updateNotificationResponse' smart constructor.
+newtype UpdateNotificationResponse = UpdateNotificationResponse'
+    { _unrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateNotificationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'unrsResponseStatus' - -- | The response status code.
+updateNotificationResponse
+    :: Int -- ^ 'unrsResponseStatus'
+    -> UpdateNotificationResponse
+updateNotificationResponse pResponseStatus_ =
+    UpdateNotificationResponse'
+    { _unrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+unrsResponseStatus :: Lens' UpdateNotificationResponse Int
+unrsResponseStatus = lens _unrsResponseStatus (\ s a -> s{_unrsResponseStatus = a});
+
+instance NFData UpdateNotificationResponse
diff --git a/gen/Network/AWS/Budgets/UpdateSubscriber.hs b/gen/Network/AWS/Budgets/UpdateSubscriber.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/UpdateSubscriber.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.Budgets.UpdateSubscriber
+-- 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)
+--
+-- Update a subscriber
+module Network.AWS.Budgets.UpdateSubscriber
+    (
+    -- * Creating a Request
+      updateSubscriber
+    , UpdateSubscriber
+    -- * Request Lenses
+    , usAccountId
+    , usBudgetName
+    , usNotification
+    , usOldSubscriber
+    , usNewSubscriber
+
+    -- * Destructuring the Response
+    , updateSubscriberResponse
+    , UpdateSubscriberResponse
+    -- * Response Lenses
+    , usrsResponseStatus
+    ) where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Budgets.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Request of UpdateSubscriber
+--
+-- /See:/ 'updateSubscriber' smart constructor.
+data UpdateSubscriber = UpdateSubscriber'
+    { _usAccountId     :: !Text
+    , _usBudgetName    :: !Text
+    , _usNotification  :: !Notification
+    , _usOldSubscriber :: !Subscriber
+    , _usNewSubscriber :: !Subscriber
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateSubscriber' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usAccountId' - Undocumented member.
+--
+-- * 'usBudgetName' - Undocumented member.
+--
+-- * 'usNotification' - Undocumented member.
+--
+-- * 'usOldSubscriber' - Undocumented member.
+--
+-- * 'usNewSubscriber' - Undocumented member.
+updateSubscriber
+    :: Text -- ^ 'usAccountId'
+    -> Text -- ^ 'usBudgetName'
+    -> Notification -- ^ 'usNotification'
+    -> Subscriber -- ^ 'usOldSubscriber'
+    -> Subscriber -- ^ 'usNewSubscriber'
+    -> UpdateSubscriber
+updateSubscriber pAccountId_ pBudgetName_ pNotification_ pOldSubscriber_ pNewSubscriber_ =
+    UpdateSubscriber'
+    { _usAccountId = pAccountId_
+    , _usBudgetName = pBudgetName_
+    , _usNotification = pNotification_
+    , _usOldSubscriber = pOldSubscriber_
+    , _usNewSubscriber = pNewSubscriber_
+    }
+
+-- | Undocumented member.
+usAccountId :: Lens' UpdateSubscriber Text
+usAccountId = lens _usAccountId (\ s a -> s{_usAccountId = a});
+
+-- | Undocumented member.
+usBudgetName :: Lens' UpdateSubscriber Text
+usBudgetName = lens _usBudgetName (\ s a -> s{_usBudgetName = a});
+
+-- | Undocumented member.
+usNotification :: Lens' UpdateSubscriber Notification
+usNotification = lens _usNotification (\ s a -> s{_usNotification = a});
+
+-- | Undocumented member.
+usOldSubscriber :: Lens' UpdateSubscriber Subscriber
+usOldSubscriber = lens _usOldSubscriber (\ s a -> s{_usOldSubscriber = a});
+
+-- | Undocumented member.
+usNewSubscriber :: Lens' UpdateSubscriber Subscriber
+usNewSubscriber = lens _usNewSubscriber (\ s a -> s{_usNewSubscriber = a});
+
+instance AWSRequest UpdateSubscriber where
+        type Rs UpdateSubscriber = UpdateSubscriberResponse
+        request = postJSON budgets
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateSubscriberResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateSubscriber
+
+instance NFData UpdateSubscriber
+
+instance ToHeaders UpdateSubscriber where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSBudgetServiceGateway.UpdateSubscriber" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateSubscriber where
+        toJSON UpdateSubscriber'{..}
+          = object
+              (catMaybes
+                 [Just ("AccountId" .= _usAccountId),
+                  Just ("BudgetName" .= _usBudgetName),
+                  Just ("Notification" .= _usNotification),
+                  Just ("OldSubscriber" .= _usOldSubscriber),
+                  Just ("NewSubscriber" .= _usNewSubscriber)])
+
+instance ToPath UpdateSubscriber where
+        toPath = const "/"
+
+instance ToQuery UpdateSubscriber where
+        toQuery = const mempty
+
+-- | Response of UpdateSubscriber
+--
+-- /See:/ 'updateSubscriberResponse' smart constructor.
+newtype UpdateSubscriberResponse = UpdateSubscriberResponse'
+    { _usrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateSubscriberResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usrsResponseStatus' - -- | The response status code.
+updateSubscriberResponse
+    :: Int -- ^ 'usrsResponseStatus'
+    -> UpdateSubscriberResponse
+updateSubscriberResponse pResponseStatus_ =
+    UpdateSubscriberResponse'
+    { _usrsResponseStatus = pResponseStatus_
+    }
+
+-- | -- | The response status code.
+usrsResponseStatus :: Lens' UpdateSubscriberResponse Int
+usrsResponseStatus = lens _usrsResponseStatus (\ s a -> s{_usrsResponseStatus = a});
+
+instance NFData UpdateSubscriberResponse
diff --git a/gen/Network/AWS/Budgets/Waiters.hs b/gen/Network/AWS/Budgets/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Budgets/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.Budgets.Waiters
+-- 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 Network.AWS.Budgets.Waiters where
+
+import           Network.AWS.Budgets.Types
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-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 Main (main) where
+
+import Test.Tasty
+import Test.AWS.Budgets
+import Test.AWS.Budgets.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "Budgets"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Budgets.hs b/test/Test/AWS/Budgets.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Budgets.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.AWS.Budgets
+-- 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.Budgets
+    ( tests
+    , fixtures
+    ) where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/Budgets/Internal.hs b/test/Test/AWS/Budgets/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Budgets/Internal.hs
@@ -0,0 +1,9 @@
+-- |
+-- Module      : Test.AWS.Budgets.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.Budgets.Internal where
diff --git a/test/Test/AWS/Gen/Budgets.hs b/test/Test/AWS/Gen/Budgets.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/Budgets.hs
@@ -0,0 +1,273 @@
+{-# 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.Budgets
+-- 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.Gen.Budgets where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.Budgets
+import Test.AWS.Budgets.Internal
+
+-- 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"
+--         [ requestDescribeSubscribersForNotification $
+--             describeSubscribersForNotification
+--
+--         , requestDescribeNotificationsForBudget $
+--             describeNotificationsForBudget
+--
+--         , requestDescribeBudgets $
+--             describeBudgets
+--
+--         , requestCreateSubscriber $
+--             createSubscriber
+--
+--         , requestUpdateBudget $
+--             updateBudget
+--
+--         , requestDeleteBudget $
+--             deleteBudget
+--
+--         , requestDeleteNotification $
+--             deleteNotification
+--
+--         , requestUpdateNotification $
+--             updateNotification
+--
+--         , requestDescribeBudget $
+--             describeBudget
+--
+--         , requestUpdateSubscriber $
+--             updateSubscriber
+--
+--         , requestDeleteSubscriber $
+--             deleteSubscriber
+--
+--         , requestCreateBudget $
+--             createBudget
+--
+--         , requestCreateNotification $
+--             createNotification
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseDescribeSubscribersForNotification $
+--             describeSubscribersForNotificationResponse
+--
+--         , responseDescribeNotificationsForBudget $
+--             describeNotificationsForBudgetResponse
+--
+--         , responseDescribeBudgets $
+--             describeBudgetsResponse
+--
+--         , responseCreateSubscriber $
+--             createSubscriberResponse
+--
+--         , responseUpdateBudget $
+--             updateBudgetResponse
+--
+--         , responseDeleteBudget $
+--             deleteBudgetResponse
+--
+--         , responseDeleteNotification $
+--             deleteNotificationResponse
+--
+--         , responseUpdateNotification $
+--             updateNotificationResponse
+--
+--         , responseDescribeBudget $
+--             describeBudgetResponse
+--
+--         , responseUpdateSubscriber $
+--             updateSubscriberResponse
+--
+--         , responseDeleteSubscriber $
+--             deleteSubscriberResponse
+--
+--         , responseCreateBudget $
+--             createBudgetResponse
+--
+--         , responseCreateNotification $
+--             createNotificationResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestDescribeSubscribersForNotification :: DescribeSubscribersForNotification -> TestTree
+requestDescribeSubscribersForNotification = req
+    "DescribeSubscribersForNotification"
+    "fixture/DescribeSubscribersForNotification.yaml"
+
+requestDescribeNotificationsForBudget :: DescribeNotificationsForBudget -> TestTree
+requestDescribeNotificationsForBudget = req
+    "DescribeNotificationsForBudget"
+    "fixture/DescribeNotificationsForBudget.yaml"
+
+requestDescribeBudgets :: DescribeBudgets -> TestTree
+requestDescribeBudgets = req
+    "DescribeBudgets"
+    "fixture/DescribeBudgets.yaml"
+
+requestCreateSubscriber :: CreateSubscriber -> TestTree
+requestCreateSubscriber = req
+    "CreateSubscriber"
+    "fixture/CreateSubscriber.yaml"
+
+requestUpdateBudget :: UpdateBudget -> TestTree
+requestUpdateBudget = req
+    "UpdateBudget"
+    "fixture/UpdateBudget.yaml"
+
+requestDeleteBudget :: DeleteBudget -> TestTree
+requestDeleteBudget = req
+    "DeleteBudget"
+    "fixture/DeleteBudget.yaml"
+
+requestDeleteNotification :: DeleteNotification -> TestTree
+requestDeleteNotification = req
+    "DeleteNotification"
+    "fixture/DeleteNotification.yaml"
+
+requestUpdateNotification :: UpdateNotification -> TestTree
+requestUpdateNotification = req
+    "UpdateNotification"
+    "fixture/UpdateNotification.yaml"
+
+requestDescribeBudget :: DescribeBudget -> TestTree
+requestDescribeBudget = req
+    "DescribeBudget"
+    "fixture/DescribeBudget.yaml"
+
+requestUpdateSubscriber :: UpdateSubscriber -> TestTree
+requestUpdateSubscriber = req
+    "UpdateSubscriber"
+    "fixture/UpdateSubscriber.yaml"
+
+requestDeleteSubscriber :: DeleteSubscriber -> TestTree
+requestDeleteSubscriber = req
+    "DeleteSubscriber"
+    "fixture/DeleteSubscriber.yaml"
+
+requestCreateBudget :: CreateBudget -> TestTree
+requestCreateBudget = req
+    "CreateBudget"
+    "fixture/CreateBudget.yaml"
+
+requestCreateNotification :: CreateNotification -> TestTree
+requestCreateNotification = req
+    "CreateNotification"
+    "fixture/CreateNotification.yaml"
+
+-- Responses
+
+responseDescribeSubscribersForNotification :: DescribeSubscribersForNotificationResponse -> TestTree
+responseDescribeSubscribersForNotification = res
+    "DescribeSubscribersForNotificationResponse"
+    "fixture/DescribeSubscribersForNotificationResponse.proto"
+    budgets
+    (Proxy :: Proxy DescribeSubscribersForNotification)
+
+responseDescribeNotificationsForBudget :: DescribeNotificationsForBudgetResponse -> TestTree
+responseDescribeNotificationsForBudget = res
+    "DescribeNotificationsForBudgetResponse"
+    "fixture/DescribeNotificationsForBudgetResponse.proto"
+    budgets
+    (Proxy :: Proxy DescribeNotificationsForBudget)
+
+responseDescribeBudgets :: DescribeBudgetsResponse -> TestTree
+responseDescribeBudgets = res
+    "DescribeBudgetsResponse"
+    "fixture/DescribeBudgetsResponse.proto"
+    budgets
+    (Proxy :: Proxy DescribeBudgets)
+
+responseCreateSubscriber :: CreateSubscriberResponse -> TestTree
+responseCreateSubscriber = res
+    "CreateSubscriberResponse"
+    "fixture/CreateSubscriberResponse.proto"
+    budgets
+    (Proxy :: Proxy CreateSubscriber)
+
+responseUpdateBudget :: UpdateBudgetResponse -> TestTree
+responseUpdateBudget = res
+    "UpdateBudgetResponse"
+    "fixture/UpdateBudgetResponse.proto"
+    budgets
+    (Proxy :: Proxy UpdateBudget)
+
+responseDeleteBudget :: DeleteBudgetResponse -> TestTree
+responseDeleteBudget = res
+    "DeleteBudgetResponse"
+    "fixture/DeleteBudgetResponse.proto"
+    budgets
+    (Proxy :: Proxy DeleteBudget)
+
+responseDeleteNotification :: DeleteNotificationResponse -> TestTree
+responseDeleteNotification = res
+    "DeleteNotificationResponse"
+    "fixture/DeleteNotificationResponse.proto"
+    budgets
+    (Proxy :: Proxy DeleteNotification)
+
+responseUpdateNotification :: UpdateNotificationResponse -> TestTree
+responseUpdateNotification = res
+    "UpdateNotificationResponse"
+    "fixture/UpdateNotificationResponse.proto"
+    budgets
+    (Proxy :: Proxy UpdateNotification)
+
+responseDescribeBudget :: DescribeBudgetResponse -> TestTree
+responseDescribeBudget = res
+    "DescribeBudgetResponse"
+    "fixture/DescribeBudgetResponse.proto"
+    budgets
+    (Proxy :: Proxy DescribeBudget)
+
+responseUpdateSubscriber :: UpdateSubscriberResponse -> TestTree
+responseUpdateSubscriber = res
+    "UpdateSubscriberResponse"
+    "fixture/UpdateSubscriberResponse.proto"
+    budgets
+    (Proxy :: Proxy UpdateSubscriber)
+
+responseDeleteSubscriber :: DeleteSubscriberResponse -> TestTree
+responseDeleteSubscriber = res
+    "DeleteSubscriberResponse"
+    "fixture/DeleteSubscriberResponse.proto"
+    budgets
+    (Proxy :: Proxy DeleteSubscriber)
+
+responseCreateBudget :: CreateBudgetResponse -> TestTree
+responseCreateBudget = res
+    "CreateBudgetResponse"
+    "fixture/CreateBudgetResponse.proto"
+    budgets
+    (Proxy :: Proxy CreateBudget)
+
+responseCreateNotification :: CreateNotificationResponse -> TestTree
+responseCreateNotification = res
+    "CreateNotificationResponse"
+    "fixture/CreateNotificationResponse.proto"
+    budgets
+    (Proxy :: Proxy CreateNotification)
