POST /api/v2/buyer/advertisers/{advertiserId}/creatives/create
Creates a creative manifest scoped to an advertiser instead of a campaign.
Use it to stage creative you already have before a campaign exists, or to build
a reusable master you assign to several campaigns later. The manifest is stored
with campaign_id unset and advertiser_id set, and it appears in
the advertiser-scoped creative listing.
Everything else about a manifest is the same as the campaign-scoped
Create creative manifest:
same metadata body, same asset handling, same tracking macros, same 50 MB
per-file and 20-file-per-request limits.
An advertiser-level master does not deliver on its own. It reaches a media buy
only after it is assigned to a campaign — see
Advertiser library: assign and unassign.
What differs from the campaign-scoped create
Request
curl
Parameters
advertiserId is a path parameter. The metadata JSON part carries the same
fields as the campaign-scoped create:
A create must satisfy two independent requirements, and a request that misses
either is rejected with
400 VALIDATION_ERROR:
- Content — at least one file,
linked_assetsentry,url_asset/url_assetsentry,text_assetsentry,cardsentry,webhook_asset, or amessage. A request carrying only anamehas none. - Format identity — a canonical
format_kind, either supplied directly or inferred from exactly one renderable primary asset (IMAGE,VIDEO,AUDIO,HTML,VAST). A brief, a click-through URL, and aTEXTasset carry no identity, so a create built only from those must supplyformat_kind.
brandAgentId is accepted in the body for wire compatibility and ignored on
this route — the path advertiserId is authoritative.
Form parts: files=@<path> (one per uploaded asset). Limits: 50 MB per file,
20 files per request.
Response
Returns201 with the same CreativeManifestResponse the campaign-scoped
create returns, except campaign_id is absent and advertiser_id is set:
(advertiser_id, name) already
exists, that manifest is returned with already_exists: true and
ignored_files set. The assets sent with that request are not attached to
it — create under a different name, or use
Update creative manifest
to add assets to the existing one.
Errors
400 VALIDATION_ERROR— no content supplied (name only), no resolvableformat_kind, afilespart with no matchingassets[].filename, more than onemake_primaryasset, a file over 50 MB, an unsupported MIME type, or a non-numericadvertiserId.400 VALIDATION_ERROR— a product-scopedformat_option_ref, which cannot be resolved without a campaign.404 NOT_FOUND—advertiserIddoes not exist or does not belong to the authenticated account. The two cases are deliberately indistinguishable so the response never confirms that an advertiser exists in another account.409 CONFLICT— the name is held by a creative that is still being written (details.reason: name_creation_in_progress) or was left incomplete by an earlier attempt (name_creation_abandoned). Branch ondetails.reason, not the message.
From an agent
Thesave_creative MCP tool reaches this operation: omit creativeId, supply
advertiserId (with no campaignId), a name, content (message, assets,
sourceAssetRef, or clickUrl), and identity (formatKind, unless an asset or
private JPEG/PNG source implies it). Supplying campaignId instead creates the
Creative under that campaign’s advertiser and then attaches it to the campaign.
The tool enforces both requirements before dispatching, so a brief-only call
fails with a named field rather than a generic service error.
save_creative sends assets as hosted URLs or inline base64 data URLs; it has
no multipart files equivalent. A finalized private JPEG/PNG upload is the
exception: pass its opaque scope3-asset://v1/... reference as
sourceAssetRef, and Interchange re-verifies and copies the bytes into the
governed Creative store. The manifest keeps only the durable asset and a
one-way source fingerprint, never the private reference, object path, or a
signed URL. Retrying the same source and name returns the same Creative and
completes an interrupted campaign attachment. Package and media-buy attachment
remain separate workflows.
For ordinary assets, if the manifest comes back with fewer assets than the
call requested, the tool says so in its response text and sets
assetAttachWarning, assetsRequested, and assetsAttached — the creative
was saved, but the missing media is not on it. Re-send it as a hosted url
rather than assuming the creative is complete.
Related
Create creative manifest
The campaign-scoped create
Creative overview
Manifest fields, the advertiser library, assign and unassign