> ## Documentation Index
> Fetch the complete documentation index at: https://docs.semicola.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage a campaign

> Use when a buyer asks about or wants to change a campaign that already exists: read delivery and pacing, launch with approval, pause or resume, change budget or flight, cancel or archive.

Skill `manage-a-campaign` · version 1.0.0 · for buyers.

## When to use

* A person asks how a campaign is delivering or pacing.
* A person wants to launch a staged campaign, pause it, resume it, or change its budget, flight or
  targeting.
* A person wants to cancel or archive a campaign, or archive a draft media buy.
* A media buy looks stuck and the person wants to know why.

## Before you start

* You are connected to the buyer account that owns the campaign.
* You know the campaign by name or `campaignId`.
* For a launch: the campaign has staged media buys, from [Set up a campaign](/skills/set-up-a-campaign).

## Steps

1. Call `get_status` and confirm the account.
2. Find the campaign with `search` and `kind: "campaign"`, then call `get` with
   `kind: "campaign"`, its id and `include: ["mediaBuys", "creatives"]`. Note the `revision`.
3. To answer a delivery question, call `get_delivery` with `report: "campaign_delivery"`, the
   `metrics` you need, a `range` of at most 90 days (or `lifetime`) and `filters.campaignId`. Call
   `open_reporting` when the person wants the chart.
4. Agree the smallest change that does what the person wants.
5. Call `save_campaign` with `campaignId`, `expectedRevision` and only the fields that change:
   `isPaused` to pause or resume, `budget`, `flight`, `targeting`, `name` or `brief`.
6. To launch a draft:
   * call `open_campaign_receipt` and clear or explain every blocker;
   * call `save_campaign` with `desiredPhase: "active"`; the result is `pending_confirmation` with
     the spend per seller;
   * show that summary, and only after the person says yes, call `save_campaign` again with
     `confirmLaunch: true` and the same `expectedRevision`;
   * read `mediaBuysExecuted` and `errors`. Launching again resubmits only the failed draft buys,
     and only where the error says a retry is safe.
7. To cancel, call `save_campaign` with `desiredPhase: "canceled"` and confirm with the person. To
   archive, send `isArchived: true`. To drop a draft media buy, call `save_media_buy` with its
   `mediaBuyId` and `isArchived: true`.
8. For a stuck media buy, call `get` with `kind: "media_buy"` and explain the stage it is in.
9. Call `get` on the campaign again and confirm the change landed at the new revision.

## Guardrails

* Never send `confirmLaunch: true` without an explicit approval from the person, given after they
  saw the spend summary.
* A missing metric is unavailable, not zero. Say which metrics are missing and why, if known.
* Cancelling cannot be undone. Say so before you ask for confirmation.
* After a `REVISION_CONFLICT`, read the campaign again and check with the person before retrying.
* Change one thing per call where you can, so each change is easy to explain and to reverse.

## Done when

* The change shows in a fresh `get` at the new revision, or the launch result lists every media buy
  executed and every error with its next step; or
* the person's delivery question is answered, with the date range and metrics you used stated.
