> ## Documentation Index
> Fetch the complete documentation index at: https://agenticadvertisingorg-feature-feedback.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Media Buy Quick Reference

> Compact reference for executing AdCP Media Buy Protocol tasks. Use this when interacting with sales agents via call_adcp_agent.

Use the `call_adcp_agent` tool to execute these tasks against any AdCP sales agent.

## Task Overview

| Task                         | Purpose                                   | Response Time |
| ---------------------------- | ----------------------------------------- | ------------- |
| `get_products`               | Discover inventory using natural language | \~60s         |
| `list_authorized_properties` | See publisher properties                  | \~1s          |
| `list_creative_formats`      | View creative specifications              | \~1s          |
| `create_media_buy`           | Create campaigns                          | Minutes-Days  |
| `update_media_buy`           | Modify campaigns                          | Minutes-Days  |
| `sync_creatives`             | Upload creative assets                    | Minutes-Days  |
| `list_creatives`             | Query creative library                    | \~1s          |
| `get_media_buy_delivery`     | Get performance data                      | \~60s         |

## Typical Workflow

1. **Discover products**: `get_products` with a natural language brief
2. **Review formats**: `list_creative_formats` to understand creative requirements
3. **Create campaign**: `create_media_buy` with selected products and budget
4. **Upload creatives**: `sync_creatives` to add creative assets
5. **Monitor delivery**: `get_media_buy_delivery` to track performance

***

## Task Reference

### get\_products

Discover advertising products using natural language briefs.

```json theme={null}
{
  "brief": "Looking for premium video inventory for a tech brand targeting developers",
  "brand_manifest": {
    "url": "https://example.com"
  },
  "filters": {
    "channels": ["video", "ctv"],
    "budget_range": { "min": 5000, "max": 50000 }
  }
}
```

**Key fields:**

* `brief` (string): Natural language description of campaign requirements
* `brand_manifest` (object): Brand context - can be `{ "url": "https://..." }` or inline manifest
* `filters` (object, optional): Filter by channels, budget, delivery\_type, format\_types

**Response contains:**

* `products`: Array of matching products with `product_id`, `name`, `description`, `pricing_options`
* Each product includes `format_ids` (supported creative formats) and `targeting` (available targeting)

***

### list\_authorized\_properties

Get the list of publisher properties this agent can sell.

```json theme={null}
{}
```

No parameters required.

**Response contains:**

* `publisher_domains`: Array of domain strings the agent is authorized to sell

***

### list\_creative\_formats

View supported creative specifications.

```json theme={null}
{
  "format_types": ["video", "display"]
}
```

**Key fields:**

* `format_types` (array, optional): Filter to specific format categories

**Response contains:**

* `formats`: Array of format specifications with dimensions, requirements, and asset schemas

***

### create\_media\_buy

Create an advertising campaign from selected products.

```json theme={null}
{
  "buyer_ref": "campaign-2026-q1-001",
  "brand_manifest": {
    "url": "https://acme.com",
    "name": "Acme Corporation"
  },
  "packages": [
    {
      "buyer_ref": "pkg-video-001",
      "product_id": "premium_video_30s",
      "pricing_option_id": "cpm-standard",
      "budget": 10000
    }
  ],
  "start_time": {
    "type": "asap"
  },
  "end_time": "2026-03-31T23:59:59Z"
}
```

**Key fields:**

* `buyer_ref` (string, required): Your unique identifier for this campaign
* `brand_manifest` (object, required): Brand identity - URL or inline manifest
* `packages` (array, required): Products to purchase, each with:
  * `buyer_ref`: Your identifier for this package
  * `product_id`: From `get_products` response
  * `pricing_option_id`: From product's `pricing_options`
  * `budget`: Amount in dollars
  * `bid_price`: Required for auction pricing
  * `targeting_overlay`: Additional targeting constraints
  * `creative_ids` or `creatives`: Creative assignments
* `start_time` (object, required): `{ "type": "asap" }` or `{ "type": "scheduled", "datetime": "..." }`
* `end_time` (string, required): ISO 8601 datetime

**Response contains:**

* `media_buy_id`: The created campaign identifier
* `status`: Current state (often `pending` for async approval)
* `packages`: Created packages with their IDs

***

### update\_media\_buy

Modify an existing campaign.

```json theme={null}
{
  "media_buy_id": "mb_abc123",
  "updates": {
    "budget_change": 5000,
    "end_time": "2026-04-30T23:59:59Z",
    "status": "paused"
  }
}
```

**Key fields:**

* `media_buy_id` (string, required): The campaign to update
* `updates` (object): Changes to apply - budget\_change, end\_time, status, targeting, etc.

***

### sync\_creatives

Upload and manage creative assets.

```json theme={null}
{
  "creatives": [
    {
      "creative_id": "hero_video_30s",
      "name": "Brand Hero Video",
      "format_id": {
        "agent_url": "https://creative.adcontextprotocol.org",
        "id": "video_standard_30s"
      },
      "assets": {
        "video": {
          "url": "https://cdn.example.com/hero.mp4",
          "width": 1920,
          "height": 1080,
          "duration_ms": 30000
        }
      }
    }
  ],
  "assignments": {
    "hero_video_30s": ["pkg_001", "pkg_002"]
  }
}
```

**Key fields:**

* `creatives` (array, required): Creative assets to sync
  * `creative_id`: Your unique identifier
  * `format_id`: Object with `agent_url` and `id` from format specifications
  * `assets`: Asset content (video, image, html, etc.)
* `assignments` (object, optional): Map creative\_id to package IDs
* `dry_run` (boolean): Preview changes without applying
* `delete_missing` (boolean): Archive creatives not in this sync

***

### list\_creatives

Query the creative library with filtering.

```json theme={null}
{
  "filters": {
    "status": ["active"],
    "format_types": ["video"]
  },
  "limit": 20
}
```

***

### get\_media\_buy\_delivery

Retrieve performance metrics for a campaign.

```json theme={null}
{
  "media_buy_id": "mb_abc123",
  "granularity": "daily",
  "date_range": {
    "start": "2026-01-01",
    "end": "2026-01-31"
  }
}
```

**Response contains:**

* `delivery`: Aggregated metrics (impressions, spend, clicks, etc.)
* `by_package`: Breakdown by package
* `timeseries`: Data points over time if granularity specified

***

## Key Concepts

### Brand Manifest

Brand context can be provided in two ways:

**URL reference** (recommended):

```json theme={null}
{
  "brand_manifest": {
    "url": "https://brand.com"
  }
}
```

**Inline manifest**:

```json theme={null}
{
  "brand_manifest": {
    "name": "Brand Name",
    "url": "https://brand.com",
    "tagline": "Brand tagline",
    "colors": { "primary": "#FF0000" }
  }
}
```

### Format IDs

Creative format identifiers are structured objects:

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250"
  }
}
```

The `agent_url` specifies which creative agent defines the format. Use `https://creative.adcontextprotocol.org` for standard IAB formats.

### Pricing Options

Products include `pricing_options` array. Each option has:

* `pricing_option_id`: Use this in `create_media_buy`
* `pricing_model`: "cpm", "cpm-auction", "flat-fee", etc.
* `price`: Base price (for fixed pricing)
* `floor`: Minimum bid (for auction)

For auction pricing, include `bid_price` in your package.

### Asynchronous Operations

Operations like `create_media_buy` and `sync_creatives` may require human approval. The response includes:

* `status: "pending"` - Operation awaiting approval
* `task_id` - For tracking async progress

Poll or use webhooks to check completion status.

***

## Error Handling

Common error patterns:

* **400 Bad Request**: Invalid parameters - check required fields
* **401 Unauthorized**: Invalid or missing authentication token
* **404 Not Found**: Invalid product\_id, media\_buy\_id, or creative\_id
* **422 Validation Error**: Schema validation failure - check field types

Error responses include:

```json theme={null}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "budget must be greater than 0",
    "field": "packages[0].budget"
  }
}
```
