If you are not receiving sets yet, nothing is missing — see
Availability.
Why a set is approved as a whole
Each member of a set carries anetAllocationDelta — the amount that media buy
gains or gives up. Those are transfers, not standalone recommendations, and they
sum to exactly zero across the set.
That is why there is no way to approve one media buy’s share on its own.
Approving a +4000 minor units without its offsetting -4000 would create
budget that the campaign never freed; approving the -4000 alone would strand it. And rescaling a
subset so it balances by itself produces an allocation the optimizer never
evaluated against your goals or your sellers’ capacity. So the set is the unit:
you approve all of it, or none of it.
The per-media-buy breakdown is there so you can see what the transfer does —
read a single set to get it.
It is not there so that parts of it can be actioned separately.
The lifecycle of a set
1
Awaiting messages
The optimizer publishes one message per media buy it evaluated, and they
arrive independently. Until all of them have, the set is incomplete and
Apostra will not act on it — applying half a transfer would leave your
campaign’s budget unbalanced. A set can sit here legitimately while the rest of
the run arrives.
2
Awaiting approval
The set is complete and balanced, and it is yours to decide. You are notified
when a set reaches this state.
3
4
Applied
Apostra sends the changes to your sellers and waits for each one to take
effect. This is not instant — see What happens after you
approve.
What happens after you approve
Approving does not move the money. It clears Apostra to move it, and the move takes time, because each media buy lives at a different seller and a seller takes a change when it takes it. Two things about that are worth understanding, because they are what you will see while polling. Budget is freed before it is spent. Every media buy giving budget up is changed first, and Apostra waits until each seller has actually enacted its decrease before sending a single increase. It never commits budget the campaign has not yet freed. That waiting is the reason a set stays inAPPLYING for a while,
and it happens twice — once for the decreases and again for the increases. How
long that takes is up to your sellers: often minutes, longer when one queues the
change for review. Apostra keeps checking rather than assuming, and if a
seller goes quiet it stops and raises the set for a person rather than waiting
indefinitely.
If a change cannot be made, the whole transfer is put back. A set is one
decision, so it is applied as one. If a media buy’s change fails after another
buy’s change has already landed at its seller, Apostra restores every media
buy it had already moved to the budget it held before the set was applied.
The one exception is a reversal that cannot itself complete — a seller refuses
the undo, or never enacts it. Apostra then stops rather than guessing, moves
the set to NEEDS_RECONCILIATION, and a person puts the budgets right. Until
they do, your live budgets can sit part-way between the suggestion and their
pre-approval values; see the statuses below.
A media buy whose flight has ended while the set was applying is left out —
of the transfer, and of the reversal too. A finished buy cannot spend what a
budget change would give it, and failing the set over one would undo the other
buys’ correct changes over a calendar date. The set still completes and names
the media buys it left out, on
statusReason.The exception is a media buy that was giving budget up. If its flight ends
before its seller has enacted the decrease, that budget was never freed — the
buy may already have spent it — so Apostra does not send the increases it
would have funded. The whole transfer is put back instead, and a later run
re-plans the campaign without the finished buy.When a finished buy is left out, your budgets will not match either the
suggestion or their pre-approval values exactly. A buy left out of a reversal
may still be sitting at the applied budget, and because its flight has ended,
nothing further will change it.Statuses you may see
Only
AWAITING_APPROVAL is actionable by you. Everything else is either in
progress or terminal.
NEEDS_RECONCILIATION is the one status where your live budgets may not match
either the suggestion or their pre-approval values. Apostra is alerted
automatically and resolves it; you do not need to open a ticket. Do not
hand-edit the affected media buys’ budgets while a set is in this state —
doing so changes what Apostra is working from to put them right.
The status filter accepts the full enum. Treat an unrecognised status as “not
actionable by me” rather than assuming this list is closed.
Finding sets that need you
List campaign suggestion sets and filter onstatus=AWAITING_APPROVAL to see just the decisions outstanding.
You can also filter by campaignId.
The list gives you each set’s campaignMediaBuyCount but not its per-media-buy
breakdown — a single campaign can span many media buys, and a list is for finding the
set you care about. Fetch that one set to see where the money goes.
campaignMediaBuyCount is the number of media buys the optimizer declared for
the run, not the number reported so far. A set still in AWAITING_MESSAGES can
declare four and return an empty mediaBuys array, because membership is fixed
only once the set is complete.
How a set relates to a suggestion
A campaign suggestion set is made of ordinary optimization suggestions — one per member media buy — and each still appears throughGET /api/v2/buyer/optimization-suggestions as usual. What changes is where the
decision lives: a suggestion that belongs to a set cannot be approved or rejected
on its own, and attempting it returns 409 naming the set to decide instead.