---
search:
  tags:
    - Campaigns
    - POST
seo:
  description: >-
    Available on: Meta. Reference for the POST
    /mutations/{advertiserId}/campaigns/{id}/copies endpoint in the AdCrunch
    API.
sidebar:
  label: Copy a campaign
  badge: POST
title: Copy a campaign
type: openapi-operation
---
**Available on:** [![Meta](/providers/meta.svg)](https://docs.adcrunch.dev/connect/providers)

Copies a campaign. The path names the campaign to copy.

It starts a Mutation of the kind `meta_copy_campaign`, the same change that `POST /mutations` starts with that kind. The MCP tool of the same name makes the same change.

Copy a campaign. The copy has no ad set and no ad: create them with meta_copy_adset or meta_create_adset. A copy is shallow: Meta copies this one object with its settings, and none of the objects under it. The copy starts paused, and Meta adds " - Copy" to its name. To give the copy a full name, use `meta_update_name`. The result gives the id of the copy and the budget that the copy carries, which is what an activate can spend. A copy starts its own learning phase. Meta refuses some copies: an Advantage+ shopping campaign and an Advantage+ app campaign cannot be copied, and a copy that targets the EU needs the default payor and the default beneficiary of the ad account.

The change does **not** happen during this request. The answer is `202`, and `Location` names the Mutation. Poll `GET /mutations/{id}` until it reports `complete` or `errored`. A Mutation is durable, so the id stays valid across retries and restarts.

A refused request starts nothing. AdCrunch refuses a body that does not match, an advertiser that is not yours, an advertiser with no usable connection, and an advertiser connected without write access before a Mutation exists. So a failed call leaves no row in the history.

**This operation checks the credential first and the body second.** A missing or unusable credential answers `401` even when the body is wrong as well.

A create and a copy never start delivery: the new object arrives **paused**. Send `PATCH …/status` with `ACTIVE` to start it.

`POST /mutations/{advertiserId}/campaigns/{id}/copies`
