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

# update_meta_catalog_campaign

> Change an existing Meta campaign, written for Advantage+ catalog campaigns: name, status, daily or lifetime budget (minor units), spend cap, bid strategy, schedule, or the product catalog (sent as pro

> [!WARNING]
>
> **Change — approval required.** Calling this tool does not change your ad account. ADSMCP checks the arguments and stages the change as a pending action. It runs only after a person approves it on the dashboard [Approvals](https://adsmcp.si/dashboard/approvals) page. Over MCP or REST you can view (`list_pending_actions`) or reject (`manage_action`) it, never approve it. `execution_mode` and similar arguments do not skip the queue.
>
> **Spend cap.** When the approved change runs, ADSMCP adds up the daily budgets of everything that would be spending in the platform's connected accounts after the change. If that total is above your Max Daily Budget (dashboard [Brand](https://adsmcp.si/dashboard/brand) page), the change is refused. If the total cannot be read, it is refused too.
>
> A change that fails when it runs is not retried automatically. It shows on the dashboard Execution Queue.

Change an existing Meta campaign, written for Advantage+ catalog campaigns: name, status, daily or lifetime budget (minor units), spend cap, bid strategy, schedule, or the product catalog (sent as promoted\_object.product\_catalog\_id). Staged for dashboard approval; nothing changes until it is approved. Budget changes, a shorter schedule on a lifetime budget, and ACTIVE are checked against the account-total spend cap.

**Platform:** Meta Ads · **Type:** Change

## How to call it

* **MCP:** on `https://mcp.adsmcp.si/mcp`, run it through the `meta_ads_write` tool with `{"action": "execute", "tool_name": "update_meta_catalog_campaign", "arguments": { ... }}`, or call `update_meta_catalog_campaign` by name. `search_tools` finds it and `get_tool_schema` returns its arguments; `https://mcp.adsmcp.si/mcp/flat` lists every tool by name.
* **REST:** `POST https://mcp.adsmcp.si/api/v1/tools/update_meta_catalog_campaign/execute` with `Authorization: Bearer sk_live_...` and a JSON body `{"platform": "meta", "arguments": { ... }}`. The arguments are listed below; they are exactly the tool's input schema.


## OpenAPI

````yaml api-reference/openapi.json POST /api/v1/tools/update_meta_catalog_campaign/execute
openapi: 3.1.0
info:
  title: ADSMCP REST API
  version: 0.1.0
  description: >-
    ADSMCP REST API: every public ADSMCP tool as POST
    /api/v1/tools/{name}/execute. Generated from the ADSMCP code (the service
    serves the same document at GET /api/v1/openapi.json). Changes to ad
    accounts are staged for approval by a person on the ADSMCP dashboard;
    nothing in this API can approve them.
servers:
  - url: https://mcp.adsmcp.si
    description: ADSMCP MCP and REST service
security: []
paths:
  /api/v1/tools/update_meta_catalog_campaign/execute:
    post:
      tags:
        - meta
      summary: >-
        Change an existing Meta campaign, written for Advantage+ catalog
        campaigns: name, status, daily or lifetime budget (minor units), spend
        cap, bid strategy, schedule, or the product catalog (sent as
        promoted_object.product_catalog_id). Staged for dashboard approval;
        nothing changes until it is approved. Budget changes, a shorter schedule
        on a lifetime budget, and ACTIVE are checked against the account-total
        spend cap.
      description: >-
        Change an existing Meta campaign, written for Advantage+ catalog
        campaigns: name, status, daily or lifetime budget (minor units), spend
        cap, bid strategy, schedule, or the product catalog (sent as
        promoted_object.product_catalog_id). Staged for dashboard approval;
        nothing changes until it is approved. Budget changes, a shorter schedule
        on a lifetime budget, and ACTIVE are checked against the account-total
        spend cap. Use this when you intend that change. Write tools create
        paused objects or wait for approval, and a failed spend-affecting call
        is not retried automatically.
      operationId: execute_update_meta_catalog_campaign
      parameters:
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
          description: Bearer token
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                platform:
                  type: string
                  default: meta
                arguments:
                  type: object
                  properties:
                    account_id:
                      type: string
                      description: >-
                        Meta ad account id (act_... or the bare number);
                        optional, never sent (the object's own account is used).
                    ad_account_id:
                      type: string
                      description: Alias of account_id.
                    campaign_id:
                      type: string
                      description: Campaign to update.
                    name:
                      type: string
                    status:
                      type: string
                      enum:
                        - ACTIVE
                        - PAUSED
                        - ARCHIVED
                        - DELETED
                      description: >-
                        New status. ACTIVE is checked against the spend cap;
                        DELETED needs confirm_delete: true.
                    daily_budget:
                      type: integer
                      minimum: 1
                      description: >-
                        Daily budget in the account currency's minor units (e.g.
                        cents).
                    lifetime_budget:
                      type: integer
                      minimum: 1
                      description: >-
                        Lifetime budget in the account currency's minor units
                        (e.g. cents).
                    spend_cap:
                      type: integer
                      minimum: 1
                      description: >-
                        Campaign spend cap (lifetime) in the account currency's
                        minor units (e.g. cents).
                    bid_strategy:
                      type: string
                      enum:
                        - LOWEST_COST_WITHOUT_CAP
                        - LOWEST_COST_WITH_BID_CAP
                        - COST_CAP
                        - LOWEST_COST_WITH_MIN_ROAS
                    start_time:
                      type: string
                      description: Start time (ISO 8601).
                    stop_time:
                      type: string
                      description: Stop time (ISO 8601).
                    product_catalog_id:
                      type: string
                      description: Product catalog to promote (numeric id).
                    confirm_delete:
                      type: boolean
                      description: >-
                        Required (true) with status DELETED: deleting cannot be
                        undone once approved.
                    execution_mode:
                      type: string
                      enum:
                        - paused
                        - approval_required
                      description: >-
                        Staging hint; every Meta write is staged for dashboard
                        approval whatever it says.
                  required:
                    - campaign_id
                  additionalProperties: false
              additionalProperties: false
      responses:
        '200':
          description: Tool execution result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExecuteToolResponse'
        '400':
          description: Invalid JSON input.
        '401':
          description: Authentication error.
      security:
        - bearerAuth: []
components:
  schemas:
    ExecuteToolResponse:
      type: object
      properties:
        ok:
          type: boolean
        platform:
          type: string
        tool:
          type: string
        data: {}
        error:
          anyOf:
            - type: 'null'
            - $ref: '#/components/schemas/ErrorResponse'
        mcp_response: {}
      required:
        - ok
        - platform
        - tool
        - error
        - mcp_response
      additionalProperties: false
    ErrorResponse:
      type: object
      properties:
        code: {}
        message:
          type: string
        details: {}
      required:
        - message
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API token

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.