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/v2/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 }legacy (v1 named-format) format reference. Mutually exclusive with format_kind.
format_kindstringCanonical (AdCP 3.1) format selector — a bare enum (image, video_vast, video_hosted, …) with no agent_url. Video/audio duration rides in params (duration_ms_exact / duration_ms_range), not on format_id. See the glossary.
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/v2/buyer/campaigns/:campaignId/creatives/templates returns available templates and the deduplicated campaign_format_ids from selected products. Each product’s required formats are also broken out under campaign_products. The full registry of formats across agents is available at GET /api/v2/buyer/formats.
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/v2/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.

Conversational creative sessions

Creative sessions are the agent-native path for buyers who want to generate, compare, refine, validate, and save creatives without handling manifest details directly. The intended user flow is:
  1. Idea — the buyer describes the channel, audience, goal, and source assets.
  2. Draft gallery — a creative adapter returns multiple draft variants for human review.
  3. Refine — the buyer gives natural-language feedback like “make the book more prominent” or “less busy.”
  4. Evaluate — draft checks are advisory; final hard/blocking checks stop finalization.
  5. Finalize — the approved leaf is saved as a campaign creative manifest.
Use POST /api/v2/buyer/campaigns/:campaignId/creative-sessions to start a session. The response is designed for MCPUI and includes the draft variants[], asset_store, renderer_capabilities, rendering_model, staged evaluator badges, and format_renders[] once a final is approved.
Creative sessions are review workflows. They do not replace campaign creative manifests. Finalization is the transition point where a selected draft/refinement becomes a normal campaign creative with creative_id, format_id, assets, preview, and sync status.

Asset lifecycle

Creative production uses three related but distinct asset layers:
LayerWhat it isStored asHow to use it
Source assetBuyer-supplied input such as a book cover, product photo, logo, DAM URL, catalog image, audio file, or reference imagesource_asset and asset_store.assets[] inside the creative sessionTreat as raw input. Preserve locked assets exactly; track role, provenance, rights, checksum, dimensions, and render crop/mask metadata when available.
Draft variantA generated or composited creative direction for reviewvariants[] with preview URL, quality, status, lineage, and evaluator checksUse for exploration. Drafts may be discarded, branched, or refined. They are not campaign creatives until finalized.
Final creativeThe approved execution saved to the campaignCreative manifest under /campaigns/:campaignId/creativesUse for delivery. It carries the final render, linked assets, text assets, ADCP format ID, tracking, preview, and sync status.
For locked product, package, logo, or book-cover assets:
  • Set locked_asset: true, can_transform: false, role: "product" (or the closest role), and specific preservation_notes.
  • Keep provenance separate from rights. source: "upload" or source: "dam" says where the asset came from; rights.status says whether it is cleared.
  • rights.status: "unknown" is a non-blocking review warning for final approval. restricted or expired blocks finalization.
  • If the source image includes studio background or whitespace, provide render_crop, subject_bounds, or a transparent cutout/mask when available. Cropping is a preservation-safe fallback; a real cutout produces cleaner final compositions.

Seller-specific versions

The campaign’s selected products determine which seller formats need coverage. Use the creative template/format endpoints before and after finalization:
  1. GET /api/v2/buyer/campaigns/:campaignId/creatives/templates shows required campaign formats and available templates.
  2. Start a creative session against the best matching creative adapter and target format.
  3. Finalize the chosen direction into a creative manifest.
  4. Re-check creativeFormats on GET /api/v2/buyer/campaigns/:campaignId.
  5. If creativeFormats.missing still contains seller formats, generate or adapt seller-specific manifests for those formats.
Seller-specific versions should keep a common creative direction and source-asset lineage, but each saved manifest must match the actual seller format it covers. For example, the same “Wimbledon book hero” direction may need separate square image, portrait story, audio, video, or HTML executions depending on the selected products. format_renders[] is the review surface for publisher/format previews. It helps a buyer inspect what the final creative looks or sounds like in a particular canonical renderer. The actual delivery object remains the saved creative manifest and its synced seller-specific format coverage.

Performance loop

Creative work does not end at finalization. The full performance cycle is:
  1. Create or update campaign goals — use performanceConfig on the campaign when optimizing toward events or metrics.
  2. Launch with format coverage — execute only after required creative formats are covered.
  3. Collect delivery and outcome data — use reporting plus conversion/measurement ingestion (log_event, measurement data sync, or measurement records depending on integration).
  4. Compare creative performance — inspect performance by campaign, media buy, package, and creative where reporting dimensions are available.
  5. Iterate — duplicate or start a new creative session from the winning direction, then refine the creative based on observed performance and seller feedback.
The Anjali/The Shift prototype exercises the creative build, preview, evaluator, and finalization loop. A complete performance cycle also needs live delivery, measurement ingestion, reporting by creative, and an optimization decision that feeds a new creative iteration.

Evaluator strategy

Creative evaluators answer different questions at different moments. Treat them as a selected set of checks, not a single score.
Evaluator typeQuestion it answersTypical stage
Core readinessIs there a renderable preview and valid manifest structure?Draft, final
Asset fidelityDid locked assets stay intact, and are rights/provenance usable?Draft, final
Brand/briefDoes the direction fit the campaign brief and brand guidance?Draft, final
Format/sellerDoes this execution satisfy the selected seller or publisher format?Final
Policy/safetyIs there policy, claims, legal, or safety risk?Final
PerformanceDid it actually work after delivery?Postflight
Draft evaluator warnings should guide refinement. Final hard/blocking failures prevent finalization. Non-blocking final warnings, such as unknown source-asset rights, should be shown as review notes. Performance evaluators should only run after delivery/reporting data exists; pre-flight checks cannot prove a creative will win. Longer term, evaluator selection should come from the creative session context:
  • source assets and lock/rights metadata
  • modality and renderer type
  • campaign brief and brand guidance
  • selected seller formats and publisher policies
  • available adapter/seller evaluator capabilities
  • postflight reporting and measurement data

Common operations

Create a creative manifest (multipart)

The endpoint accepts a metadata JSON field plus files[] form fields:
curl -X POST https://api.interchange.io/api/v2/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.interchange.io/api/v2/buyer/campaigns/cmp_987654321/creativeManifest?take=50" \
  -H "Authorization: Bearer $SCOPE3_API_KEY"
Filters: search, includeFrequencyCaps. Pagination: take, skip.

Get / update / delete

curl https://api.interchange.io/api/v2/buyer/campaigns/cmp_987654321/creatives/cm_abcdef \
  -H "Authorization: Bearer $SCOPE3_API_KEY"

curl -X PUT https://api.interchange.io/api/v2/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.interchange.io/api/v2/buyer/campaigns/cmp_987654321/creatives/cm_abcdef \
  -H "Authorization: Bearer $SCOPE3_API_KEY"

Render an ADCP preview

curl -X POST https://api.interchange.io/api/v2/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/v2/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/v2/buyer/campaigns/:campaignId/creatives/templatesList the deduplicated format IDs required by every product in the campaign and the available templates.
GET /api/v2/buyer/formatsCross-agent format registry (all formats discovered from sales agents).
GET /api/v2/buyer/formats/:agentUrl/:formatIdFormat details for a specific format on a specific agent.

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.

Creative transport modes

Interchange chooses the creative transport mode per sales agent:
  • Creative library sync — sellers that advertise a creative library through creative.has_creative_library: true receive manifests through sync_creatives, and packages reference them with creative_assignments.
  • Inline creative delivery — sellers that advertise creative.has_creative_library: false receive the creative manifest inline on each package that needs it.
For legacy or unknown capabilities (creative.has_creative_library is null or absent), Interchange falls back to the seller’s advertised tools and uses sync_creatives when available. If sync_creatives fails and the seller allows inline creatives, Interchange falls back to inline package delivery for that seller. If the seller is library-only and sync_creatives fails, the media-buy create or update request fails synchronously instead of silently continuing.

Campaign

Owning campaign — formats come from its products

Brand

Brand info auto-resolved from the advertiser