## What is a Creative?

As described in the [Creatives](https://dev.kevel.com/reference/creative) section of this guide, a creative contains detailed information about a specific ad, such as ad size, URL, format, and other fields. When you set up a flight with ads, creatives become an important part of the flight, since this is where the information about the ad is kept.

## API Syntax

When using the Create Creative API, it is important to understand the syntax required to make the request. Because the Kevel API is a RESTful API, there is a specific request format that must be followed to ensure the endpoint can process the request. The format is:

`POST https://api.kevel.co/v1/creative`

Where:

- `POST` - the type of API request being made.
- `https://api.kevel.co` - the URL for the request.
- `v1` - the API version.
- `creative` - the API endpoint being called.

## Creative Parameter Fields

The Create Creative API call is a `POST` call, meaning you must enter a number of body parameters as part of the request before calling the endpoint. These parameters enable you to specify the fields included in the creative. Although there are many different parameters you can add as part of the request, there are several required fields that must be part of the request in order to create the creative. These fields are:

- **AdvertiserId** - The ID of the Advertiser.
- **AdTypeId** - The ad size's ID. More info [here](https://dev.kevel.com/docs/ad-sizes).
- **isActive** - Specifies whether creative is eligible to serve.

## Enabling Creatives To Be Served

In order to have a creative be eligible to serve, you must use the [Creative Flight Maps (Ads)](https://dev.kevel.co/v1.0/reference/creative-flight-map) endpoints. These endpoints will map the creative to a flight's ad.

## Uploading Creatives

You may also choose to upload a creative to Kevel so it is hosted on the Kevel site. To upload a creative, use the [Upload Creative Image](https://dev.kevel.co/v1.0/reference/creative#upload-creative-image) endpoint after the creative has been created.

### Parameters:

- AdvertiserId
  
  int32
  
  required
  
  The ID of the Advertiser.

- AdTypeId
  
  int32
  
  required
  
  The ad size's ID. More info [here](https://dev.kevel.com/docs/ad-sizes).

- IsActive
  
  boolean
  
  required
  
  Specifies whether creative is eligible to serve.

- Title
  
  string
  
  A short description of creative (in UI, it is called 'Friendly Name'). Max 500 characters.

- ImageName
  
  string
  
  The file name as it is stored in our database. It is not needed to create a creative, but it will be passed back in the result view. If the string is manually entered, it will result in a null string.

- Body
  
  string
  
  This is the body text associated with AdType 1 (in UI it's called "Text"). If AdType1 is not being used, pass an empty string: `""`.

- Url
  
  string
  
  The click URL. Max length is 2000 characters. Must not contain leading or trailing spaces.

- Alt
  
  string
  
  Alt text. The maximum length is 500 characters after HTML-encoding the value.

- IsDeleted
  
  boolean
  
  Specifies whether creative is deleted.

- IsHTMLJS
  
  boolean
  
  Specifies whether to override image with HTML or JavaScript ad. If `true` = the `ScriptBody` field should have value.

- ScriptBody
  
  string
  
  If `IsHTMLJS` = `true`, then this field needs to be filled with a HTML/JavaScript ad.

- Metadata
  
  string
  
  Adds custom [metadata](https://dev.adzerk.com/docs/creatives#section-metadata-field) to your creative. Note that this should be a JSON **object** in a string, for example: `{   ...   "Metadata": "{ \"foo\":1234 }" }` The entire Metadata string must be url encoded to support URLs and special characters that can break the JSON object. Maximum character limit of 1000 characters.

- ImageLink
  
  string
  
  The URL of an image hosted remotely. Use if you are serving an image file without uploading it to Kevel's CDN or calling it in the `ScriptBody`

- SaveEmptyCreative
  
  boolean
  
  If set to `true`, this allows you to save or update a creative that contains no `ScriptBody` or `Metadata`. Note that `SaveEmptyCreative` is not a database field on the creative object, but is instead an option when creating or updating creatives. This means that the `SaveEmptyCreative` parameter will always be returned as `null` once a creative has been created.

- IsNoTrack
  
  boolean
  
  Indicates that a creative originating from a third-party (i.e. it uses third-party ad tags) is EFF Do Not Track compliant. Can only be used if DNT is enabled for your account.

- IsNetworkAd
  
  boolean
  
  Indicates that a creative originates from a third-party source (such as an ad network) that will serve multiple ads. (BETA)

- TemplateId
  
  int32
  
  If you are using a creative template, specifies which template to use. IDs can be retrieved from the Creative Template API.

- TemplateValues
  
  string
  
  If you are using a creative template, sets the values for the fields in the creative. Fields must match the TemplateId and the object must be wrapped in a string. For example: `"{\"ctString\":\"A string goes here\",\"ctExternalFile\":\"http://cdn.com/ad.gif\"}"`

## Examples:

### A minimally viable creative. Note that it includes no `Title` or creative contents.

```bash
curl -X POST -H 'X-Adzerk-ApiKey:<API-KEY>' -H "Content-Type:application/json" "https://api.kevel.co/v1/creative" --data-binary '{"AdvertiserId":12345,"AdTypeId":5,"IsActive":true}'
```

### A minimally viable image creative without an uploaded image:

```bash
curl -X POST -H 'X-Adzerk-ApiKey:<API-KEY>' -H "Content-Type:application/json" "https://api.kevel.co/v1/creative" --data-binary '{"AdvertiserId":12345,"AdTypeId":5,"Title":"Image Creative","Url":"http://adzerk.com","Body":"","IsActive":true}'
```

### A minimally viable image creative with an externally hosted image:

```bash
curl -X POST -H 'X-Adzerk-ApiKey:<API-KEY>' -H "Content-Type:application/json" "https://api.kevel.co/v1/creative" --data-binary '{"AdvertiserId":12345,"AdTypeId":5,"Title":"Image Creative","Url":"http://adzerk.com","Body":"","IsActive":true,"ImageLink":"http://cdn.com/ad.gif"}'
```

### A minimally viable JS/HTML creative:

```bash
curl -X POST -H 'X-Adzerk-ApiKey:<API-KEY>' -H "Content-Type:application/json" "https://api.kevel.co/v1/creative" --data-binary '{"AdvertiserId":12345,"AdTypeId":5,"Title":"JS/HTML Creative","IsActive":true,"ScriptBody":"Creative contents","IsHTMLJS":true}'
```

### A minimally viable Static Text Link creative:

```bash
curl -X POST -H 'X-Adzerk-ApiKey:<API-KEY>' -H "Content-Type:application/json" "https://api.kevel.co/v1/creative" --data-binary '{"AdvertiserId":12345,"AdTypeId":20,"IsActive":true,"Title":"Static Text Link example","Url":"http://adzerk.com"}'
```

```json
{
  "Id": 1234,
  "Title": "Adzerk Blue Creative",
  "ImageName": "somelongstring.jpg",
  "Url": "https://adzerk.com",
  "Body": "",
  "AdvertiserId": 123,
  "IsActive": true,
  "AdTypeId": 5,
  "Alt": "Adzerk - Native Ads",
  "IsDeleted": false,
  "IsSync": false,
  "IsHTMLJS": true,
  "ScriptBody": "<a href=\"{{url}}\">Click here to redirect to Url</a>",
  "Metadata": {
    "something": true
  },
  "ImageLink": "https://somecdn.com/somelongstring.jpg",
  "IsNoTrack": true,
  "IsNetworkAd": false
}
```
