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 '{}'import requests
url = "https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/creatives/create"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/creatives/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"creative_id": "<string>",
"name": "<string>",
"assets": [
{
"asset_id": "<string>",
"name": "<string>",
"original_filename": "<string>",
"asset_type": "IMAGE",
"content_type": "<string>",
"file_size": 4503599627370495,
"public_url": "<string>",
"asset_source": "CREATIVE_SOURCE",
"created_at": "2023-11-07T05:31:56Z",
"file_size_status": "verified",
"slot_asset_id": "<string>",
"asset_control": {
"locked_asset": true,
"asset_role": "product",
"can_transform": true,
"preservation_notes": "<string>",
"source_asset_id": "<string>",
"rendition_asset_id": "<string>"
},
"width": 4503599627370495,
"height": 4503599627370495,
"declared_sizes": [
{
"width": 4503599627370495,
"height": 4503599627370495
}
],
"duration_ms": 4503599627370495,
"codec": "<string>",
"bitrate_kbps": 4503599627370495,
"frame_rate": 1,
"sample_rate": 4503599627370495,
"container": "<string>",
"vast_version": "2.0",
"warnings": [
{
"code": "FILENAME_DIMENSION_MISMATCH",
"message": "<string>"
}
]
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"preview_revision": "<string>",
"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": [
{
"type": "ad_id",
"value": "<string>"
}
],
"target_format_ids": [
{
"id": "<string>",
"agent_url": "<string>",
"width": 123,
"height": 123,
"duration_ms": 123
}
],
"reuse_count": 4503599627370495,
"creative_role": "evergreen",
"creative_source": "uploaded",
"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>",
"method": "tag_hints"
},
"creative_manifest": "<unknown>",
"sync_status": {
"synced": true,
"agent_count": 0,
"last_synced_at": "2023-11-07T05:31:56Z"
},
"platform_links": [
{
"agent_id": "<string>",
"agent_name": "<string>",
"status": "<string>",
"platform_id": "<string>",
"approval_status": "<string>",
"synced_at": "2023-11-07T05:31:56Z"
}
],
"tracking": {
"supported_macros": [
"<string>"
],
"impression_tracker_url": "<string>",
"click_tracker_url": "<string>"
},
"campaign_id": "<string>",
"advertiser_id": "<string>",
"frequencyCaps": [
{
"max_impressions": 3,
"window": {
"interval": 4503599627370496,
"unit": "seconds"
},
"id": "12345",
"targetLevel": "ADVERTISER",
"targetId": "camp_abc123",
"createdAt": "<string>",
"updatedAt": "<string>",
"archivedAt": "<string>"
}
],
"already_exists": true,
"ignored_files": 4503599627370495,
"warnings": [
"<string>"
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Create advertiser creative master
Create a creative manifest scoped to an advertiser without requiring a campaign. The resulting master can be assigned to one or more campaigns.
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 '{}'import requests
url = "https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/creatives/create"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.interchange.io/api/v2/buyer/advertisers/{advertiserId}/creatives/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"creative_id": "<string>",
"name": "<string>",
"assets": [
{
"asset_id": "<string>",
"name": "<string>",
"original_filename": "<string>",
"asset_type": "IMAGE",
"content_type": "<string>",
"file_size": 4503599627370495,
"public_url": "<string>",
"asset_source": "CREATIVE_SOURCE",
"created_at": "2023-11-07T05:31:56Z",
"file_size_status": "verified",
"slot_asset_id": "<string>",
"asset_control": {
"locked_asset": true,
"asset_role": "product",
"can_transform": true,
"preservation_notes": "<string>",
"source_asset_id": "<string>",
"rendition_asset_id": "<string>"
},
"width": 4503599627370495,
"height": 4503599627370495,
"declared_sizes": [
{
"width": 4503599627370495,
"height": 4503599627370495
}
],
"duration_ms": 4503599627370495,
"codec": "<string>",
"bitrate_kbps": 4503599627370495,
"frame_rate": 1,
"sample_rate": 4503599627370495,
"container": "<string>",
"vast_version": "2.0",
"warnings": [
{
"code": "FILENAME_DIMENSION_MISMATCH",
"message": "<string>"
}
]
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"preview_revision": "<string>",
"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": [
{
"type": "ad_id",
"value": "<string>"
}
],
"target_format_ids": [
{
"id": "<string>",
"agent_url": "<string>",
"width": 123,
"height": 123,
"duration_ms": 123
}
],
"reuse_count": 4503599627370495,
"creative_role": "evergreen",
"creative_source": "uploaded",
"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>",
"method": "tag_hints"
},
"creative_manifest": "<unknown>",
"sync_status": {
"synced": true,
"agent_count": 0,
"last_synced_at": "2023-11-07T05:31:56Z"
},
"platform_links": [
{
"agent_id": "<string>",
"agent_name": "<string>",
"status": "<string>",
"platform_id": "<string>",
"approval_status": "<string>",
"synced_at": "2023-11-07T05:31:56Z"
}
],
"tracking": {
"supported_macros": [
"<string>"
],
"impression_tracker_url": "<string>",
"click_tracker_url": "<string>"
},
"campaign_id": "<string>",
"advertiser_id": "<string>",
"frequencyCaps": [
{
"max_impressions": 3,
"window": {
"interval": 4503599627370496,
"unit": "seconds"
},
"id": "12345",
"targetLevel": "ADVERTISER",
"targetId": "camp_abc123",
"createdAt": "<string>",
"updatedAt": "<string>",
"archivedAt": "<string>"
}
],
"already_exists": true,
"ignored_files": 4503599627370495,
"warnings": [
"<string>"
]
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Authorizations
API key or access token
Path Parameters
Advertiser ID
1Body
JSON metadata for creating a creative manifest
Manifest name (auto-generated if omitted)
1 - 255Creative brief / direction text
1 - 5000Add a single URL asset (per AdCP url-asset spec). For multi-slot formats (e.g. native), use url_assets instead.
Show child attributes
Show child attributes
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.
50Show child attributes
Show child attributes
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.
50Show child attributes
Show child attributes
Add a webhook asset for DCO (dynamic content).
Show child attributes
Show child attributes
Legacy-v1 ADCP named-format ref for this creative (auto-resolved from template if omitted). Use format_kind for AdCP 3.1 canonical formats.
Show child attributes
Show child attributes
AdCP 3.1 canonical format kind (e.g. image_carousel, video_hosted). Alternative to format_id for canonical formats.
image 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.
- Option 1
- Option 2
Show child attributes
Show child attributes
Industry identifiers (Ad-ID, ISCI, Clearcast clock number, IDcrea) per AdCP spec.
Show child attributes
Show child attributes
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")
Multipart REST metadata only: each filename must match a file uploaded in the same multipart request. Murph 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.
Show child attributes
Show child attributes
URL-backed or inline media assets from a chat attachment, DAM, catalog, product page, or creative generator. For every Murph 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.
50Show child attributes
Show child attributes
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).
Buyer-defined frequency caps for this creative. When provided, sets the full list.
Show child attributes
Show child attributes
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.
2 - 10 elementsShow child attributes
Show child attributes
Response
Create advertiser creative master
Creative manifest with inline assets
Creative manifest ID
Manifest name
Uploaded assets in this manifest
Show child attributes
Show child attributes
Created timestamp
^(?:(?:\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 timestamp
^(?:(?:\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))$Exact opaque revision of the buyer-preview projection. Use it to bind short-lived previews to the current manifest content.
^[a-f0-9]{64}$Creative brief text
Brand domain (auto-resolved)
Creative template used for this manifest
ADCP format identifier
Show child attributes
Show child attributes
AdCP 3.1 canonical format kind (e.g. image_carousel, video_hosted)
AdCP 3.1 scope-discriminated format option reference.
- Option 1
- Option 2
Show child attributes
Show child attributes
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 (Ad-ID, ISCI, Clearcast clock, IDcrea)
Show child attributes
Show child attributes
Target format IDs (from campaign products)
Show child attributes
Show child attributes
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.
0 <= x <= 9007199254740991Advertiser-library role (evergreen or reference). Absent for flight-specific creatives that live on their campaign.
evergreen, reference Provenance of the creative (uploaded/generated/connected). Today always "uploaded".
uploaded, generated, connected URL to preview the processed creative (processed HTML hosted in GCS)
Carousel card definitions for image_carousel creatives.
Show child attributes
Show child attributes
Result of HTML processing (CDN URL rewriting + macro insertion)
Show child attributes
Show child attributes
Auto-detected template info (populated when template_id was not explicitly provided)
Show child attributes
Show child attributes
Full ADCP creative manifest (built for sync)
Sync status across sales agents
Show child attributes
Show child attributes
Provider/sales-agent creative identifiers captured from sync_creatives for round-trip comparison.
Show child attributes
Show child attributes
Auto-generated Scope3 tracking URLs for impression and click measurement
Show child attributes
Show child attributes
Campaign ID (omitted for advertiser-level masters)
Advertiser ID this manifest belongs to
Buyer-defined frequency caps configured for this creative
Show child attributes
Show child attributes
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.
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.
0 <= x <= 9007199254740991Format compatibility warnings emitted when an explicit format_id does not match any format accepted by the campaign products. Only set on update responses when a mismatch is detected. The creative was saved; reassign it or update the product configuration before executing.