DoiT Budgets API

Track actual cloud spend against planned spend.

Business capability
IT Financial Management BC-600.80

Operations 5

GET /analytics/v1/budgets List budgets #
POST /analytics/v1/budgets Create a budget #
GET /analytics/v1/budgets/{id} Retrieve a budget #
DELETE /analytics/v1/budgets/{id} Delete a budget #
PATCH /analytics/v1/budgets/{id} Update a budget #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/doit-budgets-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

doit-budgets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DoiT Budgets API
  description: Programmatic access to DoiT Platform
  version: v1
servers:
- url: https://api.doit.com
security:
- api_key: []
- tenantId: []
  api_key: []
tags:
- name: Budgets
  description: Track actual cloud spend against planned spend.
paths:
  /analytics/v1/budgets:
    get:
      tags:
      - Budgets
      summary: List budgets
      description: Returns a list of budgets that your account has access to. Budgets are listed in reverse chronological order by default.
      operationId: listBudgets
      parameters:
      - name: maxResults
        in: query
        description: The maximum number of results to return in a single page. Leverage the page tokens to iterate through the entire collection.
        schema:
          type: integer
          format: int64
          default: 50
      - $ref: '#/components/parameters/pageToken'
      - name: filter
        in: query
        description: 'An expression for filtering the results of the request. The syntax is "key:[<value>]".

          Available keys: owner, lastModified in ms (>lasModified). Multiple filters can be connected using a pipe |. Note that using different keys in the same filter results in "AND," while using the same key multiple times in the same filter results in "OR".'
        schema:
          type: string
      - name: minCreationTime
        in: query
        description: Min value for reports creation time, in milliseconds since the POSIX epoch. If set, only reports created after or at this timestamp are returned.
        schema:
          type: string
      - name: maxCreationTime
        in: query
        description: Max value for reports creation time, in milliseconds since the POSIX epoch. If set, only reports created before or at this timestamp are returned.
        schema:
          type: string
      responses:
        '200':
          description: OK - The request succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  budgets:
                    type: array
                    description: Array of Budgets
                    items:
                      $ref: '#/components/schemas/BudgetListItem'
                  pageToken:
                    type: string
                    description: Page token, returned by a previous call, to request the next page of results
                  rowCount:
                    type: integer
                    description: Budgets rows count
                    format: int64
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
    post:
      tags:
      - Budgets
      summary: Create a budget
      description: Create a new budget
      operationId: createBudget
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BudgetCreateUpdateRequest'
            example:
              name: monthly-cloud-budget
              amount: 100
              currency: USD
              usePrevSpend: false
              type: recurring
              timeInterval: month
              startPeriod: 1704067200000
              scopes:
              - id: cloud_provider
                type: fixed
                mode: is
                values:
                - amazon-web-services
              collaborators:
              - role: owner
                email: placeholder@example.com
      responses:
        '201':
          description: Created - New budget created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BudgetAPI'
          links:
            getBudget:
              operationId: getBudget
              parameters:
                id: $response.body#/id
            updateBudget:
              operationId: updateBudget
              parameters:
                id: $response.body#/id
            deleteBudget:
              operationId: deleteBudget
              parameters:
                id: $response.body#/id
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      x-codegen-request-body-name: Body
  /analytics/v1/budgets/{id}:
    get:
      tags:
      - Budgets
      summary: Retrieve a budget
      description: Returns the current utilization and configuration of the specified budget.
      operationId: getBudget
      parameters:
      - name: id
        in: path
        description: Budget ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK - Budget details returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BudgetAPI'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
    delete:
      tags:
      - Budgets
      summary: Delete a budget
      description: Deletes the specified budget.
      operationId: deleteBudget
      parameters:
      - name: id
        in: path
        description: Budget ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK - Budget deleted.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
              example: {}
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
    patch:
      tags:
      - Budgets
      summary: Update a budget
      description: Updates the specified budget.
      operationId: updateBudget
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BudgetCreateUpdateRequest'
        required: false
      responses:
        '200':
          description: OK - Budget updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BudgetAPI'
          links:
            deleteBudget:
              operationId: deleteBudget
              parameters:
                id: $response.body#/id
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      x-codegen-request-body-name: Body
components:
  schemas:
    SlackChannel:
      type: object
      description: Information of a Slack channel for notifications.
      properties:
        customerId:
          type: string
        id:
          type: string
        name:
          type: string
        shared:
          type: boolean
        type:
          type: string
        workspace:
          type: string
    DimensionsTypes:
      description: Dimension filter type. Always pair `type` with `id` on scope filters. Discover valid `id` + `type` pairs for your account with `GET /analytics/v1/dimensions`. `allocation_rule` replaces `attribution`; `allocation` replaces `attribution_group`.
      type: string
      enum:
      - datetime
      - fixed
      - optional
      - label
      - tag
      - project_label
      - system_label
      - attribution
      - attribution_group
      - allocation
      - allocation_rule
      - gke
      - gke_label
      x-enumDescriptions:
        fixed: Standard built-in billing dimensions (Service, Provider, Project/Account ID, SKU, Region, etc.).
        label: Customer-defined resource labels; id is the label key, values are label values.
        tag: AWS cost allocation tags; id is the tag key.
        project_label: Google Cloud project-level labels; id is the label key.
        system_label: DoiT- or provider-generated system labels; id is the system label key.
        optional: Console grouping for label/tag keys; use label, tag, project_label, or system_label in API scopes.
        datetime: Time dimensions (Year, Month, Day) for date-based filtering or grouping.
        allocation_rule: Allocation rule filter; id must be allocation_rule, values are rule IDs.
        allocation: Allocation group filter; id is the allocation group ID.
        gke: Google Kubernetes Engine cost-allocation dimensions.
        gke_label: GKE workload labels; id is the label key.
        attribution: Deprecated. Use allocation_rule.
        attribution_group: Deprecated. Use allocation.
    BudgetCreateUpdateAlert:
      type: object
      description: Threshold settings for budget alerts.
      properties:
        percentage:
          type: number
          format: double
    ExternalBudgetAlert:
      type: object
      description: Budget alert status details.
      properties:
        forecastedDate:
          type: integer
          format: int64
        percentage:
          type: number
          format: double
        triggered:
          type: boolean
    BudgetCreateUpdateRequest:
      type: object
      description: Request body for creating or updating a budget.
      properties:
        alerts:
          type: array
          description: List of up to three thresholds defined as a percentage of the amount.
          items:
            $ref: '#/components/schemas/BudgetCreateUpdateAlert'
        amount:
          type: number
          description: 'Budget period amount

            required: true(if usePrevSpend is false)'
          format: double
        seasonalAmounts:
          type: array
          description: List of seasonal amounts for recurring budgets with different amounts per period.
          items:
            type: number
            format: double
        collaborators:
          type: array
          description: List of permitted users to view/edit the report.
          items:
            $ref: '#/components/schemas/Collaborator'
        currency:
          $ref: '#/components/schemas/Currency'
        description:
          type: string
          description: Budget description
          default: ''
        endPeriod:
          type: integer
          description: 'Fixed budget end date

            required: true(if budget type is fixed)'
          format: int64
        growthPerPeriod:
          type: number
          description: Periodical growth percentage in recurring budget
          format: double
          default: 0
        metric:
          type: string
          description: Budget metric
          enum:
          - cost
          - amortized_cost
          default: cost
        name:
          type: string
          description: Budget Name.
        public:
          type: string
          enum:
          - owner
          - editor
          - viewer
        recipients:
          type: array
          description: List of emails to notify when reaching alert threshold.
          items:
            type: string
        recipientsSlackChannels:
          type: array
          description: List of Slack channels to notify when reaching alert threshold.
          items:
            $ref: '#/components/schemas/SlackChannel'
        scope:
          type: array
          description: List of allocations that define the budget scope.
          items:
            type: string
          deprecated: true
        scopes:
          type: array
          description: The filters selected define the scope of the budget.
          items:
            $ref: '#/components/schemas/ExternalConfigFilter'
        startPeriod:
          type: integer
          description: Budget start Date
          format: int64
        timeInterval:
          type: string
          description: 'Recurring budget interval can be one of: ["day", "week", "month", "quarter", "year"]'
        type:
          type: string
          description: 'budget type can be one of: ["fixed", "recurring"]'
        usePrevSpend:
          type: boolean
          description: Use the last period's spend as the target amount for recurring budgets
          default: false
    Error:
      type: object
      description: Standard error response structure.
      properties:
        error:
          type: string
          description: Detailed error message.
    BudgetAPI:
      required:
      - currency
      - name
      - scopes
      - startPeriod
      - timeInterval
      - type
      type: object
      description: Budget details and runtime metrics.
      properties:
        alerts:
          type: array
          description: List of up to three thresholds defined as a percentage of amount.
          items:
            $ref: '#/components/schemas/ExternalBudgetAlert'
        amount:
          type: number
          description: 'Budget period amount

            required: true(if usePrevSpend is false)'
          format: double
        seasonalAmounts:
          type: array
          description: List of seasonal amounts for recurring budgets with different amounts per period.
          items:
            type: number
            format: double
        collaborators:
          type: array
          description: List of permitted users to view/edit the report.
          items:
            $ref: '#/components/schemas/Collaborator'
        createTime:
          type: integer
          description: Creation time (in UNIX timestamp).
          format: int64
        currency:
          $ref: '#/components/schemas/Currency'
        currentUtilization:
          type: number
          format: double
        description:
          type: string
          description: Budget description.
        endPeriod:
          type: integer
          description: 'Fixed budget end date (in UNIX timestamp)

            required: true(if budget type is fixed)'
          format: int64
        forecastedUtilization:
          type: number
          format: double
        growthPerPeriod:
          type: number
          description: Periodical growth percentage in recurring budgets.
          format: double
          default: 0
        id:
          type: string
          description: 'budget ID, identifying the report

            in:path'
        metric:
          type: string
          description: Budget metric - currently fixed to "cost"
          default: cost
        name:
          type: string
          description: Budget Name
        public:
          description: Public sharing access level for the budget.
          type: string
          enum:
          - owner
          - editor
          - viewer
        recipients:
          type: array
          description: List of emails to notify when reaching alert threshold.
          items:
            type: string
        recipientsSlackChannels:
          type: array
          description: List of Slack channels to notify when reaching alert threshold.
          items:
            $ref: '#/components/schemas/SlackChannel'
        scope:
          type: array
          description: List of allocations that defines the budget scope.
          items:
            type: string
        scopes:
          type: array
          description: The filters selected define the scope of the budget.
          items:
            $ref: '#/components/schemas/ExternalConfigFilter'
        startPeriod:
          type: integer
          description: Budget start date (in UNIX timestamp).
          format: int64
        timeInterval:
          type: string
          description: 'Recurring budget interval can be one of: ["day", "week", "month", "quarter" ,"year"]'
        type:
          type: string
          description: 'budget type can be one of: ["fixed", "recurring"]'
        updateTime:
          type: integer
          description: Update time (in UNIX timestamp).
          format: int64
        usePrevSpend:
          type: boolean
          description: Use the last period's spend as the target amount for recurring budgets.
          default: false
    AlertThreshold:
      type: object
      description: A numeric or percentage threshold.
      properties:
        amount:
          type: number
          format: double
        percentage:
          type: number
          format: double
    ExternalConfigFilter:
      description: 'To include or exclude certain values.

        When using allocation rules as a filter, both the type and the ID must be "allocation_rule", and the values array contains the allocation rule IDs.

        When using allocations as a filter, the type must be "allocation" and the ID is the actual allocation group ID.'
      type: object
      required:
      - id
      - type
      properties:
        id:
          type: string
          description: 'Dimension key to filter on. Must pair with `type` and match a dimension returned by `GET /analytics/v1/dimensions` (for example, `service_description` with `type: fixed`). For `allocation_rule`, use `allocation_rule`. For `allocation`, use the allocation group ID. See `DimensionsTypes` for how each `type` uses `id`.'
        type:
          $ref: '#/components/schemas/DimensionsTypes'
        values:
          type: array
          description: List of values to include or exclude. Must match exact strings from your billing or DataHub data for the dimension (for example, `Amazon Simple Storage Service` for AWS S3 on `service_description`). For `allocation_rule`, use allocation rule IDs.
          items:
            type: string
        mode:
          type: string
          description: Controls how the dimension’s `values` are matched when the alert query runs. If mode is omitted, behavior defaults to is.
          enum:
          - is
          - starts_with
          - ends_with
          - contains
          - regexp
          x-enumDescriptions:
            is: Exact match on one or more values.
            starts_with: Value starts with the given string(s).
            ends_with: Value ends with the given string(s).
            contains: Value contains the given string(s).
            regexp: Value matches the regular expression in `values` (exactly one pattern).
        inverse:
          type: boolean
          description: Set to `true` to exclude the set values. If inverse is omitted, behavior defaults to `false`.
        caseInsensitive:
          type: boolean
          description: If true, string matching is case-insensitive. Effective only for starts_with, ends_with, and contains modes; ignored otherwise.
          default: false
        includeNull:
          type: boolean
          description: Include rows where the dimension is null. If includeNull is omitted, behavior defaults to `false`.
          default: false
      example:
        id: cloud_provider
        type: fixed
        inverse: false
        values:
        - google-cloud
    BudgetListItem:
      type: object
      description: Summary information for a budget.
      properties:
        alertThresholds:
          type: array
          items:
            $ref: '#/components/schemas/AlertThreshold'
        amount:
          type: number
          format: double
        budgetName:
          type: string
        createTime:
          type: integer
          format: int64
        currency:
          type: string
        currentUtilization:
          type: number
          format: double
        endPeriod:
          type: integer
          format: int64
        forecastedUtilizationDate:
          type: integer
          format: int64
        id:
          type: string
        owner:
          type: string
        scope:
          type: array
          description: List of allocations that define the budget scope.
          items:
            type: string
          deprecated: true
        scopes:
          type: array
          description: The filters selected define the scope of the budget.
          items:
            $ref: '#/components/schemas/ExternalConfigFilter'
        startPeriod:
          type: integer
          format: int64
        timeInterval:
          type: string
        updateTime:
          type: integer
          format: int64
        url:
          type: string
    Collaborator:
      type: object
      description: A user or identity that has access to a resource.
      properties:
        email:
          type: string
        role:
          type: string
          enum:
          - owner
          - editor
          - viewer
    Currency:
      description: Currency code for monetary values.
      type: string
      enum:
      - USD
      - ILS
      - EUR
      - AUD
      - CAD
      - GBP
      - DKK
      - NOK
      - SEK
      - BRL
      - SGD
      - MXN
      - CHF
      - MYR
      - TWD
      - EGP
      - ZAR
      - JPY
      - IDR
      - AED
      - THB
      - COP
  responses:
    '400':
      description: Bad Request - The server cannot process the request, often due to a malformed request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    '401':
      description: Unauthorized - Invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    '404':
      description: Not Found - The requested resource does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    '403':
      description: Forbidden - The client is not authorized to perform the request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    pageToken:
      name: pageToken
      in: query
      description: Page token, returned by a previous call, to request the next page of results
      schema:
        type: string
  securitySchemes:
    api_key:
      type: apiKey
      name: Authorization
      description: Use the "Bearer <API_KEY>" format or sign in for autofill
      in: header
    tenantId:
      type: apiKey
      name: X-Tenant-Id
      description: 'Tenant (customer) ID that sets the request''s customer context.


        Required when the credential can access more than one tenant; omit when the

        credential is scoped to exactly one tenant (the server resolves that tenant

        automatically). If omitted for a multi-tenant credential, the request fails

        with `400` and code `tenant_id_required`. If the value conflicts with the

        credential''s tenant scope, the request fails with `400` and code

        `tenant_id_mismatch`.


        Use this header over the legacy `customerContext` query parameter, which

        only applies to legacy API keys and is ignored by personal and service-account

        API tokens.

        '
      in: header
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://console.doit.com/sign-in/oauth
          tokenUrl: https://console.doit.com/api/auth/token
          scopes:
            dci: Access All Data
x-samples-languages:
- curl
- go
- node
- python
x-cli-config:
  security: oauth2
  params:
    client_id: cli