---
title: "Bulk copy or move banner to multiple campaigns"
type: reference
method: POST
path: /rest-api/banner/{bannerId}/{operation}/bulk.do
tag: "Banners"
---

# Bulk copy or move banner to multiple campaigns

`POST https://YOUR-NETWORK-DOMAIN/rest-api/banner/{bannerId}/{operation}/bulk.do`

Copies or moves a banner to multiple target campaigns in a single bulk request. campaignIds is required; an unknown or deleted campaign is a 400 naming it, and UPDATE on every target campaign is checked before anything is copied or moved. MOVE takes exactly one campaign. For COPY operations, the copyCount parameter controls how many copies are created per campaign, 1 to 20. A copy carries the creative and its files, the banner settings, labels, size, approval status, targeting rules, frequency/click/action/no-click capping, the total limit and action limits, pricing with country prices, price adjustment rules, rule groups, template values, tracking code, native and VAST settings; request capping is not copied. A copy keeps the source banner's on/off state, so a switched-on source yields an active copy. Placement links are copied only with keepBannersLinked=true. The response includes per-campaign results keyed by campaign ID (created[<campaignId>] or moved[<campaignId>]). A campaign whose copy failed is listed in 'failed' and the others are still processed; every campaign that received copies is listed in 'updated', so a partial success keeps its 200 with success false, and only a request that changed nothing answers 400. Retry only the campaigns in 'failed'.

## Path params

| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| `bannerId` | integer | yes | `3001` | ID of the banner to copy or move |
| `operation` | string | yes | `COPY` | Operation to perform: COPY or MOVE |

## Form params

| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| `campaignIds` | array<integer> | no | `2001` | IDs of the target campaigns to copy/move the banner to |
| `copyCount` | integer | no | `1` | Number of copies to create per campaign, 1 to 20 (only for COPY, default: 1) |
| `keepBannersLinked` | boolean | no | `false` | If true, the copied or moved banner stays linked to the source banner's placements (those the user can access); if false it ends up with no placement links |

## Responses

- `200` — Bulk operation completed
- `400` — Invalid banner or operation
- `401` — Authentication error
- `403` — Not enough permissions
- `404` — Not found — resource does not exist

## Example request

```bash
curl --request POST \
  --url 'https://YOUR-NETWORK-DOMAIN/rest-api/banner/3001/COPY/bulk.do' \
  --header 'X-Api-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'campaignIds=2001' \
  --data-urlencode 'copyCount=1' \
  --data-urlencode 'keepBannersLinked=false'
```

Source: https://epom.com/ad-server/docs/api/banners/post-banner-bulk