DRAFT. The draft is your cart: you add proposals and products to it and
stage media buys against it without contacting any seller. Launching turns the staged buys into real
AdCP transactions, one per seller.
Key fields
string
required
Stable id with the
cmp_ prefix.integer
required
The advertiser that owns the campaign. The budget currency must match the advertiser’s primary
currency.
string
required
Display name, 1 to 200 characters.
string
The plain-language description sellers read: goals, audience, channels, must-haves and
constraints. Up to 20,000 characters. The better the brief, the better the proposals.
enum
managed when Semicola places and runs the buys; tracked when the campaign mirrors buys placed
elsewhere.object
startAt and endAt, both ISO 8601 date-times with an offset.object
total (decimal), currency (ISO 4217), pacing (EVEN, ASAP or FRONTLOADED) and an
optional dailyCap.decimal string
How much of the total is committed to staged or live media buys, and how much is left. Allocated
budget can never exceed the total.
object
Structured intent sent with the brief:
countries, channels, ageRange (min 13 or more,
max 99 or less), audience (free text) and geoMetros. Sellers that cannot honor part of it
say so in their proposal.object
How much the agent may do without asking:
inventorySelection and rebriefing, each manual,
propose or automatic. Defaults come from the advertiser.object
Format coverage for launch:
required, covered and missing.array
The campaign’s media buys, one per seller (and settlement currency). See media buys and
packages.
integer
required
Increments on every change. Writes that modify a campaign send
expectedRevision; a stale value
fails with REVISION_CONFLICT so two agents never overwrite each other.Lifecycle
PAUSED.
Launch preconditions
A draft can launch when all of these hold:- the advertiser is active and the budget currency matches its primary currency;
- at least one media buy is staged;
- allocated budget does not exceed the total;
- the required creative formats are covered, or you accept that some buys will wait for creatives;
- the account is allowed to buy live (otherwise only sandbox launches are possible).
open_campaign_receipt) shows each of these as a checklist with any
blockers.
Common operations
Create a draft
needs_input and a
question instead of guessing. Ask the person, then call again.
Collect proposals and stage buys
request_proposalswithcampaignIdandexpectedCampaignRevisionsends the brief to every eligible seller and returns an execution id straight away. Only one execution runs per buyer at a time.- Poll with
get(kind: "proposal") or watch the Proposals widget as sellers answer. refine_proposalasks one seller for a revised version.save_media_buywithfromProposalIdstages the proposal’s products as a draft media buy.
Launch
Launching is deliberately two calls so a person can see the spend before it happens.1
Ask to go live
Call
save_campaign with campaignId, expectedRevision and desiredPhase: "active". The
result is pending_confirmation, with a summary of spend per seller and an expiry.2
Get the person's approval
Show the summary. In the Semicola app and in MCP Apps hosts, a confirmation card does this for
you.
3
Confirm
Call
save_campaign again with confirmLaunch: true and the same expectedRevision. Semicola
dispatches one AdCP create_media_buy per seller, each with its own idempotency key.mediaBuysExecuted and a list of errors, one per failed buy, with a
recovery of transient, correctable or terminal and a retrySafe flag. Launching again
resubmits only the failed draft buys.
Pause, reactivate, cancel, archive
SendisPaused, desiredPhase: "canceled" or isArchived to save_campaign with
expectedRevision. Over REST, use POST /api/v2/buyer/campaigns/{id}/pause and
/reactivate.
Media buys and packages
A media buy is one AdCP transaction with one seller in one settlement currency. Its id starts withmb_. A package (pkg_) is one product inside a media buy, with its own budget, pacing
(even, asap or front_loaded), optional bid price, flight and creatives.
The campaign’s operational status is the most restrictive status across its buys: one of
no_media_buys, draft, pending_creatives, pending_start, active, paused, completed or
attention_required. Read it from GET /api/v2/buyer/campaigns/{id}/media-buy-status or the campaign
workspace.
Related
Buying overview
The whole loop from brief to delivery.
v3 Tool Catalog
Exact inputs for
save_campaign, request_proposals and save_media_buy.Errors
Revision conflicts,
needs_input and partial launches.Glossary
Every term on this page, defined.