status (DRAFT, ACTIVE, PAUSED, …) says where it is in its lifecycle. It doesn’t
say whether it can launch, or whether a launched campaign is actually delivering. Semicola answers those
two questions separately.
Launch blockers
Review & go live lists every blocker with a plain-language label and, where there is one, a fix Semi can do for you.canGoLive is true only for a draft with no blockers. The campaign workspace
carries the same answer as actions.canGoLive.
Launching with any blocker present is refused with
CONFLICT (“Not ready to go live: …”), and the
blockers come back in the error’s details. A launch can also stop if a selected product is on one of
the advertiser’s exclusion property lists.
Creatives aren’t a launch blocker
Missing creative isn’t in the blocker list. The receipt reports format coverage (required,
covered, missing) so you can see which buys still need creative, but a campaign can launch without
it: sellers accept the buy and it waits in pending_creatives until a creative arrives. Don’t tell a
buyer creative is required before launch unless a tool response says so.
Is it delivering?
GET /api/v2/buyer/campaigns/{id}/media-buy-status returns the campaign’s operationalStatus, the
most restrictive across its buys:
Each buy also lists
blockers: creatives_required, awaiting_seller_approval, or the failure’s
errorCode (dispatch_failed when there’s none), plus pendingReason and pendingSince. The
response also says how many sellers were queried, whether any seller-side buy exists, whether any
delivery has been reported, and how many creative reviews are pending with sellers.
Agent guidance
- Before saying a campaign is delivering, check
operationalStatus.status: ACTIVEalone isn’t enough. - When a draft can’t launch, surface every blocker as a concrete next step, never just “it isn’t ready”.
- Several blockers can be present at once. Address them all.