VCR & Impression Tracking: VAST Quartile Beacons

How playback is reported to LtvAdx, how VCR is calculated, and how to read delivery data through the API.

Event pipeline

The player calls the tracking URLs in the VAST response. Each event is checked (signature, duplicate, invalid-traffic tag), stored, and added to the daily reporting summary within about 5 minutes. An impression is billed once per ad request — a repeated impression beacon for the same request is ignored.

Beacon URL format

Every tracking URL is the same endpoint with a different event:

GET https://ads.ltvadx.com/track/{requestId}?hh=…&crid=…&liid=…&chid=…&sig=…&event=impression
                                                              &event=start
                                                              &event=firstQuartile
                                                              &event=midpoint
                                                              &event=thirdQuartile
                                                              &event=complete
                                                              &event=skip | click | pause | resume | mute | unmute | fullscreen
                                                              &event=error&code=[ERRORCODE]

# Response: 200 with a 1×1 transparent GIF

Do not rebuild or edit the URLs

sig signs the request id, line item, creative and channel. A URL that has been changed is still recorded but never billed.

Event reference

event=Fired by the player whenCounts towards
impressionThe ad starts to renderImpressions, billing, frequency caps
startPlayback beginsStarts (VCR denominator)
firstQuartile / midpoint / thirdQuartile25% / 50% / 75% playedQuartile funnel
complete100% playedCompletes (VCR numerator)
skipViewer skipped (skippable creatives only)Skips
clickClick-through usedClicks
pause, resume, mute, unmute, fullscreenViewer actionEngagement counters
errorThe player could not play the ad (with code)Errors
creativeView, closeLinearCreative shown / closedTheir own counters — not impressions

VCR calculation

VCR = completes ÷ starts

Reported as a 0–1 ratio on /api/v1/reports/delivery rows,
and as a percentage on /api/v1/reports/vcr.

Impression vs start

The impression is the player's Impression URL — fired when the ad begins to render, not when the VAST is fetched. A gap between impressions and starts means players that rendered but never began playback (buffering, errors, abandonment).

VAST error codes

CodeMeaning (IAB)Usual cause
100XML parsing errorMalformed VAST
101VAST schema validation errorVersion mismatch
200Trafficking errorUnexpected ad type or size
300General wrapper errorWrapper chain problem
301Wrapper URI timeoutThird-party VAST URL unreachable
400General linear errorMedia file not playable
401File not foundCreative asset returns 404
402TimeoutMedia file too slow to load
405Problem displaying media fileCodec or format unsupported by the player
900Undefined errorUnknown player error

Invalid traffic (IVT)

Beacons are tagged as invalid traffic when the user agent is a known bot or tool, the IP is in a cloud-hosting range, the same event is repeated within 10 minutes, or one IP or household sends an implausible number of beacons in a minute. A quartile or complete without a start is tagged at ingestion.

Tagging only, today

IVT tags are recorded but nothing is filtered: tagged impressions are still billed and still counted in delivery reports. Separate IVT reporting and billing exclusion are planned, not live.

Reporting API

Authenticate with an API key from Dashboard → Settings → API Keys. Results are scoped to your account.

# Delivery rows: one per line item × channel × UTC day
GET https://api.ltvadx.com/api/v1/reports/delivery
    ?from=2026-09-01
    &to=2026-09-30
    &channelId=YOUR_CHANNEL_ID          # optional; also lineItemId, campaignId
Authorization: Bearer ltv_live_…

# Response: a JSON array of daily summary rows — counters (impressions, starts,
# firstQuartiles, midpoints, thirdQuartiles, completes, skips, clicks, errors),
# rates as 0–1 ratios (vcr, skipRate, ctr …) and money in USD micros
# (divide by 1,000,000).

# VCR aggregate (rates as percentages)
GET https://api.ltvadx.com/api/v1/reports/vcr?campaignId=…&from=…&to=…