Skip to main content
Skill set-up-a-campaign · version 1.0.0 · for buyers.

When to use

  • A person hands you a brief, a budget or a plan and wants it in front of sellers.
  • A person wants to compare what sellers offer before committing to anything.
  • A draft campaign exists but has no proposals or no staged media buys yet.
To change or launch a campaign that is already staged, use Manage a campaign. To work with one named seller, use Buy from a seller.

Before you start

  • The account is ready to buy. If not, run Get an account ready to buy.
  • The advertiser exists, and you know its advertiserId.
  • You have from the person: the full brief, total budget and currency, flight dates, and target countries and channels. If they have a conversion goal, run Set up an event source first.

Steps

  1. Call get_status. Stop and resolve any readiness blocker first.
  2. Call search with kind: "campaign" to check the person does not already have this campaign.
  3. Call save_campaign with advertiserId, name, brief, flight, budget (total, currency, pacing), targeting and an idempotencyKey. Pass the brief exactly as the person wrote it. Answer any needs_input with the person. Keep the returned campaignId and revision.
  4. Call request_proposals with campaignId, expectedCampaignRevision and a new idempotencyKey. It returns at once with an execution id and the status running. Only one execution runs per buyer account.
  5. Collect results by calling request_proposals again with the same idempotencyKey and each resultCursor until the execution completes, or read proposals with get and kind: "proposal". Tell the person which sellers quoted, which returned products and which failed.
  6. Compare the proposals with the person: products, price, flight fit and share of budget.
  7. Where the person wants changes, call refine_proposal with the proposalId, plain instructions, and optionally keepProductIds, dropProductIds or budgetDelta. The seller may decline parts of a refinement; report what it accepted.
  8. Creatives. Call open_page (page: "creative_library") or upload_creative_asset so the person can add assets, or open_page (page: "creative_composer_task") to build one. Then call save_creative with sourceAssets and campaignIds to attach it, and read the format fit it reports per campaign.
  9. Stage. For each proposal the person picked, call save_media_buy with fromProposalId and an idempotencyKey. Staging contacts no seller and books nothing. If the campaign defines channel groups, pass the channelGroupId the products belong to. If its autonomy.inventorySelection is automatic, manual staging is refused (CONFLICT): call auto_select_products with the campaignId instead, which also stages without contacting a seller.
  10. Call open_campaign_receipt with the campaignId to show the plan, staged buys, budget, creative coverage and remaining blockers.

Guardrails

  • Do not launch in this skill. Launching is a separate decision that Manage a campaign handles with the person’s explicit approval.
  • Never fill in a budget, currency, date or audience the person did not give you.
  • If your process stops while a proposal request is running, do not start a new one. Call request_proposals with the same idempotencyKey to pick the execution back up.
  • Keep each decision point visible: draft, proposals, refinements, staging.
  • Rehearse with a sandbox advertiser when the person is testing.

Done when

  • A draft campaign exists with at least one staged media buy.
  • The campaign receipt shows no blockers, or you have told the person each one that remains.
  • The person knows the next step is launch, and that it needs their approval.