VAST
Video Ad Serving Template
We support VAST 2.0 - Vast 4.1 for Web, Apps & CTV.
Example tags and required macros are listed below, and our account managers ([email protected]) will help you with the final ad code.
Video:-
For Apps -
https://aex.ingage.tech/tag/video?screenSize=1920x1080&adUnitId=[AD_UNIT_ID]&publisherId=[PUB_ID]&mimes=video/mp4&mimes=video/ogg&mimes=video/webm&mimes=application/javascript&w=[WIDTH]&h=[HEIGHT]&pageUrl=[Page_URL]&bidFloor=0.5&bundleId=[BUNDLE_ID]&uid=[IFA_TYPE_MACRO]&plcmt=[PLCMT]&placement=[PLACEMENT]&minduration=1&maxduration=120&minbitrate=1&maxbitrate=10000
For Web -
https://ex.ingage.tech/tag/video?screenSize=1920x1080&adUnitId=[AD_UNIT_ID]&publisherId=[PUB_ID]&mimes=video/mp4&mimes=video/ogg&mimes=video/webm&mimes=application/javascript&w=[WIDTH]&h=[HEIGHT]&bidFloor=0.5&pageUrl=[PAGE_URL]&plcmt=[PLCMT]&uid=[UUID]&placement=[PLACEMENT]&minduration=1&maxduration=120&minbitrate=1&maxbitrate=10000
Audio:-
For Apps -
https://aex.ingage.tech/tag/audio?screenSize=1920x1080&adUnitId=[AD_UNIT_ID]&publisherId=[PUB_ID]&bundleId=[BUNDLE_ID]&ifa=[IFA]&mimes=audio/mp4&mimes=audio/mpeg&mimes=audio/aac&pageUrl=[Page_URL]&bidFloor=0.5&minduration=5&maxduration=60&minbitrate=32&maxbitrate=320&startdelay=0&delivery=1&delivery=2&feed=[FEED]&stitched=0&nvol=1
For Web -
https://ex.ingage.tech/tag/audio?screenSize=1920x1080&adUnitId=[AD_UNIT_ID]&publisherId=[PUB_ID]&pageUrl=[PAGE_URL]&mimes=audio/mp4&mimes=audio/mpeg&mimes=audio/aac&bidFloor=0.5&minduration=5&maxduration=60&minbitrate=32&maxbitrate=320&startdelay=0&delivery=1&delivery=2&feed=[FEED]&stitched=0&nvol=1
Except adUnitId and PublisherId, all other values can be inserted dynamically. Our Publisher success team will help you with adUnitId & PublisherId
Additionally, please ensure that the &pageUrl parameter contains the full URL, including https://. The final root URL should be formatted as https://www.domain.com/. If the value sent to our server is already in this format, you may disregard this instruction.
Required & Recommended Macros
| Key | Media Type | Supported Inventory | Macro Type | Required | Recommended | Description |
|---|---|---|---|---|---|---|
adUnitId | Video, Audio | Web, App | string | Yes | Yes | Insticator ad unit identifier for the placement, passed through to bidders on the impression's ext.insticator object. |
publisherId | Video, Audio | Web, App | string | Yes | Yes | Exchange-specific publisher ID. Every ID maps to a single entity that is paid for inventory transacted via that ID. |
id | Video, Audio | Web, App | string | Yes | Yes | Exchange-specific site or app ID. |
bundleId | Video, Audio | App | string | Yes | Yes | The store ID of the app in an app store. For the Google Play Store this is the bundle or package name (e.g. com.foo.mygame); for the Apple App Store it is a numeric ID. |
pageUrl | Video, Audio | Web | string | Yes | Yes | URL of the page where the impression will be shown. |
domain | Video, Audio | Web | string | Yes | Yes | Domain of the site (e.g., "mysite.foo.com"). |
isApp | Video, Audio | Web, App | integer | Marks the request as app inventory rather than web inventory, so the exchange describes it with an App object instead of a Site object. Accepted values are 1 and true. | ||
mimes | Video, Audio | Web, App | string[] | Yes | Yes | Content MIME types supported (e.g., "video/mp4", "audio/mp4"). Repeat the parameter once per MIME type. Audio tags fall back to a default set when it is omitted. |
w | Video | Web, App | integer | Yes | Yes | Width of the video player in device-independent pixels (DIPS). The OpenRTB Audio object defines no width, so audio tags omit it. |
h | Video | Web, App | integer | Yes | Yes | Height of the video player in device-independent pixels (DIPS). The OpenRTB Audio object defines no height, so audio tags omit it. |
plcmt | Video | Web, App | integer | Yes, unless placement or instl=1 | Yes | Video placement type for the impression: 1 = instream, 2 = accompanying content, 3 = interstitial, 4 = no content/standalone, 5 = pause, 6 = screensaver, 7 = overlay, 8 = squeezeback, 9 = in-scene. |
placement | Video | Web, App | integer | Yes, unless plcmt or instl=1 | Yes | Video placement type for the impression, deprecated as of OpenRTB 2.6 in favour of plcmt. |
protocols | Video, Audio | Web, App | integer[] | Yes | Yes | Supported VAST protocol versions, where 1 = VAST 1.0, 2 = VAST 2.0, 3 = VAST 3.0, 4 = VAST 1.0 wrapper, 5 = VAST 2.0 wrapper, 6 = VAST 3.0 wrapper, 7 = VAST 4.0, 8 = VAST 4.0 wrapper, 11 = VAST 4.1, 12 = VAST 4.1 wrapper, 13 = VAST 4.2, 14 = VAST 4.2 wrapper, 15 = VAST 4.3, 16 = VAST 4.3 wrapper. Repeat the parameter once for each value. |
minduration | Video, Audio | Web, App | integer | Yes | Yes | Minimum video or audio ad duration in seconds. This field is an alternative to rqdDurs; only one of minduration and rqdDurs may be sent. |
maxduration | Video, Audio | Web, App | integer | Yes | Yes | Maximum video or audio ad duration in seconds. This field is an alternative to rqdDurs; only one of maxduration and rqdDurs may be sent. |
rqdDurs | Video, Audio | Web, App | integer[] | Precise acceptable creative durations in seconds, comma separated. An alternative to minduration and maxduration. | ||
startdelay | Video, Audio | Web, App | integer | Yes | Start delay for the ad placement, where 0 = pre-roll, -1 = generic mid-roll, -2 = generic post-roll; any value greater than 0 is a mid-roll and indicates the start delay in seconds. | |
linearity | Video | Web, App | integer | Indicates whether the impression must be linear or non-linear, where 1 = linear, 2 = non-linear (overlay). Describes the expected VAST response, not the type of video player inventory. | ||
delivery | Video, Audio | Web, App | integer[] | Supported delivery methods, where 1 = streaming, 2 = progressive, 3 = download. If none are specified, assume all are supported. Repeat the parameter for each value. | ||
api | Video, Audio | Web, App | integer[] | Yes | List of supported API frameworks for this impression, per List: API Frameworks in AdCOM 1.0. An API not explicitly listed is assumed not to be supported. Repeat the parameter for each value. | |
minbitrate | Video, Audio | Web, App | integer | Yes | Minimum bit rate in Kbps (kilobits per second). | |
maxbitrate | Video, Audio | Web, App | integer | Yes | Maximum bit rate in Kbps (kilobits per second). | |
maxextended | Video, Audio | Web, App | integer | Maximum extended ad duration in seconds if extension is allowed. If blank or 0, extension is not allowed; if -1, extension is allowed with no time limit imposed; if greater than 0, the value is the number of seconds of extended play supported beyond maxduration. | ||
sequence | Video, Audio | Web, App | integer | Sequence number of the impression within a content stream. Deprecated in OpenRTB 2.6 in favour of slotInPod. | ||
skip | Video | Web, App | integer | Indicates whether the player allows the video to be skipped, where 0 = the player does not allow skipping, 1 = the player allows the ad to be skipped. | ||
skipmin | Video | Web, App | integer | Creatives of total duration greater than this number of seconds may be skippable; only applicable if the ad is skippable. | ||
skipafter | Video | Web, App | integer | Number of seconds of playback before the skip control becomes available; only applicable if the ad is skippable. | ||
playbackmethod | Video | Web, App | integer[] | Yes | Playback methods that may be in use: 1 = initiates without user interaction, sound on; 2 = initiates without user interaction, sound off by default; 3 = initiates on click, sound on; 4 = initiates on mouse-over, sound on; 5 = initiates on entering viewport, sound on; 6 = initiates on entering viewport, sound off by default; 7 = continuous playback; 8 = initiated by user pausing content, sound on; 9 = initiated by user pausing content, sound off; 10 = initiated by idling (e.g. screensaver), sound on; 11 = initiated by idling, sound off. Repeat the parameter once per value. | |
playbackend | Video | Web, App | integer | The event that causes playback to end: 1 = on video completion or when terminated by user, 2 = on leaving viewport or when terminated by user, 3 = on leaving viewport, continuing as a floating/slider unit until video completion or termination by user. | ||
pos | Video | Web, App | integer | Yes | Ad position on screen, where 0 = unknown, 1 = above the fold, 3 = below the fold, 4 = header, 5 = footer, 6 = sidebar, 7 = full screen. | |
boxingallowed | Video | Web, App | integer | Indicates if letter-boxing of 4:3 content into a 16:9 window is allowed, where 0 = no, 1 = yes. | ||
podId | Video | Web, App | string | Unique identifier indicating that an impression opportunity belongs to an ad pod. Impression opportunities sharing the same podId belong to the same pod. | ||
podDur | Video | Web, App | integer | Yes | Total amount of time in seconds that advertisers may fill in a dynamic ad pod. Refers to the length of the entire ad break, as opposed to the individual slots that make up the pod. | |
podSeq | Video | Web, App | integer | The sequence (position) of the ad pod within a content stream, where -1 = last pod, 0 = any pod, 1 = first pod. | ||
maxSeq | Video | Web, App | integer | Yes | Indicates the maximum number of ads that may be served into a "dynamic" video ad pod, where the precise number of ads is not predetermined by the seller. | |
slotInPod | Video | Web, App | integer | Slot position in the ad pod that the seller can guarantee delivery against, where -1 = last ad in the pod, 0 = any ad in the pod, 1 = first ad in the pod, 2 = first or last ad in the pod. | ||
minCpmPerSec | Video | Web, App | float | Minimum CPM per second. This is a price floor for the "dynamic" portion of a video ad pod, relative to the duration of bids an advertiser may submit. | ||
feed | Audio | Web, App | integer | Yes | Yes | Type of audio feed, where 1 = music streaming service, 2 = FM/AM broadcast, 3 = podcast, 4 = catch-up radio, 5 = web radio, 6 = video game, 7 = text to speech. |
stitched | Audio | Web, App | integer | Yes | Yes | Indicates whether the ad is stitched with the audio content or delivered independently, where 0 = no, 1 = the ad is stitched with the audio content. |
nvol | Audio | Web, App | integer | Yes | Yes | Volume normalization mode: 0 = none, 1 = ad volume average normalized to content, 2 = ad volume peak normalized to content, 3 = ad loudness normalized to content, 4 = custom volume normalization. |
companiontype | Audio | Web, App | integer[] | Yes | Supported companion ad types, where 1 = static resource, 2 = HTML resource, 3 = iframe resource. Repeat the parameter for each value. | |
bidFloor | Video, Audio | Web, App | float | Yes | Yes | Minimum bid for this impression expressed in CPM. |
bidfloorcur | Video, Audio | Web, App | string | Currency for the bid floor, using ISO-4217 alpha codes. Bids are transacted in USD. | ||
cur | Video, Audio | Web, App | string[] | Allowed currencies for bids on this request, using ISO-4217 alpha codes. Bids are transacted in USD. | ||
tmax | Video, Audio | Web, App | integer | Yes | Maximum time in milliseconds the exchange allows for bids to be received, including Internet latency, to avoid timeout. | |
instl | Video, Audio | Web, App | integer | Whether the ad is interstitial, where 0 = not interstitial, 1 = interstitial or full screen. | ||
secure | Video, Audio | Web, App | integer | Flag indicating whether the impression requires secure HTTPS creative assets and markup, where 0 = non-secure, 1 = secure. | ||
ssai | Video, Audio | Web, App | integer | Indicates whether server-side ad insertion is in use and its impact on asset and tracker retrieval, where 0 = status unknown, 1 = all client-side, 2 = assets stitched server-side but tracking fired client-side, 3 = all server-side. | ||
gpId | Video, Audio | Web, App | string | Global Placement ID for the ad slot, passed through to buyers as the impression's placement identifier. |
Preferences & Protection rules:
We support blocklist at advertiser domain and ad category level.
We support minimum bid floor on the adUnitId level.
Please contact the Account Management team at [email protected] to apply the blocklist or minimum bid floor. We recommend keeping it empty by default for the maximum yield.
GDPR compliance:
_If the users are from GDPR or any other privacy-regulated area, it is required to have a CMP with TCF v2.2 in place and enable the below vendor ids (Consent & Legitimate Interest) for optimized performance. We can provide a CMP support if required, but if publisher is using own CMP we are requesting to ensure the following IAB vendors are granted Vendor Consent rights:
| Vendor ID | Vendor Name |
|---|---|
| 58 | 33Across |
| 617 | Onfocus (Adagio) |
| 50 | Adform A/S |
| 793 | Amazon Advertising |
| 32 | Xandr, Inc. |
| 143 | Connatix Native Exchange Inc. |
| 24 | Epsilon |
| 91 | Criteo SA |
| 84 | Eskimi |
| 755 | Google Advertising Products |
| 10 | Index Exchange Inc. |
| 333 | InMobi Pte Ltd |
| 910 | Insticator |
| 131 | ID5 Technology SAS |
| 109 | LoopMe Limited |
| 241 | OneTag Limited |
| 69 | OpenX |
| 76 | Pubmatic, Inc |
| 1043 | TypeA Holdings Ltd |
| 52 | Magnite, Inc |
| 157 | Seedtag Advertising S.L |
| 80 | Sharethrough, Inc |
| 104 | Sonobi, Inc |
| 13 | Sovrn, Inc |
| 23 | Nexxen Inc. |
| 36 | Nexxen Group LLC |
| 45 | Equativ |
| 1126 | Microsoft Advertising |
| 128 | BIDSWITCH GmbH |
| 528 | Kayzen |
| 130 | NextRoll, Inc. |
| 82 | Smaato, Inc. |
| 512 | Verve Group Europe GmbH |
Supported Countries (as of Jan 2026):
| Country Name | Alpha-2 code | Alpha-3 code |
|---|---|---|
| Albania | AL | ALB |
| Argentina | AR | ARG |
| Australia | AU | AUS |
| Austria | AT | AUT |
| Azerbaijan | AZ | AZE |
| Bahrain | BH | BHR |
| Belgium | BE | BEL |
| Bosnia and Herzegovina | BA | BIH |
| Botswana | BW | BWA |
| Brazil | BR | BRA |
| Bulgaria | BG | BGR |
| Canada | CA | CAN |
| Chile | CL | CHL |
| Colombia | CO | COL |
| Costa Rica | CR | CRI |
| Croatia | HR | HRV |
| Cyprus | CY | CYP |
| Czechia | CZ | CZE |
| Denmark | DK | DNK |
| Ecuador | EC | ECU |
| El Salvador | SV | SLV |
| Estonia | EE | EST |
| Finland | FI | FIN |
| France | FR | FRA |
| Georgia | GE | GEO |
| Germany | DE | DEU |
| Greece | GR | GRC |
| Guatemala | GT | GTM |
| Honduras | HN | HND |
| Hong Kong | HK | HKG |
| Hungary | HU | HUN |
| India | IN | IND |
| Indonesia | ID | IDN |
| Ireland | IE | IRL |
| Israel | IL | ISR |
| Italy | IT | ITA |
| Japan | JP | JPN |
| Kuwait | KW | KWT |
| Latvia | LV | LVA |
| Lithuania | LT | LTU |
| Luxembourg | LU | LUX |
| Malaysia | MY | MYS |
| Maldives | MV | MDV |
| Malta | MT | MLT |
| Mexico | MX | MEX |
| Moldova | MD | MDA |
| Mongolia | MN | MNG |
| Morocco | MA | MAR |
| Netherlands | NL | NLD |
| New Zealand | NZ | NZL |
| Norway | NO | NOR |
| Oman | OM | OMN |
| Panama | PA | PAN |
| Peru | PE | PER |
| Philippines | PH | PHL |
| Poland | PL | POL |
| Portugal | PT | PRT |
| Puerto Rico | PR | PRI |
| Qatar | QA | QAT |
| Romania | RO | ROU |
| Saudi Arabia | SA | SAU |
| Serbia | RS | SRB |
| Singapore | SG | SGP |
| Slovakia | SK | SVK |
| Slovenia | SI | SVN |
| South Africa | ZA | ZAF |
| South Korea | KR | KOR |
| Spain | ES | ESP |
| Sweden | SE | SWE |
| Switzerland | CH | CHE |
| Taiwan | TW | TWN |
| Thailand | TH | THA |
| Turkey | TR | TUR |
| United Arab Emirates | AE | ARE |
| United Kingdom | GB | GBR |
| United States | US | USA |
| Uruguay | UY | URY |
| Uzbekistan | UZ | UZB |
| Viet Nam | VN | VNM |
Quality guidance:
We recommend following the quality guidance to improve monetization outcomes.
Additional resources:
Reporting: https://documentation.insticator.com/docs/analytics-date-range
How to establish the appropriate format specifications for CTV bundles. - https://iabtechlab.com/wp-content/uploads/2020/08/IAB-Tech-Lab-OTT-store-assigned-App-Identification-Guidelines-2020.pdf
Updated 27 days ago

