# PATCH /v1/projects/:projectId/ads/:platform/adsets/:adsetId/budget (/docs/api/reference/ads/patch-adset-budget)



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

Same shape as [`PATCH …/campaigns/:id/budget`](/docs/api/reference/ads/patch-campaign-budget) but at the adset grain. Apple uses "adgroup" for this entity — partner contract uses `adsets` uniformly and Layers translates.

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

Authority: gated by the &#x2A;*`tactical`** axis on the parent campaign.

See [`PATCH …/campaigns/:id/budget`](/docs/api/reference/ads/patch-campaign-budget) for full body / response / error documentation — the contract is identical.

## CBO vs ABO interplay [#cbo-vs-abo-interplay]

On Meta with CBO (campaign budget optimization), adset-level budget is ignored — the campaign's budget is the source. PATCHing adset budget on a CBO campaign returns `PLATFORM_REJECTED`. Use `GET …/campaigns/:id` to read `budgetMode` (CBO or ABO) before deciding which endpoint to call.
