Skip to main content
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:
“How is the spring launch doing?” resolves the campaign, then focuses it:
The result’s 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 — use search(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 an Open 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.

Errors