---
title: "Copy or move banner to campaign"
type: reference
method: POST
path: /rest-api/banner/{bannerId}/{operation}/{campaignId}.do
tag: "Banners"
---

# Copy or move banner to campaign

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

Copies or moves an existing banner to a campaign (the same or another one). COPY creates copyCount new banners (1 to 20, default 1; anything else is a 400 naming the limit) and returns their IDs in 'created' and, in 'copies', each copy's id, name and whether it starts active (a copy keeps the source banner's on/off state). A copy is named after the optional 'name' - the first copy takes it as given, later ones get ' 2', ' 3'... appended - or, without 'name', '<name>_copy' / '<name>_copy(N)' when the target campaign already has a banner of the source's name, and the source's own name otherwise. 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. MOVE reassigns the same banner (ID unchanged) to the target campaign and returns moved=true; it loses its placement links unless keepBannersLinked=true. The source banner must have its creative files present.

## 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 |
| `campaignId` | integer | yes | `2001` | ID of the target campaign to copy/move the banner to |

## Form params

| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| `copyCount` | integer | no | `1` | Number of copies to create, 1 to 20 (only for COPY operation, 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 |
| `name` | string | no | `Summer Sale 300x250 - B` | Name for the copy (COPY only, at most 500 characters). With copyCount above 1 the later copies are named '<name> 2', '<name> 3'... Omit to keep the source's name (with '_copy' appended when the target campaign already has one of that name). |

## Responses

- `200` — Banner copied or moved successfully
- `400` — Invalid banner, campaign, or operation
- `401` — Authentication error
- `403` — Not enough permissions
- `404` — Not found — resource does not exist
- `500` — Internal server error. When a COPY fails after saving some copies, the message says which copy failed and created lists the saved copies

## Example request

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

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