> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bulk update Google Ads campaign budgets

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Changes the daily budget on several campaigns in one call.

Send one entry per campaign in `updates`, each with a `campaign_id` and a `daily_budget_micros`. Budgets are absolute, not deltas, and are in micros of the account currency.

Each entry is applied on its own and this is **not** atomic: the response lists the campaigns that were updated in `succeeded` and the ones that were not in `failed`, each with a reason. A partially applied call still returns a 200, so check `failed` rather than relying on the status code. Re-sending an entry is safe, because the budget is set to the value you send rather than added to it.

<Warning>An entry in `failed` usually means the budget did not change, but it can also mean Google accepted the new budget and only Base44's own record of it failed to save. In that case the campaign is already spending at the new budget. Read the campaign back with [Get campaign](/api-reference/get-google-ads-campaign) before you treat a failed entry as unchanged.</Warning>

Each `reason` is free text meant for a person to read. Do not branch on it.

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time. Send only the fields documented here. Other request fields are not supported and their behavior can change.</Warning>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json patch /api/apps/{app_id}/google-ads/campaigns/bulk-budget
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/google-ads/campaigns/bulk-budget:
    patch:
      summary: Bulk update Google Ads campaign budgets
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Changes the daily budget on several campaigns in one call.


        Send one entry per campaign in `updates`, each with a `campaign_id` and
        a `daily_budget_micros`. Budgets are absolute, not deltas, and are in
        micros of the account currency.


        Each entry is applied on its own and this is **not** atomic: the
        response lists the campaigns that were updated in `succeeded` and the
        ones that were not in `failed`, each with a reason. A partially applied
        call still returns a 200, so check `failed` rather than relying on the
        status code. Re-sending an entry is safe, because the budget is set to
        the value you send rather than added to it.


        <Warning>An entry in `failed` usually means the budget did not change,
        but it can also mean Google accepted the new budget and only Base44's
        own record of it failed to save. In that case the campaign is already
        spending at the new budget. Read the campaign back with [Get
        campaign](/api-reference/get-google-ads-campaign) before you treat a
        failed entry as unchanged.</Warning>


        Each `reason` is free text meant for a person to read. Do not branch on
        it.


        <Note>This endpoint accepts a personal API key. Workspace API keys are
        not authorized for it and are rejected with a 403.</Note>


        <Warning>The response includes fields beyond the ones documented here.
        Don't rely on undocumented response fields, as they can change at any
        time. Send only the fields documented here. Other request fields are not
        supported and their behavior can change.</Warning>
      operationId: >-
        bulk_update_campaigns_budget_api_apps__app_id__google_ads_campaigns_bulk_budget_patch
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose Google Ads campaigns to manage.
            title: App Id
          description: ID of the app whose Google Ads campaigns to manage.
          example: 6820f3a4e7b91d003c45a1f2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              title: BulkUpdateCampaignBudgets
              type: object
              required:
                - updates
              properties:
                updates:
                  type: array
                  description: >-
                    One entry per campaign. An empty array is accepted and
                    changes nothing.
                  items:
                    type: object
                    required:
                      - campaign_id
                      - daily_budget_micros
                    properties:
                      campaign_id:
                        type: string
                        description: >-
                          Campaign to update, as returned in `id` by [List
                          campaigns](/api-reference/list-google-ads-campaigns).
                      daily_budget_micros:
                        type: integer
                        description: >-
                          New daily budget in micros of the account currency.
                          Absolute, not a delta.
            example:
              updates:
                - campaign_id: 68b1c0d4e7b91d003c45a1f2
                  daily_budget_micros: 15000000
                - campaign_id: 68b1c0d4e7b91d003c45a1f4
                  daily_budget_micros: 8000000
      responses:
        '200':
          description: >-
            Per-campaign outcome. Check `failed`: a partial success also returns
            200.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkBudgetUpdateResponse'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have access to this app, the app does not exist, or you
            used a workspace API key. A missing app and an app you cannot reach
            are deliberately the same answer.
        '404':
          description: The app has no connected Google Ads account.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    BulkBudgetUpdateResponse:
      properties:
        succeeded:
          items:
            type: string
          type: array
          title: Succeeded
          description: IDs of the campaigns whose budget was updated.
          example:
            - 68b1c0d4e7b91d003c45a1f2
        failed:
          items:
            $ref: '#/components/schemas/BulkBudgetFailure'
          type: array
          title: Failed
          description: >-
            Campaigns that were left unchanged, each with a reason. Empty when
            every update applied.
          example:
            - campaign_id: 68b1c0d4e7b91d003c45a1f4
              reason: Budget below the minimum for this currency
      type: object
      required:
        - succeeded
        - failed
      title: BulkBudgetUpdateResponse
      description: Per-campaign outcome of a bulk budget update.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    BulkBudgetFailure:
      properties:
        campaign_id:
          type: string
          title: Campaign Id
          description: Campaign whose update failed.
          example: 68b1c0d4e7b91d003c45a1f2
        reason:
          type: string
          title: Reason
          description: >-
            Why it failed. Free text for people to read, not a stable code to
            branch on. Some reasons mean the budget did change on Google and
            only Base44's record of it failed, so verify before treating the
            entry as unchanged.
          example: Budget below the minimum for this currency
      type: object
      required:
        - campaign_id
        - reason
      title: BulkBudgetFailure
      description: One campaign whose budget update did not apply.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````