## Overview

At this time, you must generate VAST ad code yourself. VAST ad tags are in the format of a URL that will be called by a video player.

## Generating the Request Object

To construct the code, you must generate a JSON **request** object that contains one or more **placements**.

**Request:**

| Key   | Required? | Description                                                                 |
|-------|-----------|-----------------------------------------------------------------------------|
| `p`   | yes       | Array of one or more Placement objects (see below)                        |
| `ukey`| no        | A UserDB user key                                                         |
| `ip`  | no        | An IP address (overrides the remote IP of the request)                   |
| `ref` | no        | A referrer URL (overrides the Referer header of the request)             |
| `url` | no        | The URL to use as the current page URL when selecting an ad              |
| `t`   | no        | The UNIX epoch timestamp to use when selecting an ad                      |
| `kw`  | no        | Keywords for the request                                                  |
| `nt`  | no        | Do Not Track. If set to 1, DNT is enabled                                |
| `b`   | no        | A list of blocked items                                                   |
| `bf`  | no        | Bot Filtering. If set to 1, bot filtering is enabled                     |

**Placement:**

| Property | Required? | Decision                                                                    |
|----------|-----------|----------------------------------------------------------------------------|
| `t`      | yes       | An adType ID, or an array of adType IDs                                   |
| `n`      | yes       | The numeric network id to use when selecting an ad                       |
| `s`      | yes       | The numeric site id to use when selecting an ad                          |
| `z`      | no        | Zero or more zone ids to use when selecting an ad                        |
| `c`      | no        | A numeric campaign id; if specified, only consider ads in that campaign  |
| `f`      | no        | A numeric flight id; if specified, only consider ads in that flight      |
| `a`      | no        | A numeric ad (flight-creative map) id; if specified, only serve that ad if possible |
| `u`      | no        | A URL that should be used as the click-through target for the ad         |
| `p`      | no        | A hash of key/value pairs used for [Custom Targeting](https://dev.kevel.co/v1.0/docs/custom-targeting) |
| `ck`     | no        | A hash of key/value pairs used with [ContentDB](https://dev.kevel.co/v1.0/docs/contentdb-1) |

An example of a constructed request object with one placement:

`{"p":[{"n":1234,"t":1234,"s":123456}]}`

## Generating the VAST URL

Once you have a request object, you can generate the URL by urlencoding the request object and passing it to the VAST endpoint `http://e-<networkId>.adzerk.net/vast3` using the querystring `?r=`.

For example,

`{"p":[{"n":1234,"t":1234,"s":123456}]}`

Is urlencoded as:

`%7B%22p%22%3A%5B%7B%22n%22%3A1234%2C%22t%22%3A1234%2C%22s%22%3A123456%7D%5D%7D%0A`

The URL of the ad code becomes:

`https://e-1234.adzerk.net/vast3?r=%7B%22p%22%3A%5B%7B%22n%22%3A1234%2C%22t%22%3A1234%2C%22s%22%3A123456%7D%5D%7D%0A`
