{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

-- |
-- Module      : Amazonka.Budgets
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Derived from API version @2016-10-20@ of the AWS service descriptions, licensed under Apache 2.0.
--
-- Use the Amazon Web Services Budgets API to plan your service usage,
-- service costs, and instance reservations. This API reference provides
-- descriptions, syntax, and usage examples for each of the actions and
-- data types for the Amazon Web Services Budgets feature.
--
-- Budgets provide you with a way to see the following information:
--
-- -   How close your plan is to your budgeted amount or to the free tier
--     limits
--
-- -   Your usage-to-date, including how much you\'ve used of your Reserved
--     Instances (RIs)
--
-- -   Your current estimated charges from Amazon Web Services, and how
--     much your predicted usage will accrue in charges by the end of the
--     month
--
-- -   How much of your budget has been used
--
-- Amazon Web Services updates your budget status several times a day.
-- Budgets track your unblended costs, subscriptions, refunds, and RIs. You
-- can create the following types of budgets:
--
-- -   __Cost budgets__ - Plan how much you want to spend on a service.
--
-- -   __Usage budgets__ - Plan how much you want to use one or more
--     services.
--
-- -   __RI utilization budgets__ - Define a utilization threshold, and
--     receive alerts when your RI usage falls below that threshold. This
--     lets you see if your RIs are unused or under-utilized.
--
-- -   __RI coverage budgets__ - Define a coverage threshold, and receive
--     alerts when the number of your instance hours that are covered by
--     RIs fall below that threshold. This lets you see how much of your
--     instance usage is covered by a reservation.
--
-- Service Endpoint
--
-- The Amazon Web Services Budgets API provides the following endpoint:
--
-- -   https:\/\/budgets.amazonaws.com
--
-- For information about costs that are associated with the Amazon Web
-- Services Budgets API, see
-- <https://aws.amazon.com/aws-cost-management/pricing/ Amazon Web Services Cost Management Pricing>.
module Amazonka.Budgets
  ( -- * Service Configuration
    defaultService,

    -- * Errors
    -- $errors

    -- ** AccessDeniedException
    _AccessDeniedException,

    -- ** CreationLimitExceededException
    _CreationLimitExceededException,

    -- ** DuplicateRecordException
    _DuplicateRecordException,

    -- ** ExpiredNextTokenException
    _ExpiredNextTokenException,

    -- ** InternalErrorException
    _InternalErrorException,

    -- ** InvalidNextTokenException
    _InvalidNextTokenException,

    -- ** InvalidParameterException
    _InvalidParameterException,

    -- ** NotFoundException
    _NotFoundException,

    -- ** ResourceLockedException
    _ResourceLockedException,

    -- ** ThrottlingException
    _ThrottlingException,

    -- * Waiters
    -- $waiters

    -- * Operations
    -- $operations

    -- ** CreateBudget
    CreateBudget (CreateBudget'),
    newCreateBudget,
    CreateBudgetResponse (CreateBudgetResponse'),
    newCreateBudgetResponse,

    -- ** CreateBudgetAction
    CreateBudgetAction (CreateBudgetAction'),
    newCreateBudgetAction,
    CreateBudgetActionResponse (CreateBudgetActionResponse'),
    newCreateBudgetActionResponse,

    -- ** CreateNotification
    CreateNotification (CreateNotification'),
    newCreateNotification,
    CreateNotificationResponse (CreateNotificationResponse'),
    newCreateNotificationResponse,

    -- ** CreateSubscriber
    CreateSubscriber (CreateSubscriber'),
    newCreateSubscriber,
    CreateSubscriberResponse (CreateSubscriberResponse'),
    newCreateSubscriberResponse,

    -- ** DeleteBudget
    DeleteBudget (DeleteBudget'),
    newDeleteBudget,
    DeleteBudgetResponse (DeleteBudgetResponse'),
    newDeleteBudgetResponse,

    -- ** DeleteBudgetAction
    DeleteBudgetAction (DeleteBudgetAction'),
    newDeleteBudgetAction,
    DeleteBudgetActionResponse (DeleteBudgetActionResponse'),
    newDeleteBudgetActionResponse,

    -- ** DeleteNotification
    DeleteNotification (DeleteNotification'),
    newDeleteNotification,
    DeleteNotificationResponse (DeleteNotificationResponse'),
    newDeleteNotificationResponse,

    -- ** DeleteSubscriber
    DeleteSubscriber (DeleteSubscriber'),
    newDeleteSubscriber,
    DeleteSubscriberResponse (DeleteSubscriberResponse'),
    newDeleteSubscriberResponse,

    -- ** DescribeBudget
    DescribeBudget (DescribeBudget'),
    newDescribeBudget,
    DescribeBudgetResponse (DescribeBudgetResponse'),
    newDescribeBudgetResponse,

    -- ** DescribeBudgetAction
    DescribeBudgetAction (DescribeBudgetAction'),
    newDescribeBudgetAction,
    DescribeBudgetActionResponse (DescribeBudgetActionResponse'),
    newDescribeBudgetActionResponse,

    -- ** DescribeBudgetActionHistories (Paginated)
    DescribeBudgetActionHistories (DescribeBudgetActionHistories'),
    newDescribeBudgetActionHistories,
    DescribeBudgetActionHistoriesResponse (DescribeBudgetActionHistoriesResponse'),
    newDescribeBudgetActionHistoriesResponse,

    -- ** DescribeBudgetActionsForAccount (Paginated)
    DescribeBudgetActionsForAccount (DescribeBudgetActionsForAccount'),
    newDescribeBudgetActionsForAccount,
    DescribeBudgetActionsForAccountResponse (DescribeBudgetActionsForAccountResponse'),
    newDescribeBudgetActionsForAccountResponse,

    -- ** DescribeBudgetActionsForBudget (Paginated)
    DescribeBudgetActionsForBudget (DescribeBudgetActionsForBudget'),
    newDescribeBudgetActionsForBudget,
    DescribeBudgetActionsForBudgetResponse (DescribeBudgetActionsForBudgetResponse'),
    newDescribeBudgetActionsForBudgetResponse,

    -- ** DescribeBudgetNotificationsForAccount (Paginated)
    DescribeBudgetNotificationsForAccount (DescribeBudgetNotificationsForAccount'),
    newDescribeBudgetNotificationsForAccount,
    DescribeBudgetNotificationsForAccountResponse (DescribeBudgetNotificationsForAccountResponse'),
    newDescribeBudgetNotificationsForAccountResponse,

    -- ** DescribeBudgetPerformanceHistory (Paginated)
    DescribeBudgetPerformanceHistory (DescribeBudgetPerformanceHistory'),
    newDescribeBudgetPerformanceHistory,
    DescribeBudgetPerformanceHistoryResponse (DescribeBudgetPerformanceHistoryResponse'),
    newDescribeBudgetPerformanceHistoryResponse,

    -- ** DescribeBudgets (Paginated)
    DescribeBudgets (DescribeBudgets'),
    newDescribeBudgets,
    DescribeBudgetsResponse (DescribeBudgetsResponse'),
    newDescribeBudgetsResponse,

    -- ** DescribeNotificationsForBudget (Paginated)
    DescribeNotificationsForBudget (DescribeNotificationsForBudget'),
    newDescribeNotificationsForBudget,
    DescribeNotificationsForBudgetResponse (DescribeNotificationsForBudgetResponse'),
    newDescribeNotificationsForBudgetResponse,

    -- ** DescribeSubscribersForNotification (Paginated)
    DescribeSubscribersForNotification (DescribeSubscribersForNotification'),
    newDescribeSubscribersForNotification,
    DescribeSubscribersForNotificationResponse (DescribeSubscribersForNotificationResponse'),
    newDescribeSubscribersForNotificationResponse,

    -- ** ExecuteBudgetAction
    ExecuteBudgetAction (ExecuteBudgetAction'),
    newExecuteBudgetAction,
    ExecuteBudgetActionResponse (ExecuteBudgetActionResponse'),
    newExecuteBudgetActionResponse,

    -- ** UpdateBudget
    UpdateBudget (UpdateBudget'),
    newUpdateBudget,
    UpdateBudgetResponse (UpdateBudgetResponse'),
    newUpdateBudgetResponse,

    -- ** UpdateBudgetAction
    UpdateBudgetAction (UpdateBudgetAction'),
    newUpdateBudgetAction,
    UpdateBudgetActionResponse (UpdateBudgetActionResponse'),
    newUpdateBudgetActionResponse,

    -- ** UpdateNotification
    UpdateNotification (UpdateNotification'),
    newUpdateNotification,
    UpdateNotificationResponse (UpdateNotificationResponse'),
    newUpdateNotificationResponse,

    -- ** UpdateSubscriber
    UpdateSubscriber (UpdateSubscriber'),
    newUpdateSubscriber,
    UpdateSubscriberResponse (UpdateSubscriberResponse'),
    newUpdateSubscriberResponse,

    -- * Types

    -- ** ActionStatus
    ActionStatus (..),

    -- ** ActionSubType
    ActionSubType (..),

    -- ** ActionType
    ActionType (..),

    -- ** ApprovalModel
    ApprovalModel (..),

    -- ** AutoAdjustType
    AutoAdjustType (..),

    -- ** BudgetType
    BudgetType (..),

    -- ** ComparisonOperator
    ComparisonOperator (..),

    -- ** EventType
    EventType (..),

    -- ** ExecutionType
    ExecutionType (..),

    -- ** NotificationState
    NotificationState (..),

    -- ** NotificationType
    NotificationType (..),

    -- ** SubscriptionType
    SubscriptionType (..),

    -- ** ThresholdType
    ThresholdType (..),

    -- ** TimeUnit
    TimeUnit (..),

    -- ** Action
    Action (Action'),
    newAction,

    -- ** ActionHistory
    ActionHistory (ActionHistory'),
    newActionHistory,

    -- ** ActionHistoryDetails
    ActionHistoryDetails (ActionHistoryDetails'),
    newActionHistoryDetails,

    -- ** ActionThreshold
    ActionThreshold (ActionThreshold'),
    newActionThreshold,

    -- ** AutoAdjustData
    AutoAdjustData (AutoAdjustData'),
    newAutoAdjustData,

    -- ** Budget
    Budget (Budget'),
    newBudget,

    -- ** BudgetNotificationsForAccount
    BudgetNotificationsForAccount (BudgetNotificationsForAccount'),
    newBudgetNotificationsForAccount,

    -- ** BudgetPerformanceHistory
    BudgetPerformanceHistory (BudgetPerformanceHistory'),
    newBudgetPerformanceHistory,

    -- ** BudgetedAndActualAmounts
    BudgetedAndActualAmounts (BudgetedAndActualAmounts'),
    newBudgetedAndActualAmounts,

    -- ** CalculatedSpend
    CalculatedSpend (CalculatedSpend'),
    newCalculatedSpend,

    -- ** CostTypes
    CostTypes (CostTypes'),
    newCostTypes,

    -- ** Definition
    Definition (Definition'),
    newDefinition,

    -- ** HistoricalOptions
    HistoricalOptions (HistoricalOptions'),
    newHistoricalOptions,

    -- ** IamActionDefinition
    IamActionDefinition (IamActionDefinition'),
    newIamActionDefinition,

    -- ** Notification
    Notification (Notification'),
    newNotification,

    -- ** NotificationWithSubscribers
    NotificationWithSubscribers (NotificationWithSubscribers'),
    newNotificationWithSubscribers,

    -- ** ScpActionDefinition
    ScpActionDefinition (ScpActionDefinition'),
    newScpActionDefinition,

    -- ** Spend
    Spend (Spend'),
    newSpend,

    -- ** SsmActionDefinition
    SsmActionDefinition (SsmActionDefinition'),
    newSsmActionDefinition,

    -- ** Subscriber
    Subscriber (Subscriber'),
    newSubscriber,

    -- ** TimePeriod
    TimePeriod (TimePeriod'),
    newTimePeriod,
  )
where

import Amazonka.Budgets.CreateBudget
import Amazonka.Budgets.CreateBudgetAction
import Amazonka.Budgets.CreateNotification
import Amazonka.Budgets.CreateSubscriber
import Amazonka.Budgets.DeleteBudget
import Amazonka.Budgets.DeleteBudgetAction
import Amazonka.Budgets.DeleteNotification
import Amazonka.Budgets.DeleteSubscriber
import Amazonka.Budgets.DescribeBudget
import Amazonka.Budgets.DescribeBudgetAction
import Amazonka.Budgets.DescribeBudgetActionHistories
import Amazonka.Budgets.DescribeBudgetActionsForAccount
import Amazonka.Budgets.DescribeBudgetActionsForBudget
import Amazonka.Budgets.DescribeBudgetNotificationsForAccount
import Amazonka.Budgets.DescribeBudgetPerformanceHistory
import Amazonka.Budgets.DescribeBudgets
import Amazonka.Budgets.DescribeNotificationsForBudget
import Amazonka.Budgets.DescribeSubscribersForNotification
import Amazonka.Budgets.ExecuteBudgetAction
import Amazonka.Budgets.Lens
import Amazonka.Budgets.Types
import Amazonka.Budgets.UpdateBudget
import Amazonka.Budgets.UpdateBudgetAction
import Amazonka.Budgets.UpdateNotification
import Amazonka.Budgets.UpdateSubscriber
import Amazonka.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.