Skip to main content
PUT /api/v2/buyer/campaigns/{campaignId}/creatives/{creativeId} Updates manifest fields (name, brief, format) and manages assets — add new uploads, delete existing assets, reclassify types, or set the primary asset. Sent as multipart/form-data: a metadata JSON part plus files parts for any new_assets. Updates re-sync to media buys the creative is already on.

Request

curl -X PUT https://api.interchange.io/api/v2/buyer/campaigns/cmp_987654321/creatives/cm_abcdef \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F 'metadata={
    "name": "Q2 hero video v2",
    "message": "Tighter 30s cut — stronger CTA",
    "delete_asset_ids": ["asset_001"],
    "new_assets": [
      { "filename": "hero-30s-v2.mp4", "asset_type": "VIDEO", "label": "main_video" }
    ]
  };type=application/json' \
  -F "files=@hero-30s-v2.mp4"

Parameters

The metadata JSON part carries (all optional — omit to preserve):
FieldTypeNotes
namestringUpdated manifest name (max 255)
messagestringUpdated creative brief (max 5000)
template_idstringUpdated ADCP format ID or vendor tag
format_idobject{ agent_url, id, width?, height?, duration_ms? }
format_kindstringUpdated AdCP 3.1 canonical kind. Alternative to format_id
target_format_idsarrayAdditional formats this creative covers. Replaces the existing list
url_assetobjectAdd a single URL asset: { url, url_type }
delete_asset_idsstring[]Asset IDs to remove (max 100)
new_assetsarrayMetadata for newly uploaded files: { filename, asset_type?, label?, slot_asset_id? }
reclassify_assetsarrayChange asset types (max 100): { asset_id, asset_type }
primary_asset_idstringPromote this asset to CREATIVE_SOURCE; demotes the current primary. IMAGE, VIDEO, AUDIO, HTML, or VAST only
frequencyCapsarrayWhen provided, replaces the existing caps list
Form parts: files=@<path> for each entry in new_assets.

Response

{
  "creative_id": "cm_abcdef",
  "campaign_id": "cmp_987654321",
  "name": "Q2 hero video v2",
  "message": "Tighter 30s cut — stronger CTA",
  "template_id": "video_standard",
  "brand_domain": "acme.com",
  "format_id": { "id": "video_standard", "agent_url": "https://agent.example.com" },
  "preview_url": "https://storage.googleapis.com/creatives/cm_abcdef/preview.html",
  "assets": [
    {
      "asset_id": "asset_002",
      "name": "main_video",
      "original_filename": "hero-30s-v2.mp4",
      "asset_type": "VIDEO",
      "content_type": "video/mp4",
      "file_size": 7903112,
      "public_url": "https://cdn.example.com/creatives/cm_abcdef/hero-30s-v2.mp4",
      "asset_source": "USER_UPLOADED",
      "created_at": "2026-06-07T17:10:00Z"
    }
  ],
  "sync_status": { "synced": true, "agent_count": 3, "last_synced_at": "2026-06-07T17:11:00Z" },
  "created_at": "2026-06-07T15:04:00Z",
  "updated_at": "2026-06-07T17:10:00Z"
}
Returns the full updated manifest. target_format_ids and frequencyCaps are list-replace, not merge — send the complete intended list.

Errors

  • 400 VALIDATION_ERROR — a new_assets entry with no matching files part, a delete_asset_ids value not on the manifest, or primary_asset_id pointing at an ineligible asset type.
  • 404 NOT_FOUNDcampaignId or creativeId does not exist or is not visible to the authenticated customer.
See Errors for the full error contract.

Creative overview

Asset types and propagation

Get creative manifest

Read the manifest before editing

Validate creative manifest

Re-validate after format changes

Delete creative manifest

Remove the manifest