Skip to main content
POST
Create creative manifest

Authorizations

Authorization
string
header
required

API key or access token

Path Parameters

campaignId
string
required

Campaign ID

Minimum string length: 1

Body

application/json

JSON metadata for creating a creative manifest. A complete campaign creative is automatically propagated to active sellers when the campaign already has non-draft media buys.

name
string

Manifest name (auto-generated if omitted)

Required string length: 1 - 255
message
string

Creative brief / direction text

Required string length: 1 - 5000
url_asset
object

Add a single URL asset (per AdCP url-asset spec). For multi-slot formats (e.g. native), use url_assets instead.

url_assets
object[]

URL assets assigned to specific AdCP format slots (e.g. native landing_page, click trackers). Each entry pairs a slot asset_id with a URL.

Maximum array length: 50
text_assets
object[]

Text assets assigned to specific AdCP format slots (e.g. native headline, long_headline, description, business_name, disclosure). Each entry pairs a slot asset_id with content.

Maximum array length: 50
macro_additions
object[]

Creative-local click-URL query parameters. Same-key values override campaign and advertiser defaults; null suppresses an inherited key.

Maximum array length: 50
webhook_asset
object

Add a webhook asset for DCO (dynamic content).

format_id
object

Legacy-v1 ADCP named-format ref for this creative (auto-resolved from template if omitted). Use format_kind for AdCP 3.1 canonical formats.

format_kind

AdCP 3.1 canonical format kind (e.g. image_carousel, video_hosted). Alternative to format_id for canonical formats.

Available options:
image
format_option_ref
object

Pins this manifest to a specific format_options[] entry on a product, identified by format_option_id. Use scope:"publisher" with publisher_domain for catalog-backed options, scope:"product" for product-inline options.

industry_identifiers
object[]

Industry identifiers (Ad-ID, ISCI, Clearcast clock number, IDcrea) per AdCP spec.

template_id
string

Creative template ID — legacy-v1 ADCP named-format id (e.g., "display_image", "display_html", "video_standard") or vendor tag (e.g., "vendor_dcm_tag")

assets
object[]

Multipart REST metadata only: each filename must match a file uploaded in the same multipart request. Apostra chat attachments are not multipart files; represent them as linked_assets[].data_url using the murph-attachment://N placeholder instead. If omitted, multipart files are auto-classified.

linked_assets
object[]

URL-backed or inline media assets from a chat attachment, DAM, catalog, product page, or creative generator. For every Apostra chat attachment, use linked_assets[].data_url = murph-attachment://N; never put its filename in assets[] because buyer_api_call does not send multipart file bytes.

Maximum array length: 50
brandAgentId
string

Advertiser ID (parameter name kept for wire compatibility). Required when creating an advertiser-level master without a campaign. Ignored when the manifest is created under a campaign (resolved from campaign context).

frequencyCaps
object[]

Buyer-defined frequency caps for this creative. When provided, sets the full list.

cards
object[]

Carousel cards (image_carousel format). Min 2, max 10. Each card needs filename (for an uploaded file) or url (for a pre-hosted asset), plus optional headline, description, cta, landing_page_url.

Required array length: 2 - 10 elements

Response

Create creative manifest

Creative manifest with inline assets

creative_id
string
required

Creative manifest ID

name
string
required

Manifest name

assets
object[]
required

Uploaded assets in this manifest

created_at
string<date-time>
required

Created timestamp

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
updated_at
string<date-time>
required

Updated timestamp

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
revision
integer

Authoritative monotonic revision of the complete saved Creative state.

Required range: 0 < x <= 9007199254740991
assembly_state
enum<string>

Whether the Creative is an incomplete advertiser draft or a complete composition.

Available options:
draft,
complete
preview_revision
string

Exact opaque revision of the buyer-preview projection. Use it to bind short-lived previews to the current manifest content.

Pattern: ^[a-f0-9]{64}$
message
string

Creative brief text

brand_domain
string

Brand domain (auto-resolved)

template_id
string

Creative template used for this manifest

format_id
object

ADCP format identifier

format_kind
string

AdCP 3.1 canonical format kind (e.g. image_carousel, video_hosted)

params
object

URL-free canonical parameters retained with the canonical format_kind identity.

format_option_ref
object

AdCP 3.1 scope-discriminated format option reference.

requires_upgrade
boolean

True when this creative has no format_kind and must be upgraded before it can be assigned to new media buys. Call POST .../upgrade to set format_kind and clear this flag.

industry_identifiers
object[]

Industry identifiers (Ad-ID, ISCI, Clearcast clock, IDcrea)

target_format_ids
object[]

Target format IDs (from campaign products)

reuse_count
integer

Number of campaigns this creative is actively attached to. A reuse signal for the advertiser library (returned on the advertiser-scoped list); omitted on single-manifest reads.

Required range: 0 <= x <= 9007199254740991
creative_role
enum<string>

Advertiser-library role (evergreen or reference). Absent for flight-specific creatives that live on their campaign.

Available options:
evergreen,
reference
creative_source
enum<string>

Provenance of the creative (uploaded/generated/connected). Today always "uploaded".

Available options:
uploaded,
generated,
connected
preview_url
string<uri>

URL to preview the processed creative (processed HTML hosted in GCS)

Carousel card definitions for image_carousel creatives.

html_processing
object

Result of HTML processing (CDN URL rewriting + macro insertion)

auto_detected_template
object

Auto-detected template info (populated when template_id was not explicitly provided)

creative_manifest
any

Full ADCP creative manifest (built for sync)

sync_status
object

Sync status across sales agents

Provider/sales-agent creative identifiers captured from sync_creatives for round-trip comparison.

tracking
object

Templates of the Apostra impression and click trackers. They carry identity placeholders that Apostra fills per media buy and package at sync, so they are not trafficking-ready.

macro_additions
object[]

Creative-local click-URL parameter additions.

Maximum array length: 50
campaign_id
string

Campaign ID (omitted for advertiser-level masters)

advertiser_id
string

Advertiser ID this manifest belongs to

frequencyCaps
object[]

Buyer-defined frequency caps configured for this creative

already_exists
boolean

True when create returned a pre-existing manifest with the same (campaign_id, name) instead of inserting a new one. Only set on create responses.

ignored_files
integer

Number of files in the create request that were ignored because the request hit the (campaign_id, name) dedupe path and returned a pre-existing manifest. Use the update endpoint to add or replace assets on the existing manifest. Only set when already_exists is true.

Required range: 0 <= x <= 9007199254740991
warnings
string[]

Advisory warnings about the saved creative; the creative was saved. Set on update when an explicit format does not match any format accepted by the campaign products (reassign it or update the product configuration before executing). Set on create and update when the click-through URL already sets a query key that a configured click-URL parameter (utmConfig or macroAdditions) also sets: the URL keeps its own value and that parameter is not added.