Skip to main content
POST
/
advertisers
/
{advertiserId}
/
creatives
/
create
Create advertiser creative master
curl --request POST \
  --url https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/creatives/create \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{}'
{
  "creative_id": "<string>",
  "name": "<string>",
  "assets": [
    {
      "asset_id": "<string>",
      "name": "<string>",
      "original_filename": "<string>",
      "content_type": "<string>",
      "file_size": 0,
      "public_url": "<string>",
      "created_at": "2023-11-07T05:31:56Z",
      "slot_asset_id": "<string>",
      "asset_control": {
        "locked_asset": true,
        "can_transform": true,
        "preservation_notes": "<string>",
        "source_asset_id": "<string>",
        "rendition_asset_id": "<string>"
      },
      "width": 123,
      "height": 123,
      "warnings": [
        {
          "message": "<string>"
        }
      ]
    }
  ],
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "message": "<string>",
  "brand_domain": "<string>",
  "template_id": "<string>",
  "format_id": {
    "id": "<string>",
    "agent_url": "<string>",
    "width": 123,
    "height": 123,
    "duration_ms": 123
  },
  "format_kind": "<string>",
  "format_option_ref": {
    "scope": "publisher",
    "publisher_domain": "<string>",
    "format_option_id": "<string>"
  },
  "requires_upgrade": true,
  "industry_identifiers": [
    {
      "value": "<string>"
    }
  ],
  "target_format_ids": [
    {
      "id": "<string>",
      "agent_url": "<string>",
      "width": 123,
      "height": 123,
      "duration_ms": 123
    }
  ],
  "preview_url": "<string>",
  "carousel_cards": [
    {
      "card_index": 4503599627370495,
      "media_asset_id": "<string>",
      "headline": "<string>",
      "description": "<string>",
      "cta": "<string>",
      "landing_page_url": "<string>",
      "platform_extensions": [
        {}
      ]
    }
  ],
  "html_processing": {
    "rewritten_refs": [
      {
        "original": "<string>",
        "cdn_url": "<string>"
      }
    ],
    "unresolved_refs": [
      "<string>"
    ],
    "inserted_macros": [
      "<string>"
    ],
    "processed_html": "<string>",
    "processed_html_url": "<string>"
  },
  "auto_detected_template": {
    "template_id": "<string>",
    "template_name": "<string>"
  },
  "creative_manifest": "<unknown>",
  "sync_status": {
    "synced": true,
    "agent_count": 0,
    "last_synced_at": "2023-11-07T05:31:56Z"
  },
  "tracking": {
    "supported_macros": [
      "<string>"
    ],
    "impression_tracker_url": "<string>",
    "click_tracker_url": "<string>"
  },
  "campaign_id": "<string>",
  "brand_agent_id": "<string>",
  "frequencyCaps": [
    {
      "max_impressions": 3,
      "window": {
        "interval": 2,
        "unit": "seconds"
      },
      "id": "12345",
      "targetId": "camp_abc123",
      "createdAt": "<string>",
      "updatedAt": "<string>",
      "archivedAt": "<string>"
    }
  ],
  "already_exists": true,
  "ignored_files": 4503599627370495
}

Authorizations

Authorization
string
header
required

API key or access token

Path Parameters

advertiserId
string
required

Advertiser (brand agent) ID

Minimum string length: 1

Body

application/json

JSON metadata for creating a creative manifest

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 bound 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 bound 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
webhook_asset
object

Add a webhook asset for DCO (dynamic content).

format_id
object
format_kind
string

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

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 — ADCP format ID (e.g., "display_image", "display_html", "video_standard") or vendor tag (e.g., "vendor_dcm_tag")

assets
object[]

Metadata for uploaded files. If omitted, all uploaded files are auto-classified.

linked_assets
object[]

URL-backed or inline generated media assets from a DAM, catalog, product page, or creative generator. Use this when Murph needs to save generated images/audio/video/html or linked product imagery without multipart file upload.

Maximum array length: 50
brandAgentId
string

Advertiser (brand agent) ID. 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 advertiser creative master

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))$
message
string

Creative brief text

brand_domain
string

Brand domain (auto-resolved)

template_id
string

Creative template used for this manifest

format_id
object
format_kind
string

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

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)

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

tracking
object

Auto-generated Scope3 tracking URLs for impression and click measurement

campaign_id
string

Campaign ID (omitted for advertiser-level masters)

brand_agent_id
string

Advertiser (brand agent) 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