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>