Updating a Creative

Update a creative changes a creative in the Creative Library and, with it, every ad created from that creative, in every campaign it is assigned to. This is the "edit once, everywhere" behavior of the library.

Partial updates

Submit only the fields to change, in a POST or PUT request. Fields that are omitted or null remain unchanged.

PUT /backstage/api/1.0/demo-advertiser/creatives/4321000001
{
  "thumbnail_url": "https://cdn.demo-advertiser.com/thumbnails/summer-sale-v2.jpg",
  "title": "Summer sale: up to 60% off"
}
{
  "id": 4321000001,
  "status": "ACTIVE",
  "thumbnail_url": "https://cdn.demo-advertiser.com/thumbnails/summer-sale-v2.jpg",
  "title": "Summer sale: up to 60% off",
  "ads": {
    "ads": [
      {
        "id": 8765000101,
        "campaign_id": 33,
        "campaign_name": "Summer sale - US",
        "creative_id": 4321000001
      },
      {
        "id": 8765000270,
        "campaign_id": 270,
        "campaign_name": "Summer sale - UK",
        "creative_id": 4321000001
      }
    ]
  },
  ...
}

Both ads listed in ads.ads now carry the new image and title.

📘

Guidelines

  1. A request that changes nothing returns 400 (No changes were made to the creative). Re-sending the current values counts as no change.
  2. creative_type cannot be changed. app_install can be set on creation only. id, account_id, status, orientation, create_time_in_utc and ads are read-only.
  3. A creative in CRAWLING status is read-only. Poll it until it returns to ACTIVE, then retry. See Creative statuses.
  4. To update many creatives in one request, use Bulk upsert creatives.

What happens to the ads

  • Every ad created from the creative that is not stopped is updated with the new values.
  • Updated ads may need to be reviewed again. Until approved, they can stop serving temporarily.
  • An ad whose url was changed individually keeps its own url, and the other fields are still updated from the creative. If the update changes the creative's landing page, every ad's url is replaced with the creative's new url.
  • Changes to verification_pixel, viewability_tag, start_date, end_date and activity_schedule apply only to ads created after the update. Existing ads keep their values. See Tracking and scheduling.
🚧

To change one ad only, edit the ad, not the creative

Editing the creative reaches all campaigns. To change a single campaign's ad, update that ad with Update a campaign item. Changing the content of an ad whose creative is shared with other ads detaches that ad from the creative. See Change a single ad.

Creating a variation instead of updating

To keep the current ads running unchanged and run a changed version alongside them, do not update the creative. Instead, create a new creative with the changed content and assign it to the campaigns that should run the variation. There is no separate "duplicate" endpoint: duplicating is creating a new creative with the same fields.

Creative consolidation

The library does not keep 2 identical creatives. Identity is based on the creative's content (image, title, description, CTA, logo, and similar fields) and on its landing page. name and custom_id are not part of it.

The landing page is the final page the url leads to, not the raw url. URLs that differ only by a tracking or redirect wrapper and lead to the same page count as the same landing page.

  • On create: if an identical creative already exists, no new creative is created. The existing creative is returned, with creative_consolidation.matched_creative_id set to its ID.
  • On update: if the update makes the creative identical to another existing creative, the updated creative is merged into the existing one: its ads are moved to the existing creative and the updated creative is stopped. The response returns the existing creative, so the id in the response can differ from the id in the request path.
{
  "id": 4321000007,
  "status": "ACTIVE",
  "title": "Summer sale: up to 60% off",
  "creative_consolidation": {
    "source_creative_id": 4321000001,
    "matched_creative_id": 4321000007,
    "reassigned_ad_ids": [
      8765000101,
      8765000270
    ]
  },
  ...
}

Integrations that store creative IDs should read the id from the response after every create or update, rather than assume it is unchanged. See Creative fields.

📘

See also


Did this page help you?