open_campaigns_page launches Campaigns — the buyer’s campaign list with
status, flight, and budget on each row. Opening a row shows that campaign’s
workspace: its media buys, creatives and their per-seller review status, and
for a draft campaign the Review & go live
receipt.
The filter row has Search, Status, Dimensions, and Type. Dimensions is
one multi-select: its values are named by dimension, for example
Market › US or Launch › Q4, and selected values appear as chips in the
control. Campaign rows show their current labels as small read-only chips.
The list is for reading and filtering. To change one campaign’s labels, open
that campaign and use Labels in its detail view. That action is available
only to buyers the server authorizes to manage dimensions. To create a
dimension or apply labels to many objects, ask in chat. Only the first-party
host re-reads the Page when chat returns updated Page state.
Claude and ChatGPT do not re-read the Page after a chat write.
Buyers who can edit a campaign also see Attach creatives in its detail
view. Select creatives from that advertiser’s Library, then save the selection.
Unticking a selected creative detaches it. Draft creatives and uploads without
assets cannot be attached; the picker explains why. Library membership appears
under Attached; creatives placed on media buys appear in their own group.
Tracked campaigns remain read-only.
Read-only buyers, parent accounts, and seller-sponsored buyer views can filter
by existing dimensions. They do not see a label-edit action in the drill-in.
It is a widget launcher: the tool returns the shared MCP App directive for
ui://agentic-api/campaigns/mcp-app.html plus the focus it was given, and the
Page self-fetches through V3 search({kind: "campaign"}),
get({kind: "campaign"}), and, when it needs the seeded header label,
get({kind: "advertiser"}). The host keeps these named reads bound to this
Page. A permitted buyer can edit one campaign’s labels from its drill-in;
dimension creation and bulk labelling stay in chat. A permitted buyer can also
attach Creative Library creatives. Buyers with campaign write access can create
a draft from the Page and edit its details in the drill-in.
Create and edit a campaign
Select New campaign to create an Untitled campaign draft and open it immediately. On an advertiser-scoped Page, the draft uses that advertiser. On an unscoped Page, choose the advertiser in the searchable selector first. Edit the campaign name, budget, and flight directly in the campaign. Budget uses the advertiser’s primary currency and flight dates use the advertiser’s reporting time zone. Tracked campaigns are read-only. In chat, ask for a campaign and the agent creates a draft from what it understands, then opens it. Creating a draft does not add a brief, goals, creatives, inventory, or media buys. Add those on the campaign after it is created.What the list shows
The Page opens on the working set. Archived campaigns are not listed by default — select Archived in the Page’s status filter to bring them back. Archiving is a soft delete (Delete Campaign), so nothing is removed: an archived campaign stays readable by id, stays in reporting, and can be restored. Hiding it only keeps finished work out of the list you plan from. This matches the campaign list API, which also defaults to the live working set and reaches archived campaigns only through an explicit status (see Campaign). The status filter also covers active, draft, paused, completed, and canceled campaigns, plus a Needs attention lens for campaigns carrying an attention signal. A separate filter narrows by who operates the campaign — managed or tracked.Arguments
Resolve names to ids first with
search(kind: "advertiser") or
search(kind: "campaign"); never invent an id.
From an agent (MCP)
“Show my campaigns” opens the unscoped Page:content names what was opened — for example
Opened Campaigns Page focused on "Spring launch" (active, managing); scoped to advertiser "Acme".
— and structuredContent.params carries the seed the Page reads
(advertiserId, advertiserName, campaignId). When the focused campaign is
still a draft, the summary points at open_campaign_receipt.
Text answers
For an answer in words — how many campaigns, which are paused, one campaign’s budget — usesearch(kind: "campaign") and get(kind: "campaign", id)
instead. The launcher never enumerates campaigns.
Hosts without a widget surface
A host that cannot render MCP apps, such as Claude Code or a plain MCP client, still receives the text result. When the Page has an advertiser, that text ends with anOpen in the browser: link that opens the same Campaigns Page in
Apostra chat for the account your API key belongs to, focused on the launched
campaign when there was one. The advertiser is the one the launch names, once
the server confirms you can read it; otherwise the launched campaign’s
advertiser; otherwise, on the v2 Buyer MCP, the advertiser your connection
selected with the x-scope3-seat-id header. On the v2 Buyer MCP the link
opens the account that owns that advertiser when it is your own account or an
account beneath it; an advertiser owned anywhere else (a sibling account, the
parent, or an organization that delegated it to yours) carries no link,
because that Campaigns Page may not open for you. The same URL is
available as openInBrowserUrl in the structured result. A launch with no
advertiser carries no link, because the hosted chat opens the Page for one
advertiser, and a seller account opening its own-supply or sponsored-buyer
campaigns carries no
link either, because the buyer hosted chat does not model those scopes.