POST /api/v2/buyer/campaigns/{campaignId}/creative-collections/{collectionId}/attach.
Campaign-scoped collections under /campaigns/{campaignId}/creative-collections
keep their existing behaviour and are not described here.
Operations
All paths are under/api/v2/buyer/advertisers/{advertiserId}. The advertiser
must belong to the authenticated customer; otherwise the request returns
NOT_FOUND.
Every response that changes a collection returns the collection as it stands
after the change, read inside the same transaction, and member changes also
return
added_count or removed_count.
The revision check
Each collection carriesupdated_at. Update and member operations require you
to send that value back as expected_updated_at. If the collection changed
since you read it, the request returns 409 CONFLICT and nothing changes; read
the collection again and retry with the new value. This keeps two people or
agents from silently overwriting each other’s work.
Members
Members are saved creatives owned by the same advertiser. Every id inmember_ids must name an active creative of that advertiser; if any id does not,
the request returns 400 VALIDATION_ERROR and no members are added. Adding a
creative that is already a member is a no-op, and removing an id that is not a
member is a no-op that leaves updated_at unchanged. A creative can belong to a
collection whether or not it is assigned to a campaign.
Clearing a description
Send"description": null on the update to clear it. Omitting description
leaves it as it is.
From an agent
In the v3 tool surface the same operations aresearch and get with
kind: "creative_collection" and an advertiserId, and
save_creative_collection with advertiserId, the collectionId, and the
returned updatedAt as expectedUpdatedAt. Advertiser writes accept name,
description (null clears it), and one addMemberIds or removeMemberIds
list per call. Campaign-only fields such as role, syncPolicy, and
attachToCampaign are refused for advertiser collections.