---
title: meta_set_status
description: Pause, resume or archive a Meta campaign, ad set or ad on a live account. Runs asynchronously and returns a workflowId to poll.
---

import Callout from '#docs/components/mdx/callout.astro';

Pauses, resumes or archives a live Meta **campaign**, **ad set** or **ad**. Requires the `mutation:write` scope, and the ad account must be connected to your organization with write access.

`ACTIVE` resumes delivery, which spends money. `PAUSED` stops it. `ARCHIVED` retires the object.

> **This changes a live ad account**
>
> There is no confirmation step. The call is made as soon as the tool runs, and
> the change is recorded on your **Activity** page with your name against it.

> **ARCHIVED is close to one-way**
>
> An archived object leaves Ads Manager's default views and **cannot be returned
> to delivery**. It exists because there is no hard delete — it is how something
> that should never have been created gets retired, for example a duplicate
> campaign an agent made by mistake. Prefer `PAUSED` for anything you might want
> back. Archive is not a stronger pause.

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `advertiserId` | `acc_${string}` | yes | The ad account. Must belong to your organization — find it with `list_advertisers`. |
| `id` | `string` | yes | The Meta object ID of the campaign, ad set or ad. |
| `level` | `'campaign' \| 'adset' \| 'ad'` | yes | Which level `id` refers to. |
| `status` | `'ACTIVE' \| 'PAUSED' \| 'ARCHIVED'` | yes | `ACTIVE` resumes delivery; `PAUSED` stops it; `ARCHIVED` retires it near-permanently. |

Those three are the only values. There is **no hard delete** — through this tool or any other. Archiving is deliberately the strongest thing available.

## Output

Returns **immediately**, before the change has been applied:

```json
{ "workflowId": "…" }
```

The change itself runs in a durable workflow. Poll [`get_mutation_status`](/mcp/tools/get-mutation-status) with that `workflowId` to find out whether it succeeded.

## Example

> _"Pause the Retargeting — Broad ad set on the Acme account."_

```ts
const { workflowId } = meta_set_status({
  advertiserId: 'acc_123456789',
  id: '23851234567890123',
  level: 'adset',
  status: 'PAUSED',
});

get_mutation_status({ workflowId });
// → { status: 'complete', result: { ok: true, … } }
```

## Errors

- **Advertiser not found for this organization** — the account isn't yours, or doesn't exist. The two are deliberately indistinguishable. Use `list_advertisers`.
- **Connected without write access** — the Meta connection for that account doesn't carry `ads_management`. Reconnect Meta to grant it.
- **`provider_error`** — Meta rejected the change. Returned as a completed mutation with `ok: false` and Meta's message, never as a silent retry.
- `401` or `403` — see [Errors](/mcp/errors), which every tool shares. This one needs `mutation:write`.
