Creating a Creative

A creative is created in the account's Creative Library with Create a creative. It is stored with status = ACTIVE and is not assigned to any campaign. No campaign needs to exist yet.

To run the creative, assign it to one or more campaigns. To create many creatives at once, see Bulk creative operations.

Choose the creative type

creative_type is required and cannot be changed after creation. It decides which other fields are required, optional or not allowed:

FieldSTATIC_IMAGEPERFORMANCE_VIDEODISPLAY
urlRequiredRequiredRequired
nameOptionalOptionalRequired
titleRequiredRequiredNot allowed
thumbnail_urlRequiredNot allowedNot allowed
performance_video_dataNot allowedRequiredNot allowed
display_dataNot allowedNot allowedRequired
description, cta, rating, disclaimer, logo, app_installOptionalOptionalNot allowed
creative_cropOptionalNot allowedNot allowed
ai_disclosure, custom_idOptionalOptionalOptional
verification_pixel, viewability_tag, start_date, end_date, activity_scheduleOptionalOptionalOptional

Passing a field that is not allowed for the creative type returns 400. See Creative fields for each field.

Native image creative

  1. Host the image on a publicly accessible URL, or upload it with Upload a local image and use the returned URL. See Managing images.
  2. Create the creative with creative_type = STATIC_IMAGE, url, thumbnail_url and title.
POST /backstage/api/1.0/demo-advertiser/creatives
{
  "creative_type": "STATIC_IMAGE",
  "name": "Summer sale hero",
  "url": "https://www.demo-advertiser.com/summer-sale",
  "thumbnail_url": "https://cdn.demo-advertiser.com/thumbnails/summer-sale.jpg",
  "title": "Summer sale: up to 50% off",
  "description": "Limited-time offer on the full summer collection",
  "cta": {
    "cta_type": "SHOP_NOW"
  }
}
{
  "id": 4321000001,
  "status": "ACTIVE",
  "creative_type": "STATIC_IMAGE",
  "orientation": "HORIZONTAL",
  "ads": null,
  ...
}

To provide different images per aspect ratio (for example a vertical variant), add creative_crop, with the same structure as for campaign items. See Multi-image and vertical ads.

Motion creative

  1. Host the video (MP4) and the fallback image (JPG or PNG) on publicly accessible URLs. See Motion ad assets flow for the upload endpoints.
  2. Create the creative with creative_type = PERFORMANCE_VIDEO, url, title and performance_video_data.
POST /backstage/api/1.0/demo-advertiser/creatives
{
  "creative_type": "PERFORMANCE_VIDEO",
  "name": "Summer sale motion",
  "url": "https://www.demo-advertiser.com/summer-sale",
  "title": "Summer sale: up to 50% off",
  "performance_video_data": {
    "video_url": "https://cdn.demo-advertiser.com/video/summer-sale.mp4",
    "fallback_url": "https://cdn.demo-advertiser.com/video/summer-sale-fallback.jpg"
  }
}
{
  "id": 4321000002,
  "status": "ACTIVE",
  "creative_type": "PERFORMANCE_VIDEO",
  "performance_video_data": {
    "video_url": "https://cdn.demo-advertiser.com/video/summer-sale.mp4",
    "fallback_url": "https://cdn.demo-advertiser.com/video/summer-sale-fallback.jpg",
    "gif_url": null
  },
  ...
}
🚧

No thumbnail_url for motion creatives

The fallback image is passed in performance_video_data.fallback_url. Passing thumbnail_url on a PERFORMANCE_VIDEO creative returns 400.

Display creative

A display creative is either a hosted asset (an image, HTML or video file that Taboola hosts) or a third-party tag.

  1. For a hosted asset, either pass the asset's public HTTPS URL in hosted_display_data.asset_url (Taboola uploads it), or upload it first and pass the returned asset id in hosted_display_data.id. Asset types, size limits and the upload flow are the same as for display campaign items; see Upload display ads by URL.
  2. Create the creative with creative_type = DISPLAY, name, url and display_data. In display_data, pass one of hosted_display_data.id, hosted_display_data.asset_url or ad_tag, plus dimensions.
POST /backstage/api/1.0/demo-advertiser/creatives
{
  "creative_type": "DISPLAY",
  "name": "Summer sale 300x250",
  "url": "https://www.demo-advertiser.com/summer-sale",
  "display_data": {
    "hosted_display_data": {
      "id": 55001
    },
    "dimensions": [
      {
        "width": 300,
        "height": 250
      }
    ]
  }
}
{
  "id": 4321000003,
  "status": "ACTIVE",
  "creative_type": "DISPLAY",
  "display_data": {
    "display_ad_type": "HOSTED_IMAGE",
    "hosted_display_data": {
      "id": 55001,
      "asset_url": "https://cdn.taboola.com/libtrc/static/thumbnails/summer-sale-300x250.jpg",
      "mime_type": "image/jpeg"
    },
    "dimensions": [
      {
        "width": 300,
        "height": 250
      }
    ],
    "responsive_mode": "FIXED"
  },
  ...
}

Passing both hosted_display_data and ad_tag, or neither, returns 400 (Display data must contain either ad tag or hosted asset id). An unknown hosted_display_data.id returns 404. Display creatives require the display ads feature on the account.

After creation

  • The creative is ACTIVE and unassigned. Its ads field is null.
  • If the media needs processing, the status can be CRAWLING for a short time. The creative is read-only while crawling. See Creative statuses.
  • If a required asset could not be processed, the status is NEED_TO_EDIT. Fix the field with Update a creative before assigning.
  • Creatives are always created in the advertiser account. Creating a creative under a network account returns 400.
📘

Declaring AI-generated content

If the creative's media was created or substantially modified by generative AI, pass "ai_disclosure": { "status": "AI_GENERATED" }. The declaration lives on the creative and applies to every ad created from it; it cannot be changed on the ad. See AI Disclosure Object.

📘

Tracking and scheduling

To give every ad created from the creative the same verification pixels, viewability tags or schedule, set verification_pixel, viewability_tag, start_date, end_date and activity_schedule on the creative. Each new ad gets its own copy when the creative is assigned, and can then be changed per ad. See Tracking and scheduling.

📘

See also


Did this page help you?