has_creative_library: true in its capabilities: ad servers (CM360, Flashtalking), creative management platforms (Celtra), or sales agents with inline creative management.
The model
A creative library organizes assets at three levels:| Level | AdCP equivalent | Examples |
|---|---|---|
| Account | Account (via accounts protocol) | Advertiser in CM360, brand workspace in Celtra |
| Concept | concept_id / concept_name | Flashtalking concept, CM360 creative group, Celtra campaign folder |
| Creative | Creative item with creative_id, format_id, assets | A 300x250 display ad, a 30s video spot |
concept_id to filter and manage them as a group.
Connecting to a library
Establish account access before querying:Browsing creatives
Uselist_creatives to browse the library. Filter by concept, format, status, tags, or date range:
status field reflects the creative’s current state in the library: processing, pending_review, approved, rejected, or archived. See creative review for how status transitions work.
Uploading creatives
Usesync_creatives to upload new creatives or update existing ones. The operation uses upsert semantics — if a creative_id already exists, it updates; otherwise it creates.
list_creatives to see when it transitions from pending_review to approved.
Uploading with assignments
Assign creatives to packages in the same call:Generating tags from library creatives
When you need a serving tag for a creative in the library, usebuild_creative with creative_id instead of a manifest:
creative_id from its library and returns a manifest with the serving tag. The tag format depends on the platform:
- Flashtalking, Celtra: Universal tags that adapt to any environment. No placement context needed.
- CM360: Placement-level tags that require trafficking context. Pass
media_buy_idandpackage_id:
Assigning creatives to campaigns
There are two paths for attaching library creatives to a media buy:Path 1: Creative assignments on the package
Reference library creatives by ID when creating the media buy:sync_creatives or the platform’s own upload flow).
Path 2: Inline creatives on the package
Upload the creative directly with the media buy — no separate sync step:Multi-seller distribution
When you work with multiple sellers, build creatives once and distribute them:- Build on your creative agent:
- Sync to each seller’s library:
sync_creatives on each sales agent separately. Use the same creative_id and concept_id across sellers so you can correlate the same creative and campaign concept across your media buys. See Multi-agent creative orchestration for the full pattern.
- Track approval per seller — each seller reviews independently. Poll
list_creativeson each agent to check status. A creative may beapprovedon one seller andrejectedon another based on their policies.
Tracking approval status
Creative approval operates at two levels: Library level: Thestatus field on each creative in list_creatives — processing, pending_review, approved, rejected, or archived.
Package level: The approval_status on each creative in get_media_buys — pending_review, approved, or rejected with rejection_reason.
A creative can be approved in the library but rejected at the package level if it violates placement-specific policies. Poll both after syncing or submitting a media buy with new creatives.
Dynamic creative optimization (DCO)
Creatives with dynamic content variables appear in the library with avariables array when you request include: { variables: true }. Each variable defines a slot that the ad server fills at serve time:
has_variables: true in list_creatives filters to find DCO creatives. Variable types match common platform patterns: text, color, image, video, number, boolean.
How the ad server uses these variables at serve time (data feeds, targeting rules, optimization algorithms) is outside AdCP’s scope. AdCP models the variable slots, not the optimization logic.
Next steps
- Generative creative — AI-powered creative generation and brief-in-media-buy workflows
- Creative capabilities on sales agents — When the seller manages both media and creative
- Implementing creative agents — Building an AdCP creative agent around your platform
- sync_creatives reference — Upload API details
- list_creatives reference — Query API details with full filtering options