> ## 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.

# Complete campaign example

> A fictional campaign traced through discovery, policy, booking, creative, changes and reporting, with an honest verdict on what each stage proves today.

**A rehearsal, not a recipe.** This is a fictional, sanitized campaign for walking through every
stage a seller cares about. It is not an import format, and it doesn't claim every stage is
automated. It contains no customer data. It uses the files from the
[Publisher example pack](/sell/publisher-example-pack).

## Campaign setup

| Field | Fictional value | Where it comes from |
| - | - | - |
| Advertiser | Sample Outdoor Co. (sandbox advertiser) | The buyer's `save_advertiser`, with `sandbox: true` |
| Campaign | Winter Live Sports Launch | The buyer's `save_campaign` |
| Flight | 2030-01-15 to 2030-03-15 | The campaign |
| Budget | USD 100,000 | The approved campaign budget |
| Seller | Sample Publisher Network | A demo or test storefront |
| Product | Live Sports CTV | The storefront's wholesale product |
| Targeting | US; connected TV; sports fans | The brief and the product |
| Quantity | 500,000 impressions | The proposal |
| Price | USD 58 CPM | The playbook's default price, never below the \$45 floor |
| Creative | 30-second 16:9 VAST video | The buyer's `save_creative` (`urlAsset` with `urlType: "vast"`) |
| Approval | Human review of the buy and the creative | AI Business Rules with both gates on `manual` |

## Walkthrough and verdict

| Stage | What to do and what you should see | Today |
| - | - | - |
| Discovery | The buyer requests proposals on the campaign (`request_proposals`). The storefront answers with Live Sports CTV in the approved price range. | Available. A seller can rehearse the same brief as a practice RFP (`save_rfp`). |
| Policy | An ordinary outdoor advertiser is accepted; political or regulated briefs go to human review; explicit adult content is declined. | Available, through AI Business Rules. |
| Reservation | Hold 500,000 impressions against available capacity. | Not available. A [modular source](/sell/modular-sources) tracks committed avails, but Semicola doesn't hold capacity against them yet. |
| Booking | The buyer stages the buy (`save_media_buy`) and launches with approval. It waits in the seller's **New media buys** approval gate; the seller approves (`decide_media_buy_approval`) and it is sent to the inventory source. | Available for sales-agent and demo sources. Sending a buy to an ad server (GAM, FreeWheel, SpringServe) isn't available. |
| Creative | The buyer attaches the VAST creative; the seller reviews it (`decide_creative_review`), approving it or rejecting it with a reason. | Available. |
| Trafficking | The ad server creates the order and line item and returns their ids. | Not available for ad servers. A sales-agent source does its own trafficking and reports status back. |
| Update | Reduce the quantity or change the flight, keeping the same campaign and media buy. | Available through the buyer's campaign and media buy changes; the seller sees each change. |
| Cancellation | The buyer cancels; the seller sees the cancelled buy. | Available. |
| Reporting | Read delivery for the media buy (`get_delivery`). | Available. For a sandbox advertiser, delivery is simulated. |
| Reconciliation | Compare booked, delivered and spend, with corrections and a final figure after the flight. | Not available yet. |

The rehearsal proves discovery, policy, the approval path, creative review, changes and the reporting
read-back, end to end in the sandbox. It doesn't prove capacity holds, ad-server trafficking,
reconciliation, or a paid launch. Record those as gaps, not passes.

To run the seller's half in one step, `save_test_run` answers a practice brief, books a sandbox media
buy and reads delivery back. See [Sandbox](/concepts/sandbox) and
[Media buy lifecycle](/concepts/media-buy-lifecycle).
