meta_set_status
Pause, resume or archive a Meta campaign, ad set or ad on a live account. Runs asynchronously and returns a workflowId to poll.
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:
{ "workflowId": "…" }
The change itself runs in a durable workflow. Poll get_mutation_status with that workflowId to find out whether it succeeded.
Example
“Pause the Retargeting — Broad ad set on the Acme account.”
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 withok: falseand Meta’s message, never as a silent retry.401 Unauthorized/403 insufficient_scope(needsmutation:write).