Targeting intent on save_campaign
Passtargeting to save_campaign with one or more of geo, language, device, dayparts and
demographics. Each dimension is a list of requirements:
The intent comes back as
targeting on the campaign workspace. A save_campaign update that passes
targeting replaces the whole stored intent: each call is the full desired state, not a patch.
Targeting intent is stored and returned but isn’t enforced at delivery. What sellers receive is
the package targeting overlay below.
Campaign constraints
save_campaign also accepts the simpler constraint form:
countries and geoMetros flow into every package’s overlay
when a media buy is sent: include lists intersect with the package’s own, exclude lists add together.
If the two include lists contradict each other, the campaign’s list wins rather than widening to
“anywhere”. ageRange and audience go into the brief text sellers read during discovery; channels
becomes a channel filter on product discovery.
Package targeting overlays
Change a package’s targeting on a draft or live buy withupdate_media_buy
(PATCH /api/v2/buyer/media-buys/{id}):
geo_countries, geo_regions, geo_metros, audience_include,
device_type, language and the _exclude variants. Every other AdCP overlay field passes through
and is validated against the AdCP schema on save.
- Per-key merge. Keys you name replace the package’s current values; an empty list clears that key.
Keys you omit stay as they are. Omitting
targetingOverlayleaves targeting alone. - Seller support is checked first. If the seller declared which targeting it supports and your
overlay uses a dimension outside that list, the update is refused with
CAPABILITY_NOT_SUPPORTEDbefore anything is sent: “Sales agent does not support the requested targeting: … Remove these targeting fields or use a sales agent that declares support.” Product discovery returns each product’s declared list assupported_targeting. - Some sellers must approve. The result may carry an update proposal.
Nielsen DMAs
DMA targeting usesgeo_metros with system: "nielsen_dma" and three-digit codes such as "803".
The dictionary tools are there for when names arrive; today they return an empty list with a note:
nielsen_dma is the only system. When names are available, a name that could mean more than one DMA
is refused with the matching codes to choose from.
Age ranges in briefs
Write one exact, closed age range in the brief (“adults ages 25–54”). Semicola’s hosted storefronts copy the numbers from the brief. If none of the proposed products can deliver that exact range, the proposal carries alimitations entry for targeting.age with the closest supported range, and says
the age targeting was not applied. It never widens or approximates the range silently.
Per-platform exact-age rules for the ad platforms (Meta, Google Ads, TikTok and others) aren’t
available: those sellers are sandbox storefronts with no live connection yet.