# PATCH /v1/projects/:projectId/ads/:platform/campaigns/:campaignId/budget (/docs/api/reference/ads/patch-campaign-budget)



<Endpoint method="PATCH" path="/v1/projects/:projectId/ads/{platform}/campaigns/:campaignId/budget" scope="ads:write:budgets" phase="1" />

Updates a campaign's budget. **Cents universally** — Layers translates per-platform at the proxy boundary. See [LOCK 2](/docs/api/concepts/ads-write-model#currency).

## Body [#body]

<Parameters
  title="Body (one of)"
  rows="[
  { name: 'dailyBudgetCents', type: 'integer', description: 'New daily budget in cents.' },
  { name: 'lifetimeBudgetCents', type: 'integer', description: 'New lifetime budget in cents.' },
]"
/>

Pass exactly one. Switching budget mode (daily ↔ lifetime) on Meta requires platform-side handling — Layers translates; some platforms refuse mid-flight switches and return `PLATFORM_REJECTED`.

## Request [#request]

```bash
curl -X PATCH https://api.layers.com/v1/projects/$PROJECT_ID/ads/meta/campaigns/$CAMPAIGN_ID/budget \
  -H "Authorization: Bearer $LAYERS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "dailyBudgetCents": 7500 }'
```

## Response [#response]

`202` with `{jobId, verdictId, status}` per the [bucket-mode authority](/docs/api/concepts/ads-write-model). On `tactical: "auto"` axes, dispatch is immediate and the response carries the platform-side response too. On `draft`, the change queues as a pending action.

## Errors [#errors]

| Code                | When                                                                   |
| ------------------- | ---------------------------------------------------------------------- |
| `AUTHORITY_DENIED`  | `tactical` axis is `off`.                                              |
| `VALIDATION`        | Both daily + lifetime set; budget below platform minimum.              |
| `PLATFORM_REJECTED` | Platform refused (mid-flight mode switch, or lifetime past `endTime`). |

## See also [#see-also]

* [Ads write model — currency](/docs/api/concepts/ads-write-model#currency)
* [`PATCH …/adsets/:id/budget`](/docs/api/reference/ads/patch-adset-budget)
