Skip to main content
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)

{
  "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)

{
  "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)

{
  "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)

{
  "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)

{
  "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)

{
  "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

{
  "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",
      "url": "https://track.brand.com/imp?buy={MEDIA_BUY_ID}&cb={CACHEBUSTER}"
    }
  }
}

Animated GIF Manifest

{
  "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.
{
  "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.
{
  "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.
{
  "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

{
  "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:
{
  "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

{
  "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:
{
  "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

{
  "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:
{
  "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

{
  "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

{
  "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, 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)