---
title: "Update banner limits"
type: reference
method: POST
path: /rest-api/banner/{bannerId}/limits/update.do
tag: "Limits"
---

# Update banner limits

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

Updates the existing limits for the specified banner. The banner must already have limits enabled; if limits have not been enabled yet, use the 'set' endpoint instead. Accepts form parameters for total/daily thresholds (impressions, clicks, conversions, budget, opportunities), date range, and evenPacing. Requires UPDATE permission on the banner's parent advertiser and the MANAGE_CAPPING_AND_LIMITATIONS user permission. Returns 404 if limits are not enabled. Each cap changed also needs its own limit permission enabled (e.g. WEEKLY_CLICKS_LIMIT, MONTHLY_BUDGET — the permission of the console Limits card row); a cap the role lacks it for is not applied and is listed in ignoredFields naming the permission, while the other fields are saved. A cap sent with its stored value needs no permission. Counters (the same names without the Limit suffix, e.g. totalImpressions) are read-only here: sent, they are listed in ignoredFields and left unchanged; the reset endpoint sets them back to zero.

## Path params

| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| `bannerId` | integer | yes | `42` | Unique numeric identifier of the banner whose limits should be updated |

## Form params

| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| `dailyBudgetLimit` | number | no | `500.00` | Maximum daily budget (revenue) in currency units |
| `dailyClicksLimit` | integer | no | `2000` | Maximum clicks allowed per day |
| `dailyConversionsLimit` | integer | no | `500` | Maximum conversions allowed per day |
| `dailyImpressionsLimit` | integer | no | `50000` | Maximum impressions allowed per day |
| `dailyOpportunitiesLimit` | integer | no | `100000` | Maximum ad opportunities allowed per day |
| `endDate` | string | no | `2025-12-31-23-59` | End date for the limiting period in yyyy-MM-dd-HH-mm (or yyyy-MM-dd HH:mm) format (GMT+0) |
| `evenPacing` | boolean | no | `true` | When true, distributes delivery evenly throughout the day rather than front-loading |
| `monthlyBudgetLimit` | number | no | `3000` | Monthly budget cap; 0 means no monthly cap. Resets on the 1st of the month. |
| `monthlyClicksLimit` | integer | no | `10000` | Maximum clicks allowed per month; 0 means no monthly cap. Resets the 1st of the month. |
| `monthlyConversionsLimit` | integer | no | `10000` | Maximum conversions allowed per month; 0 means no monthly cap. Resets the 1st of the month. |
| `monthlyImpressionsLimit` | integer | no | `1500000` | Maximum impressions allowed per calendar month; 0 means no monthly cap. Resets on the 1st. |
| `monthlyOpportunitiesLimit` | integer | no | `10000` | Maximum opportunities allowed per month; 0 means no monthly cap. Resets the 1st of the month. |
| `removeEndDateLimit` | boolean | no | `true` | When true, removes the existing end date limit |
| `removeStartDateLimit` | boolean | no | `true` | When true, removes the existing start date limit |
| `startDate` | string | no | `2025-01-15-00-00` | Start date for the limiting period in yyyy-MM-dd-HH-mm (or yyyy-MM-dd HH:mm) format (GMT+0) |
| `timezoneOffset` | integer | no | `120` | The caller's offset from UTC in minutes (east positive, e.g. 120 for UTC+2). With useLocalTime on, the startDate/endDate of this request are read in that offset and stored in UTC; dates not sent are left as stored |
| `totalBudgetLimit` | number | no | `10000.00` | Maximum total budget (revenue) allowed over the entire period in currency units |
| `totalClicksLimit` | integer | no | `50000` | Maximum total clicks allowed over the entire period |
| `totalConversionsLimit` | integer | no | `5000` | Maximum total conversions allowed over the entire period |
| `totalImpressionsLimit` | integer | no | `1000000` | Maximum total impressions allowed over the entire period |
| `totalOpportunitiesLimit` | integer | no | `5000000` | Maximum total ad opportunities over the entire period |
| `useLocalTime` | boolean | no | `true` | When true, startDate/endDate are given in the caller's local time (the console's Local Time switch); the limit read answers them in local time too when it is passed the same timezoneOffset, and in UTC otherwise. Omitted, the limit keeps its current setting |
| `weeklyBudgetLimit` | number | no | `700` | Weekly budget cap; 0 means no weekly cap. Resets each ISO week (Monday). |
| `weeklyClicksLimit` | integer | no | `10000` | Maximum clicks allowed per week; 0 means no weekly cap. Resets each ISO week (Monday). |
| `weeklyConversionsLimit` | integer | no | `10000` | Maximum conversions allowed per week; 0 means no weekly cap. Resets each ISO week (Monday). |
| `weeklyImpressionsLimit` | integer | no | `10000` | Maximum impressions allowed per week; 0 means no weekly cap. Resets each ISO week (Monday). |
| `weeklyOpportunitiesLimit` | integer | no | `10000` | Maximum opportunities allowed per week; 0 means no weekly cap. Resets each ISO week (Monday). |

## Responses

- `200` — Banner limits updated successfully
- `400` — Invalid request parameters or banner not found
- `401` — Authentication error
- `403` — Not enough permissions
- `404` — No limits enabled or banner not found

## Example request

```bash
curl --request POST \
  --url 'https://YOUR-NETWORK-DOMAIN/rest-api/banner/42/limits/update.do' \
  --header 'X-Api-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'dailyBudgetLimit=500.00' \
  --data-urlencode 'dailyClicksLimit=2000' \
  --data-urlencode 'dailyConversionsLimit=500'
```

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