Skip to content

Duplicate a campaign

Duplicates a campaign, including its ad sets, ads, creatives, and targeting by default (deepCopy: true). The copy is created paused so callers can review before launching.

Per-platform implementation:

  • Meta uses the native POST /{campaign-id}/copies endpoint.
  • TikTok has no native copy primitive; Zernio walks the source graph (/v2/campaign/get/, /v2/adgroup/get/, /v2/ad/get/) and recreates each entity via the corresponding /create/ endpoints, carrying over budget / targeting / bid_type / bid_price / deep_bid_type / creative fields. Spark Ad linkage (tiktok_item_id) is preserved.

The new hierarchy is asynchronous to materialize in our DB — we trigger sync discovery automatically. Set syncAfter: false to skip and poll /v1/ads/tree on your own cadence.

Other platforms return 501 Not Implemented.

POST /v1/ads/campaigns/{campaignId}/duplicate

Duplicates a campaign, including its ad sets, ads, creatives, and targeting by default (deepCopy: true). The copy is created paused so callers can review before launching.

Per-platform implementation:

  • Meta uses the native POST /{campaign-id}/copies endpoint.
  • TikTok has no native copy primitive; Zernio walks the source graph (/v2/campaign/get/, /v2/adgroup/get/, /v2/ad/get/) and recreates each entity via the corresponding /create/ endpoints, carrying over budget / targeting / bid_type / bid_price / deep_bid_type / creative fields. Spark Ad linkage (tiktok_item_id) is preserved.

The new hierarchy is asynchronous to materialize in our DB — we trigger sync discovery automatically. Set syncAfter: false to skip and poll /v1/ads/tree on your own cadence.

Other platforms return 501 Not Implemented.

Parameters

  • campaignId (path, string) required — Source platform campaign ID

Request body

Content-Type: application/json

  • platform (string) required (enum: facebook, instagram, tiktok)
  • deepCopy (boolean) — Copy child ad sets + ads + creatives + targeting
  • statusOption (string) (enum: ACTIVE, PAUSED, INHERITED_FROM_SOURCE)
  • startTime (string) — Reschedule the copied hierarchy's start time
  • endTime (string)
  • renameStrategy (string) (enum: DEEP_RENAME, ONLY_TOP_LEVEL_RENAME, NO_RENAME)
  • renamePrefix (string)
  • renameSuffix (string)
  • syncAfter (boolean) — Trigger ads discovery on the owning account after the copy succeeds

Responses

200 — Campaign duplicated

  • copiedCampaignId (string) — Platform ID of the new campaign
  • discovery (string) (enum: triggered, skipped, failed)
  • raw (object) — Platform-native response from the copy endpoint (Meta includes ad_object_ids for child copies)

400 — Invalid input

401

404 — Source campaign not found

501 — Operation not supported on this platform