Skip to content

Creative formats

Video, image, and HTML5 share one <Linear> skeleton and are dispatched on the <MediaFile type> MIME. Tracking URLs, verve-metadata, caching (by <MediaFile> URL), and offline replay are identical across formats; only the renderer differs. Render the formats the player supports, and skip an <Ad> whose <MediaFile type> the player can’t render. For the full list of format ids, dimensions, and file specs, see Ad types & formats.

Format MIME type Timeline
Video video/mp4 Natural duration with quartile events
Image image/png, image/jpeg <Duration> countdown; no quartiles
HTML5 application/zip <Duration> countdown; no quartiles

Image and HTML5 have no playback timeline, so they carry a <Duration>: fire impression (and start) when the creative first renders, and complete when the <Duration> countdown elapses. Video fires the three quartiles in addition. See Reporting exposure for which events fire when. Creatives are authored at the MediaFile width/height (e.g. 1920×1080); fit them to the player’s display.

Play the video/mp4 for its natural duration. Unlike image and HTML5, video fires the three quartile events (firstQuartile, midpoint, thirdQuartile) between start and complete, so its VAST carries a <Tracking> for each.

<Ad>
<InLine>
<AdSystem>Verve</AdSystem>
<AdServingId>srv_a1</AdServingId>
<AdTitle>Summer Sale Spot</AdTitle>
<Impression><![CDATA[https://<host>/v1alpha2/track?asid=srv_a1&ae=impression&sts=2026-06-05T09:15:00Z]]></Impression>
<Creatives>
<Creative id="cr_video_01">
<Linear>
<Duration>00:00:20</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4" width="1920" height="1080">
<![CDATA[https://cdn/spot.mp4]]>
</MediaFile>
</MediaFiles>
<TrackingEvents>
<Tracking event="creativeView"><![CDATA[https://<host>/v1alpha2/track?asid=srv_a1&ce=creativeView&sts=...]]></Tracking>
<Tracking event="start"><![CDATA[https://<host>/v1alpha2/track?asid=srv_a1&ce=start&sts=...]]></Tracking>
<Tracking event="firstQuartile"><![CDATA[https://<host>/v1alpha2/track?asid=srv_a1&ce=firstQuartile&sts=...]]></Tracking>
<Tracking event="midpoint"><![CDATA[https://<host>/v1alpha2/track?asid=srv_a1&ce=midpoint&sts=...]]></Tracking>
<Tracking event="thirdQuartile"><![CDATA[https://<host>/v1alpha2/track?asid=srv_a1&ce=thirdQuartile&sts=...]]></Tracking>
<Tracking event="complete"><![CDATA[https://<host>/v1alpha2/track?asid=srv_a1&ce=complete&sts=...]]></Tracking>
</TrackingEvents>
</Linear>
</Creative>
</Creatives>
<Extensions>
<Extension type="verve-metadata"><![CDATA[{"flight_id":"fl_video_01","campaign_id":"cmp_summer","source":"SOURCE_TYPE_AD_SERVER","source_id":"verve-internal","request_id":"req_9f2","expires_at":"2026-06-05T23:59:59Z"}]]></Extension>
</Extensions>
</InLine>
</Ad>

Show the image full-screen for its <Duration>, then fire complete. This ad is a targeted Verve ad (source: SOURCE_TYPE_AD_SERVER), so its verve-metadata carries an audience block; see Matching audience offline. The SSP example below carries none: external bids don’t ship targeting.

<Ad>
<InLine>
<AdSystem>Verve</AdSystem>
<AdServingId>srv_b2</AdServingId>
<AdTitle>Summer Sale Banner</AdTitle>
<Impression><![CDATA[https://<host>/v1alpha2/track?asid=srv_b2&ae=impression&sts=2026-06-05T09:15:00Z]]></Impression>
<Creatives>
<Creative id="cr_image_01">
<Linear>
<Duration>00:00:10</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="image/png" width="1920" height="1080">
<![CDATA[https://cdn/banner.png]]>
</MediaFile>
</MediaFiles>
<TrackingEvents>
<Tracking event="creativeView"><![CDATA[https://<host>/v1alpha2/track?asid=srv_b2&ce=creativeView&sts=...]]></Tracking>
<Tracking event="start"><![CDATA[https://<host>/v1alpha2/track?asid=srv_b2&ce=start&sts=...]]></Tracking>
<Tracking event="complete"><![CDATA[https://<host>/v1alpha2/track?asid=srv_b2&ce=complete&sts=...]]></Tracking>
</TrackingEvents>
</Linear>
</Creative>
</Creatives>
<Extensions>
<Extension type="verve-metadata"><![CDATA[{"flight_id":"fl_image_01","campaign_id":"cmp_summer","source":"SOURCE_TYPE_AD_SERVER","source_id":"verve-internal","request_id":"req_9f2","expires_at":"2026-06-05T23:59:59Z","audience":{"targeting_groups":[{"conditions":[{"demographic":{"profiles":[{"gender":"GENDER_FEMALE","age_range":"AGE_RANGE_25_29"}]}},{"device":{"basket":{"skus":["sku_123"]}}}]},{"conditions":[{"store":{"weather_types":["WEATHER_TYPE_RAINY"]}}]}]}}]]></Extension>
</Extensions>
</InLine>
</Ad>

The MediaFile is a self-contained application/zip bundle: every font, image, and stylesheet is inside the zip, so nothing is fetched at render time. The <Extension type="verve-render"> names the file to load (entry_point, default index.html). To render: extract the zip, load the entry_point in an iframe at native resolution, fire impression on first render, and complete when <Duration> elapses.

A templated creative also carries <AdParameters>: a JSON value-map whose top-level keys are the placeholders the template declares. Values are informative data only: strings, numbers, objects, and lists. Templates use Mustache/Handlebars syntax: {{greeting}} for a simple substitution, and {{#products}}...{{/products}} for a repeated block over a list. Substitute the <AdParameters> JSON into the template at render. <AdParameters> is creative content only; targeting never lives there.

<Ad>
<InLine>
<AdSystem>Verve</AdSystem>
<AdServingId>srv_c3</AdServingId>
<AdTitle>Summer Sale Interactive</AdTitle>
<Impression><![CDATA[https://<host>/v1alpha2/track?asid=srv_c3&ae=impression&sts=2026-06-05T09:15:00Z]]></Impression>
<Creatives>
<Creative id="cr_html_01">
<Linear>
<Duration>00:00:15</Duration>
<AdParameters><![CDATA[{"greeting":"Good morning","promo":"Today only: 2-for-1 on selected pasta!","products":[{"name":"Barilla Spaghetti 500g","price":"1.99","discount":"30%"},{"name":"Verve Olive Oil 1L","price":"5.49","discount":"10%"}]}]]></AdParameters>
<MediaFiles>
<MediaFile delivery="progressive" type="application/zip" width="1920" height="1080">
<![CDATA[https://cdn/creative-bundle.zip]]>
</MediaFile>
</MediaFiles>
<TrackingEvents>
<Tracking event="creativeView"><![CDATA[https://<host>/v1alpha2/track?asid=srv_c3&ce=creativeView&sts=...]]></Tracking>
<Tracking event="start"><![CDATA[https://<host>/v1alpha2/track?asid=srv_c3&ce=start&sts=...]]></Tracking>
<Tracking event="complete"><![CDATA[https://<host>/v1alpha2/track?asid=srv_c3&ce=complete&sts=...]]></Tracking>
</TrackingEvents>
</Linear>
</Creative>
</Creatives>
<Extensions>
<Extension type="verve-metadata"><![CDATA[{"flight_id":"fl_html_01","source":"SOURCE_TYPE_SSP","source_id":"ssp_x","request_id":"req_9f2","expires_at":"2026-06-05T23:59:59Z"}]]></Extension>
<Extension type="verve-render"><![CDATA[{"entry_point":"index.html","format":"html"}]]></Extension>
</Extensions>
</InLine>
</Ad>