Skip to main content

Overview

A Creative in v2 is a creative manifest — a structured bundle containing uploaded assets (images, video, HTML, VAST tags), an optional brief, brand info auto-resolved from the campaign’s advertiser, and a target ADCP format. Manifests are nested under campaigns and propagate to media buys at execution time.
New in v2: creatives are no longer stored at the advertiser level and referenced by campaigns. They are created directly under a campaign at /api/buyer/campaigns/:campaignId/creatives/.... The model is also fully manifest-aligned with the AdCP creative manifest spec.
Field-name exception: Creative manifests use snake_case field names (creative_id, campaign_id, format_id, template_id, brand_domain, target_format_ids) because they are passed through verbatim to the ADCP wire-format. This is an intentional exception to v2’s general camelCase convention — see the migration guide for context.

Why this changed

V1 treated creatives as advertiser-level assets reused across campaigns. V2 tightens the model so:
  • Each campaign sees exactly the formats its selected products require (creativeFormats.required)
  • Asset uploads happen in a single multipart request with the manifest metadata
  • Format and template auto-detection runs against the campaign’s product mix
  • Tracking macros and brand info are resolved from the campaign + advertiser context
The result is fewer mismatches between selected products and uploaded creatives, and a cleaner per-campaign creative library.

Key fields

FieldTypeNotes
creative_idstringManifest ID
campaign_idstringOwning campaign
namestringHuman-readable name
messagestringOptional creative brief / direction text
template_idstringCreative template (display_image, display_html, video_standard, vendor tags, etc.)
format_idobject{ agent_url, id } — ADCP format reference
target_format_idsarrayFormats from campaign products this manifest can serve
brand_domainstringAuto-resolved from the campaign’s advertiser
assetsarrayUploaded assets (id, type, MIME, public URL, source)
preview_urlstringURL to processed HTML preview hosted on GCS
trackingobjectAuto-generated impression and click tracker URLs
sync_statusobject{ synced, agent_count, last_synced_at } across sales agents
frequencyCapsarrayBuyer-defined caps on this creative

Asset types

V2 assets cover the full ADCP type spectrum:
TypePurpose
IMAGEJPEG, PNG, GIF, WebP, SVG
VIDEOMP4, WebM, QuickTime
AUDIOMP3, WAV, OGG
HTMLInline content or hosted URL
JAVASCRIPT / CSSCompanion script and style assets
VASTVAST tag (URL or inline XML) — renamed from v1’s VIDEO_VAST
URLClickthrough, tracker pixel, or VAST URL with explicit url_type
FONT / LOGO / DOCUMENT / TEXTSupporting assets
URL assets are typed via url_type: CLICKTHROUGH, TRACKER_PIXEL, TRACKER_SCRIPT, or VAST. Webhook assets enable server-side dynamic content rendering (DCO) with HMAC or API-key signing.

Lifecycle

1

Discover required formats

GET /api/buyer/campaigns/:campaignId/creatives/formats returns available templates and the deduplicated campaign_format_ids from selected products. Each product’s required formats are also broken out under campaign_products.
2

Create the manifest

POST a multipart request with files + JSON metadata. Scope3 auto-classifies assets, processes HTML to rewrite local references to CDN URLs, inserts ADCP macros, and generates a preview.
3

Validate coverage

GET /api/buyer/campaigns/:id returns creativeFormats: { required, covered, missing }. Upload more manifests until missing is empty.
4

Propagate to media buys

On campaign execute, the manifests sync to each sales agent for the formats they support. Sync status is reflected in sync_status on each manifest.
5

Update or replace

PUT the manifest with new files, deletions, or reclassifications. Updates flow back to media buys.

Common operations

Create a creative manifest (multipart)

The endpoint accepts a metadata JSON field plus files[] form fields:
curl -X POST https://api.agentic.scope3.com/api/buyer/campaigns/cmp_987654321/creatives/create \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F 'metadata={
    "name": "Q2 hero video",
    "message": "30s product reveal — premium tone, 2-second hook",
    "template_id": "video_standard",
    "url_asset": { "url": "https://acme.com/promo", "url_type": "CLICKTHROUGH" },
    "assets": [
      { "filename": "hero-30s.mp4", "asset_type": "VIDEO", "label": "main_video" }
    ]
  };type=application/json' \
  -F "files=@hero-30s.mp4" \
  -F "files=@companion-banner.png"
Creative creation is a single multipart request: a JSON metadata field plus zero or more files parts (-F "files=@..."). The server accepts up to the configured MAX_FILE_COUNT files per request and pairs each file with the matching assets[].filename in the metadata.
File limits: 50 MB per file, 20 files per request. Allowed MIME types include images (JPEG, PNG, GIF, WebP, SVG, HEIC), video (MP4, WebM, QuickTime), audio (MP3, WAV, OGG), HTML/CSS/JS, fonts, PDF, and XML/markdown.

List manifests

curl "https://api.agentic.scope3.com/api/buyer/campaigns/cmp_987654321/creatives?take=50" \
  -H "Authorization: Bearer $SCOPE3_API_KEY"
Filters: search, includeFrequencyCaps. Pagination: take, skip.

Get / update / delete

curl https://api.agentic.scope3.com/api/buyer/campaigns/cmp_987654321/creatives/cm_abcdef \
  -H "Authorization: Bearer $SCOPE3_API_KEY"

curl -X PUT https://api.agentic.scope3.com/api/buyer/campaigns/cmp_987654321/creatives/cm_abcdef \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -F 'metadata={
    "delete_asset_ids": ["asset_old"],
    "new_assets": [{ "filename": "v2.mp4", "asset_type": "VIDEO" }]
  };type=application/json' \
  -F "files=@v2.mp4"

curl -X DELETE https://api.agentic.scope3.com/api/buyer/campaigns/cmp_987654321/creatives/cm_abcdef \
  -H "Authorization: Bearer $SCOPE3_API_KEY"

Render an ADCP preview

curl -X POST https://api.agentic.scope3.com/api/buyer/campaigns/cmp_987654321/creatives/cm_abcdef/preview \
  -H "Authorization: Bearer $SCOPE3_API_KEY"
Calls the ADCP agent’s preview_creative tool to render at native format dimensions. Useful for validation before publisher submission.

Format coverage on the campaign

When you GET /api/buyer/campaigns/:id, the response includes:
"creativeFormats": {
  "required": [{ "agent_url": "...", "id": "video_standard" }],
  "covered":  [{ "agent_url": "...", "id": "video_standard" }],
  "missing":  []
}
missing is the prompt to upload more creatives. Coverage is computed against the formats every selected product needs.

Tracking macros

When the format supports it, Scope3 auto-injects:
  • An impression tracker URL as a TRACKER_PIXEL URL asset
  • A click tracker URL that wraps the original clickthrough — the original is preserved in the rurl query parameter
ADCP universal macros ({CAMPAIGN_ID}, {DEVICE_TYPE}, {COUNTRY}, etc.) are filled at impression time. The tracking.supported_macros array on the manifest response lists which macros the format supports.
Only one clickthrough URL per manifest. If multiple URL assets are flagged url_type: CLICKTHROUGH, manifest creation fails.

Format catalog

To inspect formats required by the campaign’s selected products:
EndpointPurpose
GET /api/buyer/campaigns/:campaignId/creatives/formatsList the deduplicated format IDs required by every product in the campaign and the available templates.
This endpoint reflects only formats relevant to the campaign — there is no cross-tenant top-level format registry in v2.

Propagation to media buys

At campaign execute, the manifest is synced to each sales agent that supports its format_id. The same manifest can serve multiple media buys; later updates re-sync. Use sync_status to confirm publishers have received the latest version.

Campaign

Owning campaign — formats come from its products

Brand

Brand info auto-resolved from the advertiser