---
updatedAt: 2026-10-02T00:25:15.000Z
agentTools:
  projectIndex: https://dev.kevel.com/llms.txt
---

# Create Creative

This creates a new creative under an advertiser.

## 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.com/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.com/reference/upload-creative-image) endpoint after the creative has been created.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "management-api-2",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.kevel.co"
    }
  ],
  "components": {
    "securitySchemes": {
      "sec0": {
        "type": "apiKey",
        "name": "X-Adzerk-ApiKey",
        "in": "header"
      }
    }
  },
  "security": [
    {
      "sec0": []
    }
  ],
  "paths": {
    "/v1/creative": {
      "post": {
        "summary": "Create Creative",
        "description": "This creates a new creative under an advertiser.",
        "operationId": "create-creative",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "AdvertiserId",
                  "AdTypeId",
                  "IsActive"
                ],
                "properties": {
                  "AdvertiserId": {
                    "type": "integer",
                    "description": "The ID of the Advertiser.",
                    "format": "int32"
                  },
                  "AdTypeId": {
                    "type": "integer",
                    "description": "The ad size's ID. More info [here](https://dev.kevel.com/docs/ad-sizes).",
                    "format": "int32"
                  },
                  "IsActive": {
                    "type": "boolean",
                    "description": "Specifies whether creative is eligible to serve."
                  },
                  "Title": {
                    "type": "string",
                    "description": "A short description of creative (in UI, it is called 'Friendly Name'). Max 500 characters."
                  },
                  "ImageName": {
                    "type": "string",
                    "description": "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": {
                    "type": "string",
                    "description": "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": {
                    "type": "string",
                    "description": "The click URL. Max length is 2000 characters. Must not contain leading or trailing spaces."
                  },
                  "Alt": {
                    "type": "string",
                    "description": "Alt text. The maximum length is 500 characters after HTML-encoding the value."
                  },
                  "IsDeleted": {
                    "type": "boolean",
                    "description": "Specifies whether creative is deleted."
                  },
                  "IsHTMLJS": {
                    "type": "boolean",
                    "description": "Specifies whether to override image with HTML or JavaScript ad. If `true` = the `ScriptBody` field should have value."
                  },
                  "ScriptBody": {
                    "type": "string",
                    "description": "If `IsHTMLJS` = `true`, then this field needs to be filled with a HTML/JavaScript ad."
                  },
                  "Metadata": {
                    "type": "string",
                    "description": "Adds custom [metadata](https://dev.kevel.com/docs/creatives#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": {
                    "type": "string",
                    "description": "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": {
                    "type": "boolean",
                    "description": "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": {
                    "type": "boolean",
                    "description": "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": {
                    "type": "boolean",
                    "description": "Indicates that a creative originates from a third-party source (such as an ad network) that will serve multiple ads. (BETA)"
                  },
                  "TemplateId": {
                    "type": "integer",
                    "description": "If you are using a creative template, specifies which template to use. IDs can be retrieved from the Creative Template API.",
                    "format": "int32"
                  },
                  "TemplateValues": {
                    "type": "string",
                    "description": "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": {
                "JSON": {
                  "value": {
                    "AdvertiserId": 123,
                    "Title": "Adzerk Blue Creative",
                    "Body": "",
                    "AdTypeId": 5,
                    "Url": "https://adzerk.com",
                    "IsDeleted": false,
                    "Alt": "Adzerk - Native Ads",
                    "IsActive": true,
                    "Metadata": "JSON object as string",
                    "ImageLink": "https://somecdn.com/somelongstring.jpg",
                    "IsNoTrack": true,
                    "IsNetworkAd": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"Id\":1234,\n  \"Title\":\"Adzerk Blue Creative\",\n  \"ImageName\":\"somelongstring.jpg\",\n  \"Url\":\"https://adzerk.com\",\n  \"Body\":\"\",\n  \"AdvertiserId\":123,\n  \"IsActive\":true,\n  \"AdTypeId\":5,\n  \"Alt\":\"Adzerk - Native Ads\",\n  \"IsDeleted\":false,\n  \"IsSync\":false,\n  \"IsHTMLJS\": true,\n  \"ScriptBody\":\"<a href=\\\"{{url}}\\\">Click here to redirect to Url</a>\",\n  \"Metadata\":\"{\\\"something\\\":true}\",\n  \"ImageLink\":\"https://somecdn.com/somelongstring.jpg\",\n  \"IsNoTrack\":true,\n  \"IsNetworkAd\":false\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "Id": {
                      "type": "integer",
                      "example": 1234,
                      "default": 0
                    },
                    "Title": {
                      "type": "string",
                      "example": "Adzerk Blue Creative"
                    },
                    "ImageName": {
                      "type": "string",
                      "example": "somelongstring.jpg"
                    },
                    "Url": {
                      "type": "string",
                      "example": "https://adzerk.com"
                    },
                    "Body": {
                      "type": "string",
                      "example": ""
                    },
                    "AdvertiserId": {
                      "type": "integer",
                      "example": 123,
                      "default": 0
                    },
                    "IsActive": {
                      "type": "boolean",
                      "example": true,
                      "default": true
                    },
                    "AdTypeId": {
                      "type": "integer",
                      "example": 5,
                      "default": 0
                    },
                    "Alt": {
                      "type": "string",
                      "example": "Adzerk - Native Ads"
                    },
                    "IsDeleted": {
                      "type": "boolean",
                      "example": false,
                      "default": true
                    },
                    "IsSync": {
                      "type": "boolean",
                      "example": false,
                      "default": true
                    },
                    "IsHTMLJS": {
                      "type": "boolean",
                      "example": true,
                      "default": true
                    },
                    "ScriptBody": {
                      "type": "string",
                      "example": "<a href=\"{{url}}\">Click here to redirect to Url</a>"
                    },
                    "Metadata": {
                      "type": "string",
                      "example": "{\"something\":true}"
                    },
                    "ImageLink": {
                      "type": "string",
                      "example": "https://somecdn.com/somelongstring.jpg"
                    },
                    "IsNoTrack": {
                      "type": "boolean",
                      "example": true,
                      "default": true
                    },
                    "IsNetworkAd": {
                      "type": "boolean",
                      "example": false,
                      "default": true
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "x-readme": {
          "code-samples": [
            {
              "language": "curl",
              "code": "## A minimally viable creative. Note that it includes no `Title` or creative contents.\ncurl -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}'\n\n## A minimally viable image creative without an uploaded image (to upload an image, see \"Upload Creative Image\"): \ncurl -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}'\n\n## A minimally viable image creative with an externally hosted image: \ncurl -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\"}'\n\n## A minimally viable JS/HTML creative:\ncurl -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}'\n\n## A minimally viable Static Text Link creative:\ncurl -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\"}'"
            },
            {
              "language": "javascript",
              "code": "const Adzerk = require('@adzerk/management-sdk');\nconst apiKey = process.env.ADZERK_API_KEY;\n\nasync function createCreative() {\n  let specifications = await Adzerk.fetchSpecifications();\n  let client = await Adzerk.buildClient({apiKey, specifications});\n\n  let creative = await client.run(\"creative\", \"create\", {\n    title: \"Creative Name\",\n    isActive: true,\n    advertiserId: 12345,\n    adTypeId: 5,\n    url: \"https://www.adzerk.com\",\n    isHtmljs: true,\n    scriptBody: \"<script>console.log('hello world!')</script>\",\n  });\n\n  console.log(creative);\n}\n\ncreateCreative();"
            },
            {
              "language": "ruby",
              "code": "require \"adzerk\"\n\ndef create_creative()\n    client = Adzerk::Client.new(ENV[\"ADZERK_API_KEY\"])\n    data = {\n        title: \"Creative Name\",\n        is_active: true,\n        advertiser_id: 12345,\n        ad_type_id: 5,\n        url: \"https://www.adzerk.com\",\n    }\n    pp client.creatives.create(data)\nend\ncreate_creative()"
            }
          ],
          "samples-languages": [
            "curl",
            "javascript",
            "ruby"
          ]
        }
      }
    }
  },
  "x-readme": {
    "headers": [
      {
        "key": "X-Adzerk-Sdk-Version",
        "value": "Readme.io:ManagementAPI2"
      }
    ],
    "explorer-enabled": false,
    "proxy-enabled": true
  },
  "x-readme-fauxas": true
}
```