View as Markdown

CTV Parameters

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.

SSAI level

ssai Meaning
1 All client-side. Not server-side at all.
2 Assets stitched server-side, tracking pixels fired client-side.
3 All server-side, stitching and tracking.

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.