# Build VAST ad tag

Setting up ad tags involves constructing a URL with the relevant tag URL parameters. For further details or implementation questions, feel free to contact <tech@nexx360.io>. The Nexx360 team is available to provide you with ad tags and assist in setting them up for VAST.

## Sample Ad Tag

{% code fullWidth="false" %}

```
https://fast.nexx360.io/vast?tag_id=yqsc1tfj&vf_id=1000&gdpr=1&gdpr_consent=CPhdLUAPhdLUAAKAsAENCmCsAP_AAE7AAAqIJFNd_H__bW9r-f5_aft0eY1P9_r37uQzDhfNk-8F3L_W_LwX52E7NF36tq4KmR4ku1LBIUNlHMHUDUmwaokVryHsak2cpzNKJ7BEknMZOydYGF9vmxtj-QKY7_5_d3bx2D-t_9v239z3z81Xn3d53-_03LCdV5_9Dfn9fR_bc9KPt_58v8v8_____3_e__3_7997BIiAaADgAJYBnwEeAJXAXmAwQBj4DtgHcgPBAeKBIgAA.YAAAAAAAAAAA&w=480&h=360&url=https%3A%2F%2Ftest.nexx360.io%2Fvast%2Fvideojs.html
```

{% endcode %}

{% hint style="info" %}
Example with GAM macros:\
`https://fast.nexx360.io/vast?tag_id=yqsc1tfj&vf_id=1000&gdpr=${GDPR}&gdpr_consent=${GDPR_CONSENT_965}&url=%%REFERRER_URL_ESC_ESC%%&w=640&h=480`

You need to change `tag_id` and `vf_if` with your own IDs.
{% endhint %}

## Tag URL Parameters

{% hint style="info" %}
Either `tag_id` **or** `placement` is required. When only `placement` is provided, Nexx360 resolves it to the placement's configured default tag.
{% endhint %}

<table><thead><tr><th width="192">TagURL Parameter</th><th width="145.33333333333331">Required</th><th>Description</th><th>OpenRTB Field</th></tr></thead><tbody><tr><td>tag_id</td><td>Required*</td><td>The Nexx360 tag_id you get from the UI. <em>Optional if <code>placement</code> is provided.</em></td><td></td></tr><tr><td>placement</td><td>Optional*</td><td>Placement identifier for tracking and reporting. Value is automatically uppercased. Maps to <code>position.nexx360.placement</code> on the bid request. When <code>tag_id</code> is omitted, the placement's configured default tag is used. Example: <code>/vast?placement=digitalturbine&#x26;vf_id=1000&#x26;...</code></td><td>imp.ext.nexx360.placement</td></tr><tr><td>vf_id</td><td>Required</td><td>The OpenRTB 2.5 Imp.Video configuration ID.<br>👉🏼 More info on VAST config <a href="/pages/QPuHC8MMmexJI6CE1Qim">here</a>.</td><td></td></tr><tr><td>gdpr</td><td>Recommended</td><td>Indicates if GDPR applies. <code>0</code> does not apply <code>1</code> applies. This field is required by most buyers where applicable, and is strongly recommended for any EU inventory.</td><td>regs.ext.gdpr</td></tr><tr><td>gdpr_consent</td><td>Recommended</td><td>If GDPR applies (i.e if <code>gdpr=1</code>), this passes the GDPR consent string associated with the user. This field is required by most buyers where applicable, and is strongly recommended for any EU inventory.<br>To be filled with your adserver or Prebid client macro.</td><td>user.ext.consent</td></tr><tr><td>coppa</td><td>Recommanded</td><td></td><td>regs.coppa</td></tr><tr><td>us_privacy</td><td>Recommended</td><td></td><td>regs.ext.us_privacy</td></tr><tr><td>w</td><td>Optional</td><td>Player width, default 640</td><td>video.w</td></tr><tr><td>h</td><td>Optional</td><td>Player height, default 480</td><td>video.h</td></tr><tr><td>min_duration</td><td>Optional</td><td>Can be defined through vf_id also</td><td>video.minduration</td></tr><tr><td>max_duration</td><td>Optional</td><td>Can be defined through vf_id also</td><td>video.maxduration</td></tr><tr><td>min_bitrate</td><td>Optional</td><td>Can be defined through vf_id also</td><td>video.minbitrate</td></tr><tr><td>max_bitrate</td><td>Optional</td><td>Can be defined through vf_id also</td><td>video.maxbitrate</td></tr><tr><td>url</td><td>Required (for Web)</td><td>Web page where the player is - This value needs to be URL encoded to prevent breaking the tag call.</td><td>site.page</td></tr><tr><td>description_url</td><td>Optional</td><td>Google VAST tag description URL - <a href="https://support.google.com/admanager/answer/10678356?hl=en#description_url">https://support.google.com/admanager/answer/10678356?hl=en#description_url</a></td><td></td></tr><tr><td>title</td><td>Optional</td><td>Content Title</td><td>content.title</td></tr><tr><td>custom_params</td><td>Optional</td><td>Formatted this way key1=value1,value2&#x26;key2=value</td><td></td></tr><tr><td>correlator</td><td>Optional</td><td>CacheBuster (same as cb)</td><td></td></tr><tr><td>cb</td><td>Optional</td><td>Cachebuster (same as correlator)</td><td></td></tr><tr><td>ip</td><td>Optional</td><td>Ip adress, mandatory on S2S / CTV</td><td>device.ip</td></tr><tr><td>ua</td><td>Optional</td><td>User Agent, mandatory on S2S / CTV</td><td>device.ua</td></tr><tr><td>did</td><td>Optional</td><td></td><td>device.ifa</td></tr><tr><td>ifa_type</td><td>Optional</td><td>rida for Roku</td><td>device.ext.ifa_type</td></tr><tr><td>gender</td><td>Optional</td><td></td><td>user.gender</td></tr><tr><td>yob</td><td>Optional</td><td></td><td>user.yob</td></tr><tr><td>device_type</td><td>Optional</td><td>1, 2, 3,4, 5, 6 or 7</td><td>device.devicetype</td></tr><tr><td>device_make</td><td>Optional</td><td>Samsung, Apple</td><td>device.make</td></tr><tr><td>device_model</td><td>Optional</td><td>Galaxy, F8332</td><td>device.model</td></tr><tr><td>device_os</td><td>Optional</td><td>IOS, Android, Linux, Windows, etc.</td><td>device.os</td></tr><tr><td>device_osv</td><td>Optional</td><td>70.0.3538.110</td><td>device.osv</td></tr><tr><td>device_h</td><td>Optional</td><td>800</td><td>device.h</td></tr><tr><td>device_w</td><td>Optional</td><td>600</td><td>device.w</td></tr><tr><td>app_bundle</td><td>Optional</td><td>591560124, com.pic.photoeditor</td><td>app.bundle</td></tr><tr><td>app_name</td><td>Optional</td><td>photoeditor</td><td>app.name</td></tr><tr><td>app_domain</td><td>Optional</td><td><a href="https://www.photoeditor.com/">photoeditor.com</a></td><td>app.domain</td></tr><tr><td>app_store_url</td><td>Required (for inApp)</td><td><a href="https://play.google.com/store/apps/details?id=com.pic.photoeditor&#x26;hl=en_US">https://play.google.com/store/apps/details?id=com.pic.photoeditor&#x26;hl=en_US</a></td><td>app.storeurl</td></tr><tr><td>app_ver</td><td>Optional</td><td>3.2</td><td>app.ver</td></tr><tr><td>content_id</td><td>Optional</td><td></td><td>content.id</td></tr><tr><td>content_title</td><td>Optional</td><td>A%20New%20Hope</td><td>content.title</td></tr><tr><td>content_series</td><td>Optional</td><td>The%20Office</td><td>content.series</td></tr><tr><td>content_genre</td><td>Optional</td><td>Comedy</td><td>content.genre</td></tr><tr><td>content_cat</td><td>Optional</td><td>IAB1,IAB2</td><td>content.cat</td></tr><tr><td>content_cattax</td><td>Optional</td><td>1</td><td>content.cattax</td></tr><tr><td>content_episode</td><td>Optional</td><td>11</td><td>content.episode</td></tr><tr><td>content_season</td><td>Optional</td><td>3</td><td>content.season</td></tr><tr><td>content_livestream</td><td>Optional</td><td>1</td><td>content.livestream</td></tr><tr><td>content_prodqual</td><td>Optional</td><td></td><td>content.prodq</td></tr><tr><td>content_context</td><td>Optional</td><td></td><td>content.context</td></tr><tr><td>content_rating</td><td>Optional</td><td></td><td>content.rating</td></tr><tr><td>content_language</td><td>Optional</td><td></td><td>content.language</td></tr><tr><td>content_network</td><td>Optional</td><td></td><td>content.network</td></tr><tr><td>content_channel</td><td>Optional</td><td></td><td>content.channel</td></tr><tr><td>content_producer</td><td>Optional</td><td></td><td>content.producer.name</td></tr><tr><td>schain</td><td>Optional</td><td>Schain Object from macro</td><td>source.schain</td></tr><tr><td>dooh_multiplier</td><td>Optional</td><td></td><td>imp[].qty.multiplier</td></tr><tr><td>dooh_sourcetype</td><td>Optional</td><td>0, 1, 2, 3</td><td>imp[].qty.sourcetype</td></tr><tr><td>dooh_vendor</td><td>Optional</td><td></td><td>imp[].qty.vendor</td></tr><tr><td>dooh_id</td><td>Optional</td><td></td><td>dooh.id</td></tr><tr><td>dooh_name</td><td>Optional</td><td></td><td>dooh.name</td></tr><tr><td>dooh_venuetype</td><td>Optional</td><td></td><td>dooh.venuetype</td></tr><tr><td>dooh_venuetypetax</td><td>Optional</td><td>1, 2, 3, 4, 5, 6</td><td>dooh.venuetypetax</td></tr><tr><td>dooh_domain</td><td>Optional</td><td></td><td>dooh.domain</td></tr><tr><td>delivery_method</td><td>Optional</td><td>'progressive', 'streaming', 'download'</td><td></td></tr><tr><td>device_language</td><td>Optional</td><td>Device language</td><td>device.language</td></tr><tr><td>startdelay</td><td>Optional</td><td>Pre-roll (0), mid-roll (>0), generic mid-roll (-1), generic post-roll (-2)</td><td>video.startdelay</td></tr><tr><td>ic</td><td>Optional</td><td>Inventory categories (comma-separated IAB cats)</td><td>site.cat / app.cat</td></tr><tr><td>channel_name</td><td>Optional</td><td>Channel name</td><td>site.content.channel</td></tr><tr><td>rating</td><td>Optional</td><td>Content rating</td><td>content.rating</td></tr><tr><td>video_language</td><td>Optional</td><td>Video/content language</td><td>content.language</td></tr><tr><td>content_custom_1_param</td><td>Optional</td><td>Custom content field 1</td><td></td></tr><tr><td>content_custom_2_param</td><td>Optional</td><td>Custom content field 2</td><td></td></tr><tr><td>content_custom_3_param</td><td>Optional</td><td>Custom content field 3</td><td></td></tr><tr><td>pod_max_dur</td><td>Optional</td><td>Ad pod maximum duration</td><td>video.podmax</td></tr><tr><td>pod_ad_slots</td><td>Optional</td><td>Number of ad slots in pod</td><td>video.podslots</td></tr><tr><td>criteo_user_id</td><td>Optional</td><td>Criteo user UUID</td><td>user.buyeruid</td></tr><tr><td>cust_params</td><td>Optional</td><td>Alias for custom_params (Lagardere compat)</td><td></td></tr><tr><td>dooh_display_time</td><td>Optional</td><td>DOOH display time in seconds</td><td>imp.qty.ext.display_time</td></tr><tr><td>inventorypartnerdomain</td><td>Optional</td><td>Inventory partner domain</td><td>site.inventorypartnerdomain</td></tr><tr><td>response_format</td><td>Optional</td><td>Set to <code>204</code> for empty HTTP 204 instead of VAST wrapper</td><td></td></tr><tr><td>test</td><td>Optional</td><td>Test mode flag (0 or 1)</td><td>test</td></tr><tr><td>reachtv_venue_id</td><td>Optional</td><td>ReachTV venue ID</td><td></td></tr><tr><td>reachtv_creative_style</td><td>Optional</td><td>ReachTV creative style</td><td></td></tr><tr><td>reachtv_cms</td><td>Optional</td><td>ReachTV CMS</td><td></td></tr><tr><td>reachtv_targeting_inventory</td><td>Optional</td><td>ReachTV targeting inventory</td><td></td></tr><tr><td>nexx360_force_creative_id</td><td>Optional</td><td>Force a specific DSP creative ID (debug)</td><td></td></tr><tr><td>nexx360_force_line_item_id</td><td>Optional</td><td>Force a specific DSP line item ID (debug)</td><td></td></tr><tr><td>nexx360_force_price</td><td>Optional</td><td>Force a specific bid price in the target currency (debug)</td><td></td></tr><tr><td>nexx360_force_creative_price</td><td>Optional</td><td>Force a test creative at a specific CPM price (also enables test creative automatically)</td><td></td></tr></tbody></table>

## Testing

By adding `force_test_creative=1` to the URL, you can force Nexx360 test creative.

Additional testing parameters:

* `test=1` — Enable test mode on the bid request
* `output_debug=1` or `nexx360_debug=1` — Enable debug output
* `force_bids=1` — Force bids for testing purposes
* `nexx360_force_creative_price=10` — Force a test creative at a specific CPM (also enables test creative automatically)

### DSP forced parameters

These parameters can be passed as URL query parameters on the publisher page (in `site.page`) or via the OpenRTB request extension (`ext`). Both hyphen and underscore variants are supported for URL parameters.

| URL parameter      | Underscore variant | Request ext field         | Description                                                      |
| ------------------ | ------------------ | ------------------------- | ---------------------------------------------------------------- |
| `forced-line-item` | `forced_line_item` | `nexx360ForcedLineItemId` | Force a specific DSP line item (bypasses all eligibility checks) |
| `forced-creative`  | `forced_creative`  | `nexx360ForcedCreativeId` | Force a specific creative within the forced line item            |
| `forced-price`     | `forced_price`     | `nexx360ForcedPrice`      | Override the bid price (in the target currency)                  |

**Example URL:**

```
https://example.com/page?forced_line_item=12345&forced_creative=678&forced_price=5.5
```

**Example via request ext:**

```json
{
  "ext": {
    "nexx360ForcedLineItemId": 12345,
    "nexx360ForcedCreativeId": 678,
    "nexx360ForcedPrice": 5.5
  }
}
```

Request ext fields take priority over URL parameters when both are provided.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.nexx360.io/integration-methods/vast-ctv/build-vast-ad-tag.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
