Creative formats in AdCP use standardized asset types with well-defined properties. Assets are the discrete, typed building blocks used by formats to define requirements and by manifests to supply concrete values. Standardizing asset types ensures consistency across formats and makes requirements easier for buyers and systems to understand.Documentation Index
Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
Use this file to discover all available pages before exploring further.
Important: Payload vs Requirements
For payload schemas (the structure of the actual asset data supplied in creative manifests), see:- Asset Type Registry - Links to all payload schemas
- Core Asset Schemas at
/schemas/v3/core/assets/- Individual asset payload definitions
- Whether an asset is required or optional
- Acceptable file or container formats
- Duration, dimension, or aspect ratio limits
- File size and bitrate limits
- Allowed or restricted features (for tag-based assets)
urlcontent(for inline text or inline tag markup)width/height(when declared)duration_ms(when applicable)format(declared container type)
Asset Type Schema
The official JSON schema for asset types is available at:- Production: https://adcontextprotocol.org/schemas/asset-types-v1.json
- GitHub: https://github.com/adcontextprotocol/adcp/blob/main/static/schemas/asset-types-v1.json
Core Asset Types
Video Asset
Video assets represent video files with specific technical requirements.duration_seconds: Expected video durationmin_duration_seconds/max_duration_seconds: Duration range (if flexible)acceptable_formats: Container formats (mp4, webm, mov)acceptable_codecs: Video codecs (h264, h265, vp8, vp9, av1)acceptable_resolutions: List of width x height stringsaspect_ratio: Required aspect ratio (16:9, 9:16, 1:1, etc.)max_file_size_mb: Maximum file size in megabytesmin_bitrate_mbps/max_bitrate_mbps: Bitrate range in Mbpsfeatures: Additional requirements (e.g., [“non-skippable”, “sound on”])
Image Asset
Static image assets for banners, logos, and visual content.width/height: Dimensions in pixelsmin_width/min_height: Minimum dimensions (px; typically used by responsive/sizeless formats)aspect_ratio: Required aspect ratioacceptable_formats: Image formats (jpg, png, gif, webp, svg)max_file_size_kb: Maximum file size in kilobytestransparency: Whether transparency is required/supportedanimation_allowed: Whether animated GIFs are acceptednotes: Additional requirements (e.g., “Must be free of text”)
- Fixed layout: provide
widthandheight. Do not includemin_width,min_height, oraspect_ratio. - Responsive (fixed image aspect ratio): provide
min_width,min_heightandaspect_ratio. Do not includewidthorheight. - Responsive (any image aspect ratio): provide
min_widthandmin_heightonly. Do not includewidth,height, oraspect_ratio.
width and height. In responsive layouts, the renderer will resize the image; use min_width/min_height to ensure there are enough pixels for a sharp result after scaling. Use aspect_ratio only when the image asset itself must be a specific shape (e.g., 16:9); omit it if any image aspect ratio is acceptable
Text Asset
Text content for headlines, descriptions, CTAs, etc.text_type: Specific type (title, headline, description, body, cta, advertiser_name, disclaimer)max_length: Maximum character countmin_length: Minimum character countdefault: Default value if not providedallowed_characters: Regex pattern for validationformat: Expected format (plain, currency, percentage)
URL Asset
Links for clickthroughs, tracking, and landing pages. Two related but distinct fields describe a URL asset:url_type(on the manifest asset) — the mechanism the receiver uses to invoke this URL.url-asset-requirements.role(on the format) — the purpose this URL slot serves in the creative.
click_tracker (purpose) and accept a tracker_pixel (mechanism) URL — those describe different things.
Manifest-side: url_type (mechanism)
Senders SHOULD include url_type on every URL asset. The valid values are:
| Value | Mechanism |
|---|---|
clickthrough | User-click destination (landing page or ad-tech redirector) |
tracker_pixel | Fires HTTP GET, expects 1×1 pixel or 204 response (impression / event / 3P trackers) |
tracker_script | Loads as a <script> tag — measurement SDKs (OMID verification, native event trackers using method: 2) |
url_type is absent, receivers SHOULD fall back to the format’s url-asset-requirements.role:
role (format) | Fallback url_type (mechanism) |
|---|---|
clickthrough, landing_page | clickthrough |
impression_tracker, click_tracker | tracker_pixel |
viewability_tracker | tracker_script — OMID and equivalent verification SDKs require a <script> tag; firing them as a pixel produces no measurement |
third_party_tracker | No safe fallback. Mechanism is integration-specific (DV/IAS ship both pixel and script forms). Receivers MAY reject or warn. |
url_type nor a format-side role is available, receivers MUST NOT silently pick a mechanism — firing a clickthrough URL as a pixel (or vice versa) silently corrupts measurement and breaks the user flow. Receivers SHOULD reject the manifest.
VAST/DAAST URLs are not URL assets. A URL pointing to ad-server XML markup is parsed, not GET-fired. Useasset_type: "vast"withdelivery_type: "url"for VAST tags, and the dedicated tracker types (vast_tracker/daast_tracker) once those land per RFC #2915. A VAST tag declared asasset_type: "url"withurl_type: "tracker_pixel"is non-conformant under these mechanism semantics.
Migration cue for sellers. If your tooling previously emitted only{asset_type: "url", url: ...}(per the older docs), you can keep doing so through 3.x — but plan to addurl_typebefore 4.0, when this field becomes required.
Format-side: role (purpose)
In format requirements, role declares what the URL slot is for:
role enum: clickthrough, landing_page, impression_tracker, click_tracker, viewability_tracker, third_party_tracker.
Other URL-asset-requirements properties
protocols: Allowed schemes (https,http)allowed_domains: List of allowed hostnamesmax_length: Maximum URL lengthmacro_support: Whether macro substitution is permitted
Audio Asset
Audio files for audio ads and podcasts.duration_seconds: Expected durationacceptable_formats: Audio formats (mp3, m4a, aac, ogg)min_bitrate_kbps: Minimum bitrate in kilobits per secondmax_file_size_mb: Maximum file size in megabytesstereo_required: Whether stereo audio is required
HTML Asset
HTML5 creative assets for rich media formats and third-party display tags.content: Inline HTML contenturl: URL to externally hosted HTML file (alternative to inline content)format: HTML format type (html5, amphtml)max_initial_load_kb: Maximum initial load sizemax_total_size_kb: Maximum total size including all assetsallowed_features: Allowed HTML5 featuresrestricted_features: Features that must not be used
VAST Asset
VAST (Video Ad Serving Template) tags for third-party video ad serving. URL Delivery:delivery_type: “url” or “inline” (required discriminator)url: URL endpoint that returns VAST XML (required when delivery_type is “url”)content: Inline VAST XML content (required when delivery_type is “inline”)vast_version: VAST specification version (2.0, 3.0, 4.0, 4.1, 4.2)vpaid_enabled: Whether VPAID (Video Player-Ad Interface Definition) is supportedmax_wrapper_depth: Maximum allowed wrapper/redirect depthduration_ms: Expected video duration in milliseconds (if known)tracking_events: Array of supported tracking events. Valid values are defined by the VAST Tracking Event enum. Aligned to the IAB VAST 4.2 XSDTrackingEvents_type/Tracking/@eventenumeration (vast_4.2.xsd lines 112–136), plus AdCP-flattened representations ofImpression,Error,VideoClicks, andViewableImpressionelements:- Playback:
impression(billing event),creativeView,loaded,start,firstQuartile,midpoint,thirdQuartile,complete - Interaction:
mute,unmute,pause,resume,rewind,skip,playerExpand,playerCollapse,fullscreen(VAST 2.x/3.x compat),exitFullscreen(VAST 2.x/3.x compat),otherAdInteraction,interactiveStart(SIMID) - Non-linear / companion:
acceptInvitation,adExpand,adCollapse,minimize,overlayViewDuration - Progress:
progress(for custom progress points via VASToffsetattribute) - Click & close:
clickTracking,customClick,close,closeLinear - Verification:
viewable,notViewable,viewUndetermined,measurableImpression(AdCP extension),viewableImpression - Errors:
error
- Playback:
- Third-party video ad servers
- Programmatic video buying
- Video ad networks
- VPAID interactive video ads
VAST Tracker Asset
A single URL bound to a VASTTrackingEvents event. Use this when the creative agent emits decomposed per-event URLs and the sales agent is responsible for assembling the VAST TrackingEvents block at serve time — as an alternative to shipping a complete VAST tag.
Example:
vast_event: The event this URL fires on. Any VAST tracking-event enum value exceptimpression,clickTracking,customClick,error, or any ofviewable/notViewable/viewUndetermined/measurableImpression/viewableImpression— those live in dedicated VAST elements (Impression,VideoClicks,Error,ViewableImpression), not underTrackingEvents(see Tracker routing normative rule below). Common values:start,firstQuartile,midpoint,thirdQuartile,complete,pause,resume,mute,unmute,skip,progress.url: Tracker URL. Supports AdCP universal macros.offset: Required forvast_event: "progress". VAST 4.2 offset format (Tracking@offset):HH:MM:SSorHH:MM:SS.mmm(two-digit hours, minutes 00–59, seconds 00–59, exactly 3 fractional digits when present) for absolute time, or an integer percentage 0–100 suffixed with%. Negative offsets are NOT permitted — the VAST 4.2 XSD pattern does not allow a leading minus.target: Which VAST creative element scopes this tracker —linear(default),non_linear, orcompanion. VAST 4.2 places<TrackingEvents>under three different parents (<Linear>,<NonLinearAds>,<CompanionAds>/<Companion>) with different valid event sets — e.g.,acceptInvitationis meaningful onnon_linear/companion,closeLinearonly onlinear. Sales agents read this to place the tracker correctly during VAST assembly.
DAAST Asset
DAAST (Digital Audio Ad Serving Template) tags for third-party audio ad serving. URL Delivery:delivery_type: “url” or “inline” (required discriminator)url: URL endpoint that returns DAAST XML (required when delivery_type is “url”)content: Inline DAAST XML content (required when delivery_type is “inline”)daast_version: DAAST specification version (1.0, 1.1)duration_ms: Expected audio duration in milliseconds (if known)tracking_events: Array of supported tracking events. Valid values are defined by the DAAST Tracking Event enum. Aligned to DAAST 1.1 §3.2.1.7<Tracking event="…">values (the audio-applicable subset of VAST), plusclose(DAAST 1.1 §3.2.4.2) and AdCP-flattened representations ofImpression,Error, and the click children of<AdInteractions>:- Playback:
impression(billing event),creativeView(also used for companion display per DAAST 1.1 §3.2.2.7),start,firstQuartile,midpoint,thirdQuartile,complete - Interaction:
mute,unmute,pause,resume,rewind,skip - Progress:
progress(withoffsetattribute, DAAST 1.1 §3.2.4.3) - Click & close:
clickTracking,customClick,close - Verification (AdCP extensions, OM-SDK Audio):
viewable,notViewable,viewUndetermined,measurableImpression,viewableImpression - Errors:
error
- Playback:
loaded, playerExpand/playerCollapse, fullscreen/exitFullscreen, acceptInvitation, adExpand/adCollapse, minimize, overlayViewDuration, interactiveStart) are deliberately excluded — they have no defined audio semantics in DAAST 1.1.
companion_ads: Whether companion display ads are included
- Third-party audio ad servers
- Podcast advertising networks
- Streaming audio platforms
- Radio-style digital audio ads
DAAST Tracker Asset
Audio-side analogue ofvast_tracker: a single URL bound to a DAAST TrackingEvents event.
Example:
daast_event: Any DAAST tracking-event enum value exceptimpression,clickTracking,customClick,error, or any ofviewable/notViewable/viewUndetermined/measurableImpression/viewableImpression(same element-routing rule asvast_tracker— those values belong inImpression/<AdInteractions>/Error/ AdCP-extension verification slots, notTrackingEvents). Common values:start,firstQuartile,midpoint,thirdQuartile,complete,pause,resume,mute,unmute,rewind,skip,progress.url: Tracker URL. Supports AdCP universal macros.offset: Required fordaast_event: "progress"(DAAST 1.1 §3.2.4.3). Same format as VAST 4.2Tracking@offset. Negative offsets are NOT permitted.target: Which DAAST creative element scopes this tracker —linear(default, DAAST 1.1 §3.2.1.7) orcompanion(DAAST 1.1 §3.2.2.7, where the only valid event iscreativeView). DAAST has no<NonLinearAds>element — audio is linear or accompanied by a visual companion.
Creative / Sales Agent Boundary (VAST Assembly)
AdCP separates creative agents (produce the assets a creative is made of) from sales agents (assemble those assets into the serving format the ad server expects). For VAST and DAAST, the boundary is normative:Complete tag vs decomposed trackers
A creative manifest MAY emit VAST trackers in one of two shapes. The creative agent chooses; the sales agent handles either. Complete tag — the creative agent hands off a hosted or inline VAST tag and the sales agent wraps it:TrackingEvents block:
Normative rules
-
Wrapper is a sales-agent concern. The creative agent MUST NOT emit a VAST
Wrapperelement.Wrapperis a multi-hop chaining construct — if the served VAST needs to be wrapped (for macro signing, SSAI-compatible envelope, or ad-server redirection), the sales agent constructs the wrapper at serve time around the creative agent’s output. Emitting an inline VAST document withAd > InLine > Creativescontent (the pattern shown in Universal Macros) is permitted and unchanged. -
Assembly responsibilities. The sales agent is responsible for constructing VAST envelope elements that assemble resources from the creative agent:
TrackingEvents(fromvast_trackerassets),AdVerifications(from OMID verification resources), andWrapper/VASTAdTagURI(if chaining). The creative agent supplies the resources; the sales agent places them in the correct element. A dedicatedomid_verificationasset type for decomposing OMID resources is a planned follow-up. -
Tracker routing by element. VAST’s tracker URLs live in three different elements and AdCP models them with three different asset shapes — don’t cross the streams:
ImpressionURL →urlasset withurl_type: "tracker_pixel"(not avast_tracker).TrackingEventsevents (start, quartiles, complete, pause, etc.) →vast_trackerasset withvast_event.VideoClicksURLs (ClickThrough,ClickTracking,CustomClick) →urlasset (url_type: "clickthrough"forClickThrough; click-tracker URLs useurl_type: "tracker_pixel").
vast_trackerschema enforces this split:vast_eventMUST NOT beimpression,clickTracking,customClick, orerror. The same rule applies to DAAST. -
Mixing allowed. A creative manifest MAY mix a complete
vasttag with additionalvast_trackerandurl(impression / click) assets — the sales agent merges them into one VAST document at serve time.
SSAI caveat
In server-side ad insertion (SSAI) environments — Yospace, AWS Elemental, MediaTailor — the stream-stitcher rewrites and re-signs the VAST XML before it reaches the player. Trackers that must survive SSAI need to be in the VAST document before stitching. AdCP does not today specify an SSAI-specific manifest shape; this is a known gap and a follow-on RFC topic.Common Properties
All asset types share these common fields:asset_id: Unique identifier within the formatasset_type: The asset’s type (image, video, text, url, etc.)asset_role: Semantic purpose (hero_video, logo, cta_button)required: Whether the asset is mandatory
Asset ID vs Asset Role
asset_id: A stable identifier used by manifests to supply values.
asset_role: A semantic label describing the asset’s purpose.
Example:
hero_image/hero_video- Primary visual contentlogo- Brand logoheadline- Main headline textdescription- Body copy or description textcta_button- Call-to-action buttonbackground_image- Background visualthumbnail- Preview imagecompanion_banner- Secondary display ad
Asset ID Usage
Theasset_id field is crucial for orchestrators and creative management systems. It provides a stable identifier for mapping uploaded assets to their correct positions in the creative format.
Example: Uploading Assets
When submitting creative assets, the orchestrator usesasset_id to map files:
asset_id values defined in the format.
Usage in Creative Formats
Creative formats specify their assets using theassets array. Each asset has a required boolean:
required: true- Asset MUST be provided for a valid creativerequired: false- Asset is optional, enhances the creative (e.g., companion banners, third-party tracking pixels)
Repeatable Asset Groups
For formats with asset sequences (like carousels, slideshows, stories), see the Carousel & Multi-Asset Formats guide for complete documentation on repeatable asset group patterns.Validation
Implementations should validate assets against these schemas to ensure compatibility. The JSON schema can be used for automated validation:Best Practices
- Be specific where possible
- Declare all constraints explicitly
- Use standard units:
- File size: MB (video/audio), KB (images)
- Duration: seconds
- Bitrate: Mbps (video), Kbps (audio)
- Dimensions: pixels
- Balance quality with performance
- Document edge cases using notes