Skip to main content

One denomination: gross

Every budget a buyer sets or reads on this platform is gross — the fee-inclusive, all-in amount you pay. This holds at every level:
  • Campaign budget.total
  • Per-product budgets on a media buy
  • Package budgets
What you type is what you pay. There is no separate “media budget” number to set or track — the split between media and fee is derived for you and shown read-only (see Reading the split). Because everything shares one denomination, budget arithmetic is direct: media buy budgets allocate against budget.total, and delivered spend compares against the budget that was set. Media-buy reads carry budget_denomination: "gross" so an agent never has to guess which convention a number uses.

Fee terms and the fee rate

The fee comes from your organization’s fee terms — the commercial terms on your Scope3 contract, resolved from its rate card. Today’s fee terms are a fee rate: a percent of spend. The fee is carved out inside your gross budget, never added on top:
For example, a 25,000mediabuyatan825,000 media buy at an 8% fee rate carries a 2,000 fee and $23,000 of media.

Provider minimums apply after fees

A provider’s campaign-budget minimum applies to the net media budget it receives, not to the gross buyer budget you set. Your gross budget must therefore leave enough media after the fee is carved out. For TikTok advertisers billed in USD or AUD, Interchange checks the verified campaign floor before calling TikTok: the net campaign budget must exceed 50. For USD accounts, it also checks that each daily-budget ad group exceeds 20 and each lifetime-budget ad group receives at least 20 per scheduled day. A package expanded into several promoted offerings creates one ad group per offering, so each USD allocation must clear that ad-group floor. If a known floor is missed, execution stops without a provider write and reports the submitted net budget and minimum. Other TikTok currency/rule combinations continue to use the provider’s currency-specific validation until their value ranges are verified locally. Increase the gross budget; do not add the fee on top as a separate line item. The fee rate locks when the media buy is created. At that moment the platform resolves your contract’s rate for that buy and fixes it for the buy’s whole life — the same way the FX rate locks on a cross-currency buy. Budget increases and decreases on a live buy re-split at the locked rate; a later change to your contract terms affects new media buys only, never booked ones.

Reading the split: budget_breakdown

Media-buy reads include a read-only budget_breakdown alongside the gross budget:
The fields inside budget_breakdown: budget_denomination is a sibling of budget_breakdown on the media buy, not a field inside it — always "gross", confirming the buy’s budgets are fee-inclusive.
budget_denomination and budget_breakdown are snake_case fields inside the otherwise camelCase campaign-embedded media buy object. That is intentional — they match the media-buy surface these fields come from.
All amounts are in the buy’s (buyer) currency. budget_breakdown is informational — you operate on gross budgets only; the breakdown is never an input. Legacy media buys created before fee terms were locked per buy carry neither budget_denomination nor budget_breakdown.

Effective gross CPM

The breakdown’s effective_gross_cpm is the buy’s all-in price per thousand impressions, computed at the media buy grain — the buy’s gross budget over its impression goal (the sum of its package goals):
It is null when the buy has no positive impression goal or no gross budget. Why it matters: product CPMs are the seller’s own price for media and are never converted, so “gross budget ÷ seller CPM” overstates impressions — only the media_budget portion buys media. The effective gross CPM prices the impressions in the gross denomination you operate on (for a buy priced at a single fixed seller CPM, it works out to seller CPM ÷ (1 − fee rate)). With a 18.50sellerCPMatan818.50 seller CPM at an 8% fee rate, a 25,000 gross budget buys about 1.24M impressions — an effective gross CPM of $20.11. Use it whenever you do “budget ÷ CPM” math on the numbers you operate on.

Delivered spend is gross

Delivered spend on every buyer surface — campaign and media buy reads, pacing, and reporting metrics — is fee-inclusive, stated at the fee terms locked when each media buy was created. A media buy that delivers in full shows delivered spend equal to its gross budget, so budget-vs-delivery comparisons need no conversion. The one exception: legacy media buys created before fee terms were locked per buy report delivered spend net, exactly as the seller reported it (and carry neither budget_denomination nor budget_breakdown).

What sellers see

Sellers receive and report media demand with the buyer’s fee already carved out — the amount that actually buys media. Your fee rate is a term of your contract with Scope3: it is never shared with a seller, and seller-side reporting is unaffected by it.

The budget ceiling

Media buys allocate against the campaign’s gross budget.total directly:
  • allocatedBudget — the sum of active media buy budgets, plus the delivered spend (all-in, at each buy’s locked fee terms) of media buys that have ended or been archived. All gross.
  • unallocatedBudgetbudget.total − allocatedBudget: the room left for new media buys. Read it from the campaign; don’t re-derive it. It can go negative when spend already delivered on ended buys exceeds budget.total.
Lowering budget.total below what live media buys have already allocated is rejected with INSUFFICIENT_MEDIA_BUDGET — the error names the new ceiling and the committed total. To lower both at once, put the campaign budget change and the media buy/package reductions in one update request; the request is validated against the post-update allocation and applied atomically.

Campaign

Budget fields on the campaign object

Media Buy

Where the budget breakdown appears

Cross-currency buying

The FX lock the fee-rate lock mirrors

Reporting overview

Delivered spend and derived metrics