Complete reference for GET https://g.ezoic.net/ezoic/videoad/vast. Parameters are URL query parameters and values must be URL-encoded. The reference is current with the tag's behaviour as of 2026-07-31.
General behaviour:
Unknown parameters are ignored. Cache busters and vendor extras are safe.
Responses are never cached (Cache-Control: no-store). Still send a cache buster (cb) so intermediate infrastructure cannot cache either.
The endpoint supports CORS, so browser players can fetch it with XHR, and it answers OPTIONS preflights.
A parameter that is present but empty, or a number that is zero or negative, falls back to its default.
A value that is entirely a macro literal (for example [IFA], {{BUNDLE}}, %%US_PRIVACY%%, or the text null or undefined) is dropped. See Testing and troubleshooting.
Property identity
Send exactly one identity lane. url wins over d, and the app lane is used only when neither is present.
Parameter
Description
url
Full page URL (website lane). Takes precedence over everything else.
d
Bare domain, for example example.com. Expanded to https://example.com/.
bundle (aliases app_bundle, roku_app_id)
App identifier (app lane). Roku: numeric Channel Store ID. Android and Fire TV: package name. Apple: numeric App Store ID. Must resolve to a domain registered with Ezoic.
app_domain
The Ezoic-registered domain your app maps to. Send it with bundle.
app_name (aliases appname, name)
Human-readable app name.
storeurl (aliases appstoreurl, app_store_url)
App store listing URL.
app_cat
CSV of IAB content category codes for the app as a whole, for example IAB1,IAB1-7. Include at least one parent-level category.
inventorypartnerdomain
Domain of the inventory partner on whose behalf the request is made. Required by some large buyers on reseller arrangements.
Placement and auction
Parameter
Default
Description
adunit
ezoic_vast_tag
Your normal video ad unit name. Send the name your publisher setup uses, not a separate CTV unit. It also seeds the placement ID. Only the exact name adunit is read. ad_unit is silently ignored.
gpid
<adunit>_plcmt_<N>
Explicit global placement ID. When you send it, it is used exactly as given.
w / h
640 / 360
Player width and height in pixels. Send your real size, for example 1920 and 1080 for full-screen TV.
floor
none
Bid floor in USD, for example floor=2.50. Applied only when greater than zero.
tmax
3500
Auction time budget in milliseconds. The tag keeps a 50 ms network buffer and never runs the auction with less than 200 ms of budget, so very small values are raised to that minimum. Set it to the time your stitcher or ad server actually allows.
plcmt
1
OpenRTB 2.6 placement type. 1 is in-stream, the CTV standard. Out-of-range values become 1.
secure
1
Whether creatives must be served over HTTPS. Send secure=0 only if you have a real need. Any value other than 0 is treated as 1.
Video
Parameter
Default
Description
v
4.2
VAST version to negotiate: 2 or 2.0, 3 or 3.0, 4 or 4.x. Roku's ad framework parses only 2.0 and 3.0, so always send v=3 for Roku. When v is absent, the ceiling comes from protocols.
protocols
from v
CSV of OpenRTB protocol IDs. When absent, the response is limited to the negotiated VAST version.
mimes
video/mp4
CSV of MIME types. Send more only if your player plays them.
api
platform-aware
CSV of API frameworks, for example 7 for OMID-1. On CTV requests without this parameter, Roku-identified requests declare none, because Roku does not run an in-player measurement SDK. Other CTV requests declare 7. An explicit value always wins.
playbackmethod
none
CSV of OpenRTB playback methods, for example 1 for autoplay with sound.
minduration / maxduration
5 / 120
Accepted creative duration bounds in seconds. Explicit values always win. For dynamic pods these are per-ad limits.
placement
1 when plcmt=1
Legacy OpenRTB 2.5 placement field. Sent for in-stream.
pos
7 on CTV
Ad position, AdCOM 0 to 7. CTV requests default to 7 (full screen). Other device types have no default. An explicit pos=0 is treated as absent.
skip
0
1 if your player supports skippable ads. The tag always declares a value to buyers: yours when you send it, otherwise 0.
linearity
none
1 for linear, in-stream.
startdelay
none
0 for pre-roll, -1 for generic mid-roll, -2 for post-roll, or a positive number of seconds. No default, so always send it.
minbitrate / maxbitrate
none
Bitrate bounds in kbps.
pod / slot
none
Ad pod ID and 1-based slot position. Send both when you request pod slots as separate calls.
poddur / maxseq / podseq / mincpmpersec
none
Dynamic-pod fields for one request that asks for a whole ad break. poddur is the total break length in seconds. maxseq is the most ads in the pod. podseq is the AdCOM pod sequence. mincpmpersec is a minimum CPM per second. Each is passed through only when valid.
Device
Parameter
Description
devicetype
OpenRTB device type. Hardcode 3 (Connected TV). Types 6 (Connected Device) and 7 (Set Top Box) also classify as CTV, and a TV user agent is treated as CTV when this is absent.
ifa
Device advertising identifier as the platform provides it.
ifa_type
Source of the ifa. One of rida, afai, tifa, vida, msai, idfa, aaid, sspid. Always send it with ifa. CTV buyers discount an IFA with no type.
lmt / dnt
1 or 0. Send lmt=1 when the viewer has limited ad tracking.
ua / ip / ipv6
The device's user agent and IP address. Server-side callers must send the viewer's values, not their own. Direct device calls may omit them, and the tag then uses the request's own headers.
language / make / model / os / osv / carrier
Passed through to the device object. For Roku, send make=Roku, os=Roku OS and osv with the OS version.
connectiontype
OpenRTB connection type, 1 to 7.
lat / lon / region / city / zip
Geo values, passed through as given.
country
Country code, ISO-3166-1 alpha-2 (US) or alpha-3 (USA). Normalized to alpha-3. If you omit it, or the value does not normalize, the tag fills it from the request IP.
Content
All optional and all recommended. See Content metadata for guidance.
Parameter
Description
content_id
Your stable content identifier.
content_title
Title of the content.
content_series
Series name, if the content is episodic.
content_episode / content_season
Episode and season numbers.
content_genre
Genre, for example Comedy.
content_cat
CSV of IAB content category codes, for example IAB1-7. Brand-safety filters key on it.
content_len
Content duration in seconds. Brand-safety filters key on it.
content_language
Content language, ISO-639-1.
content_url
Public URL of the content, if one exists.
content_rating
Content rating, for example TV-PG. Some large buyers require it.
content_prodq
Production quality: 1 professional, 2 prosumer, 3 user-generated.
content_channel / content_channel_domain
Channel name and its domain.
content_network / content_network_domain
Network name and its domain.
livestream
1 only when the content is live at the moment of the impression. Video on demand, including replays, is 0.
Privacy and regulatory
Send only the signals you have. Never fabricate a value.
Parameter
Description
gdpr
1 when GDPR applies to the request, otherwise 0.
consent
IAB TCF consent string.
us_privacy
IAB US Privacy (CCPA) string, for example 1YNN.
gpp / gpp_sid
IAB GPP consent string and the CSV of applicable section IDs.
coppa
1 when the content is directed to children.
Blocklists and supply chain
Parameter
Description
badv
CSV of blocked advertiser domains.
bcat
CSV of blocked IAB categories.
bapp
CSV of blocked app bundles.
schain
Supply chain serialized per the IAB spec. A malformed chain is dropped entirely, so validate it before you send it. Direct integrations with no intermediary can omit it.
Identity enrichment
Parameter
Description
eids
URL-encoded JSON array of OpenRTB extended IDs. Limits: 4 KB raw and 8 entries. Each entry needs a string source and uids[].id. Malformed input drops the whole parameter, and a single bad entry is skipped. Example before encoding: [{"source":"uidapi.com","uids":[{"id":"...","atype":3}]}]
ssai
Server-side ad insertion level, see the table below. Send it only when you know the value.
omidpn / omidpv
Open Measurement partner name and version. Send them only when your player runs its own OM SDK session, and pair them with api=7.
displaymanager / displaymanagerver
Name and version of the rendering SDK. The defaults are ezoic-vast-tag and 1.0.
Omit ssai if you are not stitched or are unsure. Some buyers gate SSAI demand on this field, so a wrong value costs more than no value.
Google
givn carries a Google PAL SDK nonce. A valid nonce, from an app Google has approved for this lane, lets Google demand compete for the impression. Partner tags do not need it. Contact your Ezoic representative before you send it.
Responses
Shape
HTTP
Meaning
302 redirect to a VAST document
302, then 200
Filled. Standard players follow the redirect.
Inline VAST XML with <Ad> elements
200
Filled, served directly. Extra <Ad> elements are same-request fallbacks, not a pod.
Empty VAST document
200
No fill. Never an error page.
One ad per request, with no VMAP. For multi-ad breaks, request each slot with pod and slot.