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

# Display Ads

> Display ad formats in AdCP specify static banners, HTML5 creatives, third-party tags, and responsive IAB standard sizes for programmatic ads.

This guide covers how AdCP represents display advertising formats, from static image banners to third-party tags and HTML5 creatives.

## Display Format Characteristics

Display formats in AdCP include:

* **Hosted Images** - Static image files (JPG, PNG, WebP, GIF)
* **HTML5 Creatives** - Multi-asset interactive banners
* **Third-Party Tags** - JavaScript or HTML tags served by external ad servers
* **Responsive Formats** - Adapt to multiple sizes
* **Rich Media** - Expandable and interactive formats

## Standard IAB Display Formats

### Medium Rectangle (300x250)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250"
  },
  "type": "display",
  "renders": [
    {
      "role": "primary",
      "dimensions": {
        "width": 300,
        "height": 250,
        "responsive": { "width": false, "height": false }
      }
    }
  ],
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "banner_image",
      "asset_type": "image",
      "asset_role": "hero_image",
      "required": true,
      "requirements": {
        "min_width": 300,
        "max_width": 300,
        "min_height": 250,
        "max_height": 250,
        "formats": ["jpg", "png", "webp", "gif"],
        "max_file_size_kb": 200,
        "animation_allowed": true,
        "max_animation_duration_ms": 15000
      }
    }
  ]
}
```

### Leaderboard (728x90)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_728x90"
  },
  "type": "display",
  "assets": [
    {
      "asset_id": "banner_image",
      "asset_type": "image",
      "asset_role": "hero_image",
      "required": true,
      "requirements": {
        "width": 728,
        "height": 90,
        "file_types": ["jpg", "png", "webp"],
        "max_file_size_kb": 150
      }
    }
  ]
}
```

### Wide Skyscraper (160x600)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_160x600"
  },
  "type": "display",
  "assets": [
    {
      "asset_id": "banner_image",
      "asset_type": "image",
      "asset_role": "hero_image",
      "required": true,
      "requirements": {
        "width": 160,
        "height": 600,
        "file_types": ["jpg", "png", "webp"],
        "max_file_size_kb": 150
      }
    }
  ]
}
```

### Billboard (970x250)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_970x250"
  },
  "type": "display",
  "assets": [
    {
      "asset_id": "banner_image",
      "asset_type": "image",
      "asset_role": "hero_image",
      "required": true,
      "requirements": {
        "width": 970,
        "height": 250,
        "file_types": ["jpg", "png", "webp"],
        "max_file_size_kb": 300
      }
    }
  ]
}
```

### Mobile Banner (320x50)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "mobile_banner_320x50"
  },
  "type": "display",
  "assets": [
    {
      "asset_id": "banner_image",
      "asset_type": "image",
      "asset_role": "hero_image",
      "required": true,
      "requirements": {
        "width": 320,
        "height": 50,
        "file_types": ["jpg", "png", "webp"],
        "max_file_size_kb": 150
      }
    }
  ]
}
```

### Mobile Interstitial (320x480)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "mobile_interstitial_320x480"
  },
  "type": "display",
  "assets": [
    {
      "asset_id": "banner_image",
      "asset_type": "image",
      "asset_role": "hero_image",
      "required": true,
      "requirements": {
        "width": 320,
        "height": 480,
        "file_types": ["jpg", "png", "webp"],
        "max_file_size_kb": 300
      }
    }
  ]
}
```

## Creative Manifests

### Simple Image Banner Manifest

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250"
  },
  "assets": {
    "banner_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/banner_300x250.jpg",
      "width": 300,
      "height": 250
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/spring?campaign={MEDIA_BUY_ID}"
    },
    "impression_tracker": {
      "asset_type": "url",
      "url_type": "tracker_pixel",
      "url": "https://track.brand.com/imp?buy={MEDIA_BUY_ID}&cb={CACHEBUSTER}"
    }
  }
}
```

### Animated GIF Manifest

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250"
  },
  "assets": {
    "banner_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/animated_300x250.gif",
      "width": 300,
      "height": 250,
      "animated": true,
      "animation_duration_ms": 15000
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/spring"
    }
  }
}
```

## HTML Display Formats with Execution Context

HTML display creatives run as executable code, not static media. Different publisher environments have different execution constraints - some allow full DOM access, others run in SafeFrame containers with restricted JavaScript capabilities.

AdCP defines explicit **HTML asset requirements** that specify the execution environment the HTML must be compatible with:

* **`sandbox`**: Execution environment (`none`, `iframe`, `safeframe`, `fencedframe`)
* **`external_resources_allowed`**: Whether the creative can load external scripts, images, or fonts
* **`allowed_external_domains`**: Permitted domains for external resources (when allowed)
* **`max_file_size_kb`**: Maximum file size for the HTML asset

### SafeFrame-Compatible HTML Banner

SafeFrame is an IAB standard that provides secure isolation between ad creatives and publisher pages. SafeFrame-compatible creatives cannot use `document.write()`, must use SafeFrame expansion APIs, and cannot make arbitrary cross-origin requests.

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_html_safeframe"
  },
  "name": "SafeFrame HTML Banner 300x250",
  "type": "display",
  "renders": [
    {
      "role": "primary",
      "dimensions": {
        "width": 300,
        "height": 250,
        "responsive": { "width": false, "height": false }
      }
    }
  ],
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "banner_html",
      "asset_type": "html",
      "asset_role": "creative",
      "required": true,
      "requirements": {
        "max_file_size_kb": 150,
        "sandbox": "safeframe",
        "external_resources_allowed": false
      }
    },
    {
      "item_type": "individual",
      "asset_id": "landing_url",
      "asset_type": "url",
      "asset_role": "clickthrough",
      "required": true,
      "requirements": {
        "protocols": ["https"]
      }
    }
  ]
}
```

### Native DOM HTML Banner

Some publishers allow full DOM access for trusted creatives. These formats can use standard JavaScript APIs and load external resources.

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_html_native"
  },
  "name": "Native HTML Banner 300x250",
  "type": "display",
  "renders": [
    {
      "role": "primary",
      "dimensions": {
        "width": 300,
        "height": 250,
        "responsive": { "width": false, "height": false }
      }
    }
  ],
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "banner_html",
      "asset_type": "html",
      "asset_role": "creative",
      "required": true,
      "requirements": {
        "max_file_size_kb": 200,
        "sandbox": "none",
        "external_resources_allowed": true,
        "allowed_external_domains": ["cdn.brand.com", "fonts.googleapis.com"]
      }
    },
    {
      "item_type": "individual",
      "asset_id": "landing_url",
      "asset_type": "url",
      "asset_role": "clickthrough",
      "required": true,
      "requirements": {
        "protocols": ["https"]
      }
    }
  ]
}
```

### Fenced Frame HTML Banner (Privacy Sandbox)

Chrome's Privacy Sandbox introduces Fenced Frames for privacy-preserving ad rendering. These have the most restrictive execution environment.

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_html_fencedframe"
  },
  "name": "Fenced Frame HTML Banner 300x250",
  "type": "display",
  "renders": [
    {
      "role": "primary",
      "dimensions": {
        "width": 300,
        "height": 250,
        "responsive": { "width": false, "height": false }
      }
    }
  ],
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "banner_html",
      "asset_type": "html",
      "asset_role": "creative",
      "required": true,
      "requirements": {
        "max_file_size_kb": 100,
        "sandbox": "fencedframe",
        "external_resources_allowed": false
      }
    }
  ]
}
```

## Third-Party Tag Formats

### JavaScript Tag Format

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_3p"
  },
  "type": "display",
  "renders": [
    {
      "role": "primary",
      "dimensions": {
        "width": 300,
        "height": 250,
        "responsive": { "width": false, "height": false }
      }
    }
  ],
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "tag",
      "asset_type": "javascript",
      "asset_role": "third_party_tag",
      "required": true,
      "requirements": {
        "max_file_size_kb": 200,
        "external_resources_allowed": true,
        "strict_mode_required": false
      }
    }
  ]
}
```

JavaScript tag manifest:

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_3p"
  },
  "assets": {
    "tag": {
      "asset_type": "javascript",
      "content": "<script src=\"https://ad-server.brand.com/serve?campaign={MEDIA_BUY_ID}&size=300x250&cb={CACHEBUSTER}\"></script>"
    }
  }
}
```

### HTML Tag Format

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_728x90_html"
  },
  "type": "display",
  "renders": [
    {
      "role": "primary",
      "dimensions": {
        "width": 728,
        "height": 90,
        "responsive": { "width": false, "height": false }
      }
    }
  ],
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "tag",
      "asset_type": "html",
      "asset_role": "third_party_tag",
      "required": true,
      "requirements": {
        "max_file_size_kb": 200,
        "sandbox": "iframe",
        "external_resources_allowed": true
      }
    }
  ]
}
```

HTML tag manifest:

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_728x90_html"
  },
  "assets": {
    "tag": {
      "asset_type": "html",
      "content": "<iframe src=\"https://ad-server.brand.com/render?campaign={MEDIA_BUY_ID}&size=728x90&cb={CACHEBUSTER}\" width=\"728\" height=\"90\" frameborder=\"0\" scrolling=\"no\"></iframe>"
    }
  }
}
```

## HTML5 Multi-Asset Formats

HTML5 formats specify multiple assets that the publisher's ad server assembles into an interactive creative.

### HTML5 Banner Format

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_html5"
  },
  "type": "display",
  "assets": [
    {
      "asset_id": "background_image",
      "asset_type": "image",
      "asset_role": "background",
      "required": true,
      "requirements": {
        "width": 300,
        "height": 250,
        "file_types": ["jpg", "png"]
      }
    },
    {
      "asset_id": "logo",
      "asset_type": "image",
      "asset_role": "logo",
      "required": true,
      "requirements": {
        "max_width": 100,
        "max_height": 50,
        "file_types": ["png", "svg"]
      }
    },
    {
      "asset_id": "headline",
      "asset_type": "text",
      "asset_role": "headline",
      "required": true,
      "requirements": {
        "max_length": 25
      }
    },
    {
      "asset_id": "cta_text",
      "asset_type": "text",
      "asset_role": "call_to_action",
      "required": true,
      "requirements": {
        "max_length": 15
      }
    }
  ]
}
```

HTML5 manifest:

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_html5"
  },
  "assets": {
    "background_image": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/bg.jpg",
      "width": 300,
      "height": 250
    },
    "logo": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/logo.png",
      "width": 80,
      "height": 40
    },
    "headline": {
      "asset_type": "text",
      "content": "Spring Sale - 50% Off"
    },
    "cta_text": {
      "asset_type": "text",
      "content": "Shop Now"
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/spring"
    }
  }
}
```

## Responsive Display Formats

Responsive formats adapt to multiple sizes based on placement context.

### Responsive Banner Format

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_responsive"
  },
  "type": "display",
  "responsive": true,
  "supported_sizes": ["300x250", "728x90", "320x50"],
  "assets": [
    {
      "asset_id": "background_image",
      "asset_type": "image",
      "asset_role": "background",
      "required": true,
      "requirements": {
        "min_width": 728,
        "min_height": 250,
        "responsive": true,
        "file_types": ["jpg", "png", "webp"]
      }
    },
    {
      "asset_id": "logo",
      "asset_type": "image",
      "asset_role": "logo",
      "required": true
    },
    {
      "asset_id": "headline",
      "asset_type": "text",
      "asset_role": "headline",
      "required": true,
      "requirements": {
        "max_length": 30
      }
    }
  ]
}
```

## Rich Media Formats

### Expandable Banner Format

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_970x250_expandable"
  },
  "type": "display",
  "expandable": true,
  "collapsed_size": "970x250",
  "expanded_size": "970x600",
  "assets": [
    {
      "asset_id": "collapsed_creative",
      "asset_type": "html",
      "asset_role": "collapsed_state",
      "required": true,
      "requirements": {
        "width": 970,
        "height": 250,
        "max_file_size_kb": 200
      }
    },
    {
      "asset_id": "expanded_creative",
      "asset_type": "html",
      "asset_role": "expanded_state",
      "required": true,
      "requirements": {
        "width": 970,
        "height": 600,
        "max_file_size_kb": 500
      }
    }
  ]
}
```

## Display-Specific Macros

In addition to [universal macros](/docs/creative/universal-macros), display formats support:

### Placement Context

* `{PLACEMENT_ID}` - IAB Global Placement ID
* `{FOLD_POSITION}` - above\_fold, below\_fold
* `{AD_WIDTH}` / `{AD_HEIGHT}` - Ad slot dimensions in pixels

### Web Context

* `{DOMAIN}` - Publisher domain (e.g., "nytimes.com")
* `{PAGE_URL}` - Full page URL (URL-encoded)
* `{REFERRER}` - HTTP referrer URL
* `{KEYWORDS}` - Page keywords (comma-separated)

### Device Context

* `{DEVICE_TYPE}` - mobile, tablet, desktop
* `{OS}` - iOS, Android, Windows, macOS
* `{USER_AGENT}` - Full user agent string

**Example with display macros:**

```
https://track.brand.com/imp?
  buy={MEDIA_BUY_ID}&
  placement={PLACEMENT_ID}&
  domain={DOMAIN}&
  fold={FOLD_POSITION}&
  device={DEVICE_TYPE}&
  cb={CACHEBUSTER}
```

## Common File Specifications

### Image Requirements

* **File types**: JPG, PNG, WebP, GIF
* **Max file sizes**:
  * Standard banners: 150-200KB
  * Large formats (970x250): 300KB
  * Animated GIFs: 500KB
  * HTML5 initial load: 200KB

### Third-Party Tag Requirements

* **HTTPS required**: All tag URLs must use secure protocol
* **Max file size**: 200KB for tag content
* **Async loading**: Tags should not block page rendering

### Animation Specifications

For animated GIF formats:

* `animated`: true
* `animation_duration_ms`: Duration in milliseconds
* Common durations: 15000ms (15 seconds)

## Related Documentation

* [Universal Macros](/docs/creative/universal-macros) - Complete macro reference
* [Creative Manifests](/docs/creative/creative-manifests) - Manifest structure and validation
* [Asset Types](/docs/creative/asset-types) - Image, HTML, and JavaScript asset specifications
