Skip to main content
open_campaign_receipt launches Review & go live for one draft campaign: the plan (total budget, flight dates, number of staged media buys), the budget split across those buys, why each buy is not live yet, and a readiness checklist of what still blocks launch — a creative that is not yet approved by its seller, or no media buys staged at all. It is the moment a buyer reviews before going live. The receipt is the draft drill-in of the Campaigns Page: the same facts V3 get({kind: "campaign"}) returns as a canonical envelope: object with requested mediaBuys and creatives as top-level siblings. The Campaigns widget normalizes that envelope into its legacy CampaignWorkspace drill-in view in mode: "review". The tool binds ui://agentic-api/campaigns/mcp-app.html and seeds it with the campaign. It is buyer-only and read-only: going live remains a separate, explicitly confirmed save_campaign step. Nothing on this Page launches a campaign.

Arguments

From an agent (MCP)

“Is the spring launch ready to go live?” resolves the campaign, then opens its receipt:
The result’s content summarizes the same facts the Page shows, for example:
structuredContent.receipt carries the projection: campaignId, advertiserId, name, handling, budget, flight, mediaBuys[] (id, name, seller, phase, budget, budgetShare, flight, and attentionNote when the seller said why the buy is not live), stagedBudgets[] (the sum of the buy budgets, one entry per currency — budgets are never summed across currencies or converted), blockers[] (code and message), and readyToGoLive, which is true only when no blocker is recorded. The buys are the same CampaignMediaBuySummary rows the Page’s budget-split bar draws, so a host without MCP Apps reads exactly what the Page shows. budgetShare is each buy’s percentage of the staged total in its own currency; it is present only when every buy shares one currency and something is allocated, and is otherwise omitted rather than rendered as a false share or 0%. structuredContent.params seeds the Page with the campaign and mode: "review", which opens the drill-in directly; a later launch without that mode returns the Page to its list. Blockers are derived from the campaign’s own media buys and creatives: CREATIVE_NOT_READY for every creative whose rolled-up seller review is not ready (a creative with no review yet counts as not ready), and NO_MEDIA_BUYS when nothing is staged. See Review vs. record mode.

Headless equivalent

get({kind: "campaign", id, include: ["mediaBuys"]}) returns the canonical V3 envelope { kind: "campaign", object, mediaBuys }; request creatives to receive that relation as another top-level sibling. It does not return a CampaignWorkspace: that is the widget’s normalized legacy drill-in view. Use the V3 envelope when the host does not render MCP Apps or the agent needs the facts in text.

Errors