VAST SSP Integration
Integrating with the RTB-Stack platform using the Video Ad Serving Template (VAST) involves a few steps to ensure that your video ad requests are correctly formatted and successfully processed. This guide provides an overview of the necessary configurations and parameters for VAST SSP integration.
The RTB-Stack platform supports VAST version 3.0 and higher.
VAST URL Configuration
The VAST URL used for sending bid requests for video ads typically looks like this:
Web:
https://your-adx-domain/vast?client=123&endpoint=123&ssp=123&isp=[ISP]&lmt=[LMT]&os=[OS]&dnt=[DNT]&connection=[CONNECTION]&page=[PAGE]&cat=[IAB_CATEGORY]§ioncat=[SEC_IAB_CATEGORY]&pagecat=[PAGE_IAB_CATEGORY]&gdpr=[GDPR]&yob=[YOB]&gender=[GENDER]&width=[WIDTH]&height=[HEIGHT]&skipafter=[SKIP_AFTER]&skip=[SKIP]&skipmin=[SKIP_MIN]&protocols=[PROTOCOLS]&schain=[SCHAIN]&mindur=[MIN_DURATION]&maxdur=[MAX_DURATION]&pubcat=[PUB_IAB_CATEGORY]&contentcat=[CONT_IAB_CATEGORY]&lat=[LAT]&lon=[LON]&consent=[CONSENT]&coppa=[COPPA]&language=[LANG]&user_agent=[UA]&geo_type=[GEOTYPE]&ip=[IP]&rwdd=[REWARDED]&instl=[INTERSTITIAL]&pubid=[PUBLISHER_ID]&domain=[DOMAIN]
InApp:
https://your-adx-domain/vast?client=123&endpoint=123&ssp=123&isp=[ISP]&lmt=[LMT]&ifa=[IFA]&model=[MODEL]&ifa_type=[IFA_TYPE]&os=[OS]&osv=[OSV]&make=[MAKE]&dnt=[DNT]&connection=[CONNECTION]&storeurl=[STOREURL]&appname=[APP_NAME]&bundle=[BUNDLE]&cat=[IAB_CATEGORY]&gdpr=[GDPR]&yob=[YOB]&gender=[GENDER]&network_name=[NETWORK_NAME]&content_id=[CONTENT_ID]&content_rating=[CONTENT_RATING]&channel_name=[CHANNEL_NAME]&width=[WIDTH]&height=[HEIGHT]&skipafter=[SKIP_AFTER]&skip=[SKIP]&skipmin=[SKIP_MIN]&protocols=[PROTOCOLS]&schain=[SCHAIN]&mindur=[MIN_DURATION]&maxdur=[MAX_DURATION]&pubcat=[PUB_IAB_CATEGORY]&contentcat=[CONT_IAB_CATEGORY]&lat=[LAT]&lon=[LON]&consent=[CONSENT]&coppa=[COPPA]&language=[LANG]&user_agent=[UA]&geo_type=[GEOTYPE]&ip=[IP]&rwdd=[REWARDED]&instl=[INTERSTITIAL]&pubid=[PUBLISHER_ID]
Key Components of the VAST URL:
- Client, SSP, and Endpoint Identifiers: These are essential for routing the request correctly.
- Macros: These placeholders (e.g., [ISP], [MODEL], [OS]) should be replaced with real values when the bid request is made.
- Required Parameters: Certain parameters are mandatory, such as domain/bundle, IP and user agent. Ensure these are included to avoid request rejections. A complete list of supported VAST macros by the platform can be found below.
- Expand to see the table with supported VAST macros.
-
Here’s a table of supported VAST macros, their expected values, corresponding OpenRTB fields, and descriptions. Please note that the required ones are highlighted in red. It is required to include either the [BUNDLE] or [DOMAIN] macro in the VAST URL:
PARAMETER |
MACRO |
Expected Value |
OpenRTB |
Description |
domain |
[DOMAIN] |
string |
site.domain |
Domain of the site where the ad will be displayed. |
bundle |
[BUNDLE] |
string |
app.bundle |
Bundle ID of the application. |
ip |
[IP] |
decimal |
device.ip |
IP address of the device. |
user agent |
[UA] |
string |
device.ua |
User agent string of the device. |
width |
[WIDTH] |
int |
imp.video.width |
Width of the video ad in device independent pixels (DIPS). |
height |
[HEIGHT] |
int |
imp.video.height |
Height of the video ad in device independent pixels (DIPS). |
isp |
[ISP] |
string |
device.carrier |
Internet Service Provider name associated with the device. |
lmt |
[LMT] |
1/0 |
device.lmt |
Limit ad tracking flag (1 for limited, 0 for not limited). |
ifa |
[IFA] |
string |
device.ifa |
Identifier for Advertising, a unique device identifier. |
model |
[MODEL] |
string |
device.model |
Model of the device. |
ifa_type |
[IFA_TYPE] |
string |
device.ext.ifatype |
Type of the identifier for advertising. |
os |
[OS] |
string |
device.os |
Operating system of the device. |
osv |
[OSV] |
string |
device.osv |
Operating system version. |
make |
[MAKE] |
string |
device.make |
Manufacturer of the device. |
dnt |
[DNT] |
1/0 |
device.dnt |
Do Not Track flag (1 for DNT enabled, 0 for not enabled). |
connection |
[CONNECTION] |
int |
device.connectiontype |
Type of network connection: 1 – Ethernet, 2 – WIFI, 3 – Unknown cellular, 4 – 2G, 5 – 3G, 6 – 4G, 7 - 5G |
page |
[PAGE] |
string |
site.page |
URL of the page where the ad will be displayed (encoded). |
storeurl |
[STOREURL] |
string |
app.storeurl |
URL of the app store where the app is available. |
appname |
[APP_NAME] |
string |
app.name |
Name of the application. |
cat |
[IAB_CATEGORY] |
comma separated strings |
app.cat or site.cat |
IAB content categories of the app or site. |
gdpr |
[GDPR] |
1/0 |
regs.gdpr |
GDPR compliance flag (1 for GDPR applicable, 0 for not applicable). |
yob |
[YOB] |
int |
user.yob |
Year of birth of the user. |
gender |
[GENDER] |
M / F / O |
user.gender |
Gender of the user (M for male, F for female, O for other). |
network_name |
[NETWORK_NAME] |
string |
content.network.name |
Name of the network providing the content. |
content_id |
[CONTENT_ID] |
int |
content.id |
Unique identifier for the content. |
content_rating |
[CONTENT_RATING] |
string |
content.contentrating |
Rating of the content (e.g., PG, G, R). |
channel_name |
[CHANNEL_NAME] |
string |
content.channel.name |
Name of the channel broadcasting the content. |
skipafter |
[SKIP_AFTER] |
int |
imp.video.skipafter |
Time in seconds after which the ad can be skipped. |
skip |
[SKIP] |
1/0 |
imp.video.skip |
Flag indicating if the ad is skippable (1 for skippable, 0 for not skippable). |
skipmin |
[SKIP_MIN] |
int |
imp.video.skipmin |
Minimum time in seconds before the ad can be skipped. |
protocols |
[PROTOCOLS] |
comma separated ints |
imp.video.protocols |
Supported video protocols (e.g., VAST, VPAID). |
schain |
[SCHAIN] |
string object |
source.ext.schain |
Supply chain object for tracking supply sources. |
mindur |
[MAX_DURATION] |
int |
imp.video.maxduration |
Minimum duration of the video ad in seconds. |
maxdur |
[MIN_DURATION] |
int |
imp.video.minduration |
Maximum duration of the video ad in seconds. |
pubcat |
[PUB_IAB_CATEGORY] |
comma separated strings |
app.publisher.cat or site.publisher.cat |
IAB categories for the publisher of the app or site. |
lat |
[LAT] |
decimal |
device.geo.lat |
Latitude of the device's location. |
lon |
[LON] |
decimal |
device.geo.lon |
Longitude of the device's location. |
consent |
[CONSENT] |
string |
user.consent |
User's consent string for data processing. |
coppa |
[COPPA] |
1/0 |
regs.coppa |
Flag indicating if COPPA regulations apply (1 for yes, 0 for no). |
language |
[LANG] |
string |
device.language |
Language setting of the device. |
geo_type |
[GEOTYPE] |
int |
device.geo.type |
Type of geographical data (e.g., GPS, IP-based). |
rwdd |
[REWARDED] |
1/0 |
imp.rwdd |
1 if the ad is rewarded, otherwise 0. |
instl |
[INTERSTITIAL] |
1/0 |
imp.instl |
1 if the ad is interstitial, otherwise 0. |
pubid |
[PUBLISHER_ID] |
string |
- |
Unique identifier for the publisher. |
pagecat |
[PAGE_IAB_CATEGORY] |
string |
site.pagecat |
IAB category of the page where the ad will be displayed. |
sectioncat |
[SEC_IAB_CATEGORY] |
string |
site.sectioncat |
IAB category of the section of the app or site where the ad will be displayed. |
contentcat |
[CONT_IAB_CATEGORY] |
string |
content.cat |
IAB category of the content within which the ad is displayed. |
All VAST requests to the RTB-Stack platform should be made using the POST
or GET
method. All parameters should be included directly in the request URL. Ensuring that all required parameters are present is essential for the request to be processed correctly. Missing parameters can lead to request rejections or filtering by the platform.
Note: Currently, this integration only supports fixed pricing. Dynamic pricing will be available soon. The price for each VAST URL should be discussed with your account managers.
Handling Invalid Requests
For any requests that are invalid or do not meet the platform's requirements, the RTB-Stack platform will return a JSON response containing a NoBidReason ("nbr") code. These NBR codes help identify the specific reason why a bid was not placed. You can find detailed descriptions and meanings of these NBR codes in the corresponding article.
VAST URL Sample:
https://your-adx-domain/vast?client=test&endpoint=test&ssp=test&isp=TestISP&lmt=1&ifa=test-ifa&model=TestModel&ifa_type=test&os=TestOS&osv=TestVersion&make=TestMake&dnt=0&connection=TestConnection&page=http%3A%2F%2Ftest.vast.com&storeurl=http%3A%2F%2Ftest.store.com&appname=TestApp&bundle=test.bundle&cat=IAB1,IAB2&gdpr=1&yob=2000&gender=M&network_name=TestNetwork&content_id=123&content_rating=PG&channel_name=TestChannel&width=640&height=360&skipafter=10&skip=1&skipmin=5&protocols=3,5,6&schain=test-schain&mindur=10&maxdur=60&pubcat=IAB22&lat=12.34&lon=56.78&consent=T&coppa=0&language=en&user_agent=TestUA&geo_type=1&ip=192.0.2.1&rwdd=1&instl=0&pubid=test-pub&domain=test.domain
Updated on October 23, 2024