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
Parameters
Themetadata JSON part carries (all optional — omit to preserve):
| Field | Type | Notes |
|---|---|---|
name | string | Updated manifest name (max 255) |
message | string | Updated creative brief (max 5000) |
template_id | string | Updated ADCP format ID or vendor tag |
format_id | object | { agent_url, id, width?, height?, duration_ms? } |
format_kind | string | Updated AdCP 3.1 canonical kind. Alternative to format_id |
target_format_ids | array | Additional formats this creative covers. Replaces the existing list |
url_asset | object | Add a single URL asset: { url, url_type } |
delete_asset_ids | string[] | Asset IDs to remove (max 100) |
new_assets | array | Metadata for newly uploaded files: { filename, asset_type?, label?, slot_asset_id? } |
reclassify_assets | array | Change asset types (max 100): { asset_id, asset_type } |
primary_asset_id | string | Promote this asset to CREATIVE_SOURCE; demotes the current primary. IMAGE, VIDEO, AUDIO, HTML, or VAST only |
frequencyCaps | array | When provided, replaces the existing caps list |
files=@<path> for each entry in new_assets.
Response
target_format_ids and frequencyCaps are list-replace, not merge — send the complete intended list.
Errors
400 VALIDATION_ERROR— anew_assetsentry with no matchingfilespart, adelete_asset_idsvalue not on the manifest, orprimary_asset_idpointing at an ineligible asset type.404 NOT_FOUND—campaignIdorcreativeIddoes not exist or is not visible to the authenticated account.
Related
Creative overview
Asset types and propagation
Get creative manifest
Read the manifest before editing
Delete creative manifest
Remove the manifest