Creative Manifests
Creative manifests are structured specifications that define all the assets and metadata needed to render a creative in a specific format. They pair the requirements defined by Creative Formats with actual asset content. For an overview of how formats, manifests, and creative agents work together, see the Creative Protocol Overview.Manifest Structure
Basic Structure
Asset IDs
Each asset in a manifest is keyed by itsasset_id, which must match an asset_id defined in the format’s assets_required array. The asset ID serves as the technical identifier for referencing the asset requirement in the format specification.
How Asset IDs Work:
When a format defines required assets:
banner_image,hero_image: Primary visual assetslogo: Brand logoheadline,description: Text contentcta_text: Call-to-action button textvideo_file: Video contentvast_tag: VAST XML for video deliveryclickthrough_url: Landing page URL
assets_required to see which asset IDs are required.
Complete Example
Here’s a complete creative manifest showing the current structure without redundant fields:image, text, url) are not declared in the manifest. They are determined by looking up each asset_id in the format specification’s assets_required array. The format tells us that banner_image should be type image, headline should be type text, etc.
Types of Creative Manifests
Creative manifests can be static, dynamic, or hybrid - reflecting the three creative agent modalities above.Static Manifests
Static manifests contain all assets ready for immediate rendering. These are produced by creative agents in Static Asset Delivery or Prompt to Static Rendering modes.- Traditional display advertising
- Pre-rendered video ads
- Static native ads
- Fixed creative campaigns
Dynamic Manifests
Dynamic manifests include endpoints or code for real-time generation. These are produced by creative agents in Prompt to Dynamic Rendering mode (DCO/Generative).- Weather-based creative
- Time-of-day personalization
- Product availability messaging
- Real-time inventory updates
html or javascript asset types with embedded tags instead of webhooks.
Dynamic manifests can mix asset types - some assets may be static (images, videos) while others are dynamic (webhooks, tags with macros). For example, a video VAST tag with a static hero video but a personalized end card webhook.
DOOH Manifests with Impression Tracking
Digital Out-of-Home (DOOH) creatives use impression tracking just like other formats, but with venue-specific macros instead of device identifiers.{SCREEN_ID}- Unique identifier for the physical screen{VENUE_TYPE}- Venue category (airport, mall, transit, highway, retail){VENUE_LAT}/{VENUE_LONG}- Physical location coordinates{PLAY_TIMESTAMP}- When creative displayed (Unix timestamp){DWELL_TIME}- Average viewer dwell time at this location
Working with Manifests
Creating Manifests
Manifests are JSON structures that can be created in two ways: 1. Manual Assembly Construct manifests directly by pairing format requirements with your assets:build_creative to have a creative agent generate manifests from natural language briefs. See Generative Creative for details.
Validating Manifests
Before using a manifest, validate it against format requirements:- Format Compatibility: Ensure
format_idmatches intended format - Required Assets: All required
asset_idvalues from the format are present as keys in the manifest’sassetsobject - Asset Key Matching: Each key in the manifest’s
assetsobject MUST match anasset_idfrom the format’sassets_requiredarray - Asset Specifications: Each asset meets format requirements (dimensions, file size, duration, etc.)
- Macro Support: Dynamic manifests properly handle required macros
- Missing required asset_id: Creative agents MUST reject the manifest with an error listing which required assets are missing
- Unknown asset_id: Creative agents MUST reject manifests containing asset keys that don’t match any
asset_idin the format. This catches typos and incompatible formats immediately. - Wrong asset_type: If an asset doesn’t match the type requirement for that
asset_idin the format specification, reject with a clear type mismatch error
build_creative handle validation automatically. For manually constructed manifests, validate against the format specification returned by list_creative_formats.
Format-Aware Validation: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, eliminating any validation ambiguity. Asset type information is NOT included in the manifest itself - it’s determined by looking up the asset_id in the format’s assets_required array.
Validation Flow
When a creative agent receives a manifest for validation:- Extract format_id from the manifest
- Fetch format specification from the format registry (local or remote based on
agent_url) - For each asset key in
manifest.assets:- Look up the
asset_idinformat.assets_required - If not found → reject with error “Unknown asset_id ‘banner_imag’ not defined in format”
- If found → determine the expected
asset_typefrom the format requirement - Fetch the asset type schema (e.g.,
/schemas/v1/core/assets/image-asset.json) - Validate the asset payload against that schema
- Validate the asset meets any additional constraints in the format’s
requirementsfield
- Look up the
- Check all required assets are present (where
required: truein format spec) - Validate type-specific constraints (dimensions, file size, duration, etc.)
asset_id should be and what constraints apply.
Validation is runtime, not schema-time: The JSON schema for creative manifests uses a flexible pattern (^[a-z0-9_]+$) for asset keys because the valid keys depend on which format you’re using. Validation against the specific format’s assets_required happens when you submit the manifest to a creative agent.
Previewing Manifests
Use thepreview_creative task to see how a manifest will render:
Submitting Manifests
Manifests are submitted to the creative library usingsync_creatives, then referenced by ID in media buys:
creative_id. Each manifest is for a single format.
Macro Substitution in Manifests
Manifests support macro placeholders for dynamic values. AdCP uses universal macros that work consistently across all publishers. See Universal Macros for complete documentation on available macros, macro substitution process, and format-specific macro support.Best Practices
For Creative Agents
- Complete Manifests: Include all required assets for the format
- Validate Assets: Ensure assets meet format specifications
- Provide Fallbacks: Include fallback assets for dynamic creatives
- Document Macros: Clearly specify which macros are used
- Version Assets: Use versioned URLs for asset management
For Publishers
- Validate on Receipt: Check manifests against format requirements
- Cache Assets: Pre-fetch and cache hosted assets
- Handle Failures: Implement fallback rendering for dynamic manifests
- Support Macros: Implement full Universal Macro support
- Provide Templates: Offer rendering templates for custom formats
For Buyers
- Validate Manifests: Ensure manifests match format requirements (manually or via
build_creative) - Preview First: Always preview manifests before submission
- Test Macros: Verify macro substitution works as expected
- Optimize Assets: Ensure assets are properly sized and compressed
- Organize Libraries: Use creative libraries for asset management
Advanced Topics
Repeatable Asset Groups
For carousel, slideshow, and multi-asset formats, see the Carousel & Multi-Asset Formats guide for complete documentation on repeatable asset groups.Schema Reference
Related Documentation
- Creative Formats - Understanding format specifications and discovery
- Channel Guides - Format examples across video, display, audio, DOOH, and carousels
- build_creative Task
- preview_creative Task