Skip to main content

No fee inside your budget

Semicola takes 0% of media. It charges for intelligent work in Intelligence Units, billed separately (see Billing). So the budget you set is the budget that buys media: there’s no fee carved out of it and no gross/net split to read. Delivered spend on every buyer surface is the spend the seller reported.

The budget ceiling

Media buys allocate against the campaign’s budget.total. Campaign reads carry both numbers, so read them rather than re-deriving them:
  • allocatedBudget: the sum of the budgets of every media buy that still counts toward the plan: DRAFT, PENDING_APPROVAL, INPUT_REQUIRED, ACTIVE, PAUSED and COMPLETED. A draft buy holds budget exactly as a live one does.
  • unallocatedBudget: budget.total − allocatedBudget, the room left for a new buy or an increase. It can go negative; an over-allocated campaign is a launch blocker (see Campaign readiness).
When you raise an existing buy, its current budget is already inside allocatedBudget. The most it can go to is its current budget plus unallocatedBudget; adding the current budget again counts it twice. Staging a proposal with no room left fails with 409 INSUFFICIENT_MEDIA_BUDGET (“No unallocated budget left on … Raise the budget or remove a staged buy.”). When a seller already has a draft buy on the campaign, its budget counts as available to that seller’s next proposal.

How a budget splits across products

A staged buy splits its budget across the proposal’s products by their allocation percentages. Shares are exact to the cent: any leftover cents go to the products with the largest remainders, so the packages always add up to the buy. With pacing periods, each product’s share splits again by period.

Currency

A campaign has one currency, set when it’s created. An update that sends a different budget.currency fails with CURRENCY_MISMATCH (“This campaign buys in USD.”). Every product in a staged buy must be priced in the campaign currency.
  • A product priced in another currency is skipped when you stage the proposal, with the reason “Priced in EUR; the campaign settles in USD.” The result lists skipped products in productsSkipped.
  • If no product in the proposal is priced in the campaign currency, staging fails (“None of this proposal’s products can be staged.”).
On the seller side, a storefront confirms the currency it quotes and settles in (Confirm your currency, currency_confirmed, a go-live blocker) and may list additional settlement currencies (paymentCurrencies). Payout currency (settlement_currency_match) checks that the default currency is one of them. Nothing assumes USD: a storefront with no confirmed currency can’t go live.

Not available yet

  • Cross-currency buying. There’s no FX conversion: a buyer can’t buy a product priced in a currency other than the campaign’s, and there are no FX rates to lock.
  • Per-source execution currency for ad-server sources.
  • Fee terms and budget_breakdown (media_budget, fee_amount, effective_gross_cpm). With no media fee there’s nothing to break down.
  • Lowering budget.total below what’s already allocated isn’t refused; the campaign shows as over-allocated (OVER_ALLOCATED, “Staged buys exceed the budget by …”) and can’t launch until you rebalance.