Verve

v1alpha2 Player — online & offline

Online (single ad)

Offline playlist

Cache empty.
online
Buffered fires: 0
Request an ad to begin playback

VAST 4.2 via GET /v1alpha2/ads.

Logs

How to integrate (v1alpha2 — as shipped)

This page is the reference player. The contract below is what the API serves today; anything not listed here (the opaque vrmt token, audience/pacing, image/HTML5 creatives, X-Verve-Request-Id, POST /adsignals, bulk drain) is planned and not emitted yet.

1. Get ads — GET /v1alpha2/ads

GET /v1alpha2/ads?playerid=<id>&key=<retailer>            # one targeted ad
GET /v1alpha2/ads?playerid=<id>&key=<retailer>&limit=N    # N targeted ads
GET /v1alpha2/ads?playerid=<id>&key=<retailer>&offline=true # audience-agnostic playlist to cache

Returns VAST 4.2 (application/xml), video/mp4 only. Empty <VAST/> = no-fill, play from cache. dvactid is allowed only when offline=false. Per-ad <Extension type="verve-metadata"> carries flight_id, campaign_id, request_id, expires_at.

2. Play & fire tracking — GET /v1alpha2/adexposure

Fire every <Impression> and <Tracking> URL yourself, verbatim, appending &ets=<RFC3339 UTC, e.g. 2026-05-28T14:32:05.1234Z>. The token on the URL is the aid query param: relay the whole URL, never parse it. Fire ae=impression and ce=start at render, and ce=complete at the end (plus any other <Tracking> events the VAST carries).

3. Offline

Prefetch with offline=true, download the <MediaFile> bytes locally, drop ads past expires_at. While offline, buffer each fire (the full URL + its ets); on reconnect replay them as GETs, staggered. Same (aid, event, ets) replayed is safe.

No auth in v1alpha2 (a registered playerid+key only). Full design-of-record: the partner integration reference.