Budget pools — AI budget allocation
Group campaigns or ad sets into a budget pool and let Wevion reallocate a shared daily budget toward your optimization metric, with WAVO guardrails.
Written By Salvatore Sinigaglia
Last updated About 1 hour ago
Group campaigns or ad sets into a budget pool and let Wevion reallocate a shared daily budget toward your optimization metric, with WAVO guardrails.
Budget pools — AI budget allocation
A budget pool groups several campaigns or ad sets under one shared daily budget that Wevion reallocates toward your chosen optimization metric. You set the pool's rules (daily budget, allocation frequency, per-member floors/ceilings), then simulate a what-if allocation or execute it — always through WAVO guardrails. Budget pools live in the AI Operations hub at /automation/budget-pools and require the AI-native features to be enabled.
Who is this for
Mediabuyers and managers who run several campaigns or ad sets toward the same goal and want the budget to flow to the best performers automatically — an alternative to hand-tuning each budget or relying only on platform CBO. It complements the Rules Engine: rules react to thresholds; budget pools continuously redistribute a shared budget.
Where it lives
Budget pools are in the AI Operations page (/automation/budget-pools, tab Budget), which also hosts context, strategy, and memory tools. The page requires a workspace-tool role, and the whole budget-pool API is gated by AI_NATIVE_ENABLED — when AI-native features are turned off, the API returns 503.
Creating a pool
Create a pool with POST /api/v1/budget-pools. Settings:
Members
A pool member is a campaign or ad set. Each member has:
- entityType (
campaignoradset) and entityId - optional adAccountId and entityName
- optional per-member minBudgetCents / maxBudgetCents (override the pool defaults)
- optional weight (bias allocation toward or away from this member)
- isActive flag
Add or reactivate a member with POST /api/v1/budget-pools/:id/members; remove one with DELETE /api/v1/budget-pools/:id/members/:memberId. A pool starts with up to 20 members and you can adjust membership afterward.
Simulate before you commit
Run a what-if allocation with POST /api/v1/budget-pools/:id/simulate (optional from_date / to_date). It calculates how the budget would be split without changing anything live and stores a simulation log entry so you can review the proposed moves first.
Executing an allocation
POST /api/v1/budget-pools/:id/allocate applies the budget changes. Behavior:
- Async by default — the allocation is queued as a background worker; pass
async: falseto run it synchronously - WAVO guardrails always run — the allocation is treated as a budget-change spend event carrying the pool's daily budget, so your EUR caps and account/platform whitelist apply. If any guardrail check blocks it, the request returns 423 Locked
- Rate-limited — a repeated manual allocate can return 429
- Idempotent per day — a retried allocate for the same pool on the same UTC day won't double-count against your daily caps
Because it goes through WAVO, budget pools respect the same Wavo Limits & Autonomy controls (kill-switch, spend caps, protected entities) that govern all automated actions.
Reviewing allocations
- Allocation logs (
GET /api/v1/budget-pools/:id/allocations) — recent simulation and execution logs, so you can see what moved and why - Diminishing returns (
GET /api/v1/budget-pools/:id/diminishing-returns) — flags active campaign members that grew spend recently without improving ROAS, i.e. candidates to cap or trim
Roles
Managing a pool
- Update settings with
PATCH /api/v1/budget-pools/:id(does not change runtime allocation logic mid-run) - Pause a pool by setting
status: paused - Delete with
DELETE /api/v1/budget-pools/:id— soft-deletes the pool and deactivates its members
Common issues
- Budget-pool API returns 503: AI-native features are disabled for the workspace. They must be enabled to use budget pools.
- Allocation blocked (423): a WAVO guardrail stopped it — check your kill-switch, spend caps, and account/platform whitelist in Wavo Limits & Autonomy.
- Allocation returns 429: manual allocations are rate-limited; wait before retrying.
- Budgets not moving: the change is below your
minBudgetChangefloor, or members hit their min/max ceilings. - A member eats too much budget: set a per-member
maxBudgetCentsor lower itsweight.
FAQ
What is a budget pool in Wevion?
A budget pool groups several campaigns or ad sets (up to 20 members) under one shared daily budget that Wevion reallocates toward your chosen optimization metric on a set cadence (every 4, 8, 12, or 24 hours). You define floors, ceilings, and a minimum change to avoid churn, then simulate or execute allocations. Pools live in the AI Operations hub at /automation/budget-pools.
How is a budget pool different from platform CBO?
Platform CBO (campaign budget optimization) redistributes budget among ad sets within a single campaign on the ad platform. A Wevion budget pool works across campaigns and ad sets — even across accounts — under one shared daily budget, scores members over a look-back window, and applies changes through WAVO guardrails. See cc-107 for CBO vs ABO basics.
Can I preview an allocation before it goes live?
Yes. Use the pool's simulate action to compute a what-if allocation without changing anything live; Wevion stores a simulation log so you can review the proposed moves. When you're satisfied, run allocate to apply the changes — which still passes through WAVO guardrails and can be blocked (423) if it exceeds your limits.
Do budget pools respect my Wavo safety limits?
Yes. Every allocation is treated as a budget-change spend event and runs the full WAVO guardrail chain, so your EUR caps and account/platform whitelist apply, and a blocked allocation returns 423 Locked. Allocations are also rate-limited and idempotent per pool per day. Configure these controls in Wavo Limits & Autonomy.