channel: "mobile_web": mobile_web isn’t an AdCP media channel.
Within one dimension, values are alternatives (OR). Across dimensions, they combine (AND). A group with
channels: ["ctv", "olv"] and deviceTypes: ["ctv", "mobile"] allows either channel and either device.
For pairwise logic such as “CTV on TV devices, or online video on mobile”, make two groups.
Groups split media buys
One AdCP media buy can’t carry arbitrary combinations of channel, property type, device and format, so Semicola compiles a campaign by this rule:mobile-web-display and ctv groups, products in each become separate draft buys
even with the same seller. They stay in one campaign.
Save preset groups
PasschannelGroups to save_campaign. A preset is shorthand: Semicola expands it and saves the full
definition with its preset version, so a later preset change never alters an existing campaign.
The simple presets make no property, device or format assumption:
ctv means the AdCP CTV channel, not
only a TV set or only a CTV app. A preset group’s name defaults to the preset’s name (“Mobile web
display”, “CTV”…); pass name to change it.
Define your own group
channels is required and takes AdCP channel values only; put an alias such as “mobile web” in the
group’s name, not in channels. A channelGroupId is 1–64 letters, digits, dots, dashes or
underscores, unique within the campaign.
Over REST (POST or PUT /api/v2/buyer/campaigns), send the saved shape; there’s no preset shorthand:
source is { "kind": "custom" }. The media-buy batch’s campaign.create takes the
same saved shape.
Assign products to a group
When a campaign defines groups, every staging call names one:save_media_buy(products or a proposal):channelGroupIdapplies to everything staged in that call.POST /api/v2/buyer/media-buys/batch:channelGroupIdon each selection.
channelGroupId is refused with the campaign’s group ids, and a campaign without
groups refuses one. Each draft buy records the channelGroupId and channelGroupName that created it.
Auto-select assigns each product to the first group
whose channels it carries.
Groups are immutable once used:
- A group a staged buy references can’t be removed or redefined (
409 CONFLICT: “Add a new group instead.”). Add a new group. - Define groups before the campaign’s first buy is staged: adding groups to a campaign that already has
an ungrouped buy is refused (
409 CONFLICT).
Report by group
Useget_delivery with the channel_group dimension:
filters.channelGroupId to read one group. Buys staged without a group roll up under a null
channel group; they’re never guessed from names or products.
Channel groups answer “which inventory selection did the buyer ask for?” Campaign
targeting answers “who, where or when should it reach?” Keep them separate even when
both mention a dimension such as device.