update_campaign_budget
Change a campaign’s daily budget (in the account’s currency, e.g. USD). Same preview / decision-log semantics as update_campaign_status.
Platform support: Meta Ads only in this release. Google Ads budgets require a separate budget-resource indirection that isn’t wired through MCP yet — calls for Google accounts return error_type="unsupported_for_platform". TikTok is unsupported for mutations in general.
Parameters#
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | string | yes | Ad account id | |
campaign_id | string | yes | Platform campaign id | |
daily_budget | number | yes | New daily budget in dollars (must be > 0) | |
preview | boolean | no | false | Local diff only; don’t call the platform |
Budgets are always provided in dollars; Adlyse converts to the platform’s minor units (cents for USD) on the wire. Changes below $0.01 are treated as unchanged.
Returns#
{
"ad_account_id": "ad_acct_abc",
"campaign_id": "c1",
"campaign_name": "Retargeting - Core",
"platform": "meta_ads",
"preview": false,
"changed": true,
"applied": true,
"diff": { "daily_budget": { "before": 100.00, "after": 125.00 } },
"decision_id": "decentry_xyz",
"platform_response": { "id": "c1", "daily_budget": 12500 },
"source": "adlyse.ads_writes@v1"
}Field semantics are identical to update_campaign_status, but diff contains a daily_budget object instead of a status object.
Errors#
error_type | When |
|---|---|
auth_error | Missing / invalid API key |
validation_error | daily_budget not a number, ≤ 0 |
not_found | Ad account doesn’t belong to your org, or campaign isn’t synced under this account |
unsupported_for_platform | Google Ads (budget-resource indirection not wired) or TikTok |
credentials_missing | Meta account has no linked credentials — reconnect it |
platform_error | Meta API rejected the change; no decision is logged on failure |
Idempotency#
Calling update_campaign_budget with a value equal to (or within ±$0.005 of) the current daily budget returns changed: false, applied: false, decision_id: null without contacting Meta.
Example#
Request:
{
"ad_account_id": "ad_acct_abc",
"campaign_id": "c1",
"daily_budget": 125.00,
"preview": false
}Response: as shown above.
See also#
update_campaign_status— pause / resume- Decision Log — the auto-logged entry model