Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt

Use this file to discover all available pages before exploring further.

AdCP 3.0 Proposal - This specification is under development for AdCP 3.0. Feedback welcome via GitHub Discussions.
Status: Request for Comments Last Updated: March 2026 The key words β€œMUST”, β€œMUST NOT”, β€œREQUIRED”, β€œSHALL”, β€œSHALL NOT”, β€œSHOULD”, β€œSHOULD NOT”, β€œRECOMMENDED”, β€œMAY”, and β€œOPTIONAL” in this document are to be interpreted as described in RFC 2119.

Abstract

The Creative Protocol defines a standard interface for creative format discovery, manifest validation, creative generation, and preview rendering. This protocol enables AI agents to discover format specifications, build compliant creative assets, and generate previews across advertising platforms.

Protocol overview

The Creative Protocol provides:
  • Format discovery with full technical specifications
  • Manifest validation against format requirements
  • AI-powered creative generation and transformation
  • Preview rendering for creative verification
  • Universal macros for cross-platform tracking

Transport requirements

Creative agents MUST support at least one of the following transports:
TransportProtocolDescription
MCPModel Context ProtocolTool-based interaction via JSON-RPC
A2AAgent-to-AgentMessage-based interaction
Creative agents SHOULD support MCP as the preferred transport. Creative agents MUST declare Creative Protocol support via get_adcp_capabilities:
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/protocol/get-adcp-capabilities-response.json",
  "adcp": {
    "major_versions": [2],
    "idempotency": { "supported": true, "replay_ttl_seconds": 86400 }
  },
  "supported_protocols": ["creative"],
  "creative": {
    "has_creative_library": true,
    "supports_generation": false,
    "supports_transformation": true,
    "supports_compliance": false
  }
}
The creative capabilities tell the buyer which interaction models this agent supports. See Interaction models below.

Core concepts

Creative agents

A creative agent is any agent that implements the Creative Protocol. This includes standalone services (ad servers, creative management platforms, generative tools) and sales agents that declare "creative" in supported_protocols. A creative agent:
  • Defines and documents formats it owns
  • Validates manifests against format requirements
  • Generates previews showing how creatives will render
  • Optionally generates or transforms creatives from natural language briefs
Sales agents that implement both the Media Buy Protocol and the Creative Protocol serve both roles from a single endpoint. See Creative capabilities on sales agents.

Interaction models

Creative agents serve different roles depending on their capabilities. Buyers use get_adcp_capabilities to determine which interaction model applies:
ModelDescriptionCapabilitiesExamples
Transformation agentResizes or adapts existing manifests to new formatssupports_transformation: trueFormat conversion services
Generative agentCreates manifests from natural language briefssupports_generation: trueAI creative platforms
Creative ad serverHosts a creative library, generates ad-serving tagshas_creative_library: trueFlashtalking, CM360, Celtra
These models compose β€” an agent can support multiple. A creative ad server with supports_generation: true and has_creative_library: true can both generate creatives from briefs and retrieve existing ones from its library. The supports_compliance flag is orthogonal β€” any interaction model can support compliance requirements in briefs. Buyer workflow by model:
  • Transformation: list_creative_formats β†’ build_creative (with creative_manifest + target_format_id)
  • Generation: list_creative_formats β†’ build_creative (with message + target_format_id)
  • Library retrieval: list_creatives β†’ build_creative (with creative_id + target_format_id)
Agents that host a creative library should also implement the accounts protocol so buyers can establish access before querying. Sales agents that already implement accounts for media buys do not need to do anything additional. A transformation or generation agent that charges for its services implements the Accounts Protocol, exposes pricing_options on list_creative_formats, and returns pricing in build_creative responses. Agents that persist creative_id on build output can also expose pricing on list_creatives. Free transformation agents remain stateless and unchanged.

Format authority

Each format has exactly one authoritative creative agent, identified by the agent_url in the format ID:
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250_image"
  }
}
Creative agents MUST only return authoritative format definitions for formats they own. Creative agents MAY reference other creative agents that provide additional formats.

Formats

Formats define how assets are assembled and rendered. A format specifies:
  • Media family (display, video, audio, dooh)
  • Required and optional asset types
  • Technical constraints (dimensions, duration, file size, codecs)
  • Rendering behavior and interaction expectations

Assets

Assets are the building blocks of creatives. Asset types include:
  • image: Static images (JPEG, PNG, WebP, GIF)
  • video: Video files (MP4, WebM, MOV) or VAST tags
  • audio: Audio files (MP3, M4A) or DAAST tags
  • text: Headlines, descriptions, CTAs
  • html: HTML5 creatives or third-party tags
  • javascript: JavaScript tags
  • url: Tracking pixels, clickthrough URLs

Manifests

Manifests pair format specifications with actual asset content. A manifest provides:
  • Format reference (agent_url + id)
  • Asset values keyed by asset_id from the format
  • Tracking URLs and macros
Creative agents MUST validate manifests against format requirements before accepting them.

Universal macros

AdCP defines universal macros for cross-platform tracking. Creative agents MUST support these macros in tracking URLs:
  • {TIMESTAMP}: Unix timestamp
  • {CACHEBUSTER}: Random cache-busting value
  • {CLICK_URL}: Click tracking URL
  • {REDIRECT_URL}: Final destination URL
Sales agents MUST translate universal macros to their ad server’s native syntax.

Creative Status Lifecycle

Schema: enums/creative-status.json Creatives in a library progress through a defined set of states. archived is the only buyer-initiated state change; all others are seller-initiated (processing, review, approval/rejection).
sync_creatives ──▢ processing ──▢ pending_review ──▢ approved
                       β”‚                                β”‚
                       β”‚ (processing failure)            β”‚ (buyer archives)
                       β–Ό                                β–Ό
                   rejected ◀── (policy failure) ── pending_review
                       β”‚                            archived
                       β”‚ (buyer fixes + resubmits        β”‚
                       β”‚  via sync_creatives)             β”‚ (buyer unarchives)
                       β–Ό                                β–Ό
                   processing                       approved
Rules:
  • processing β†’ pending_review: automatic when ingestion and transcoding succeed
  • processing β†’ rejected: automatic when processing fails (corrupt file, unsupported codec, constraint violation)
  • pending_review β†’ approved: seller approves after content policy review
  • pending_review β†’ rejected: seller rejects with rejection_reason
  • approved β†’ archived: buyer-initiated via sync_creatives
  • archived β†’ approved: buyer-initiated via sync_creatives (unarchive). Sellers MAY require re-review, transitioning to pending_review instead.
  • rejected β†’ processing: buyer fixes the creative and resubmits via sync_creatives. The creative re-enters the full processing and review pipeline.
  • approved β†’ pending_review: seller-initiated re-review (e.g., policy change). Sellers SHOULD notify the buyer when a previously approved creative is pulled back for re-review.
Creative agents MUST reject operations that reference a rejected creative for delivery (e.g., assigning it to a package) with error code CREATIVE_REJECTED. Creative agents MUST include status and rejection_reason (when rejected) in list_creatives responses.

Pricing

Creative agents that charge for their services expose pricing through the same discover β†’ build β†’ report loop used by signals agents and content standards agents.

Pricing discovery surfaces

Pricing is discovered via two surfaces depending on the agent’s interaction model:
  • list_creatives β€” ad servers and library-based agents expose pricing_options[] on each creative. The buyer discovers pricing for specific creatives they want to use.
  • list_creative_formats β€” transformation and generation agents expose pricing_options[] on each format. The buyer discovers pricing for the formats the agent can produce, before any creative exists.
Both surfaces use the same pricing_options[] array of vendor-pricing-option objects. Both require account and include_pricing: true on the request. An agent MAY expose pricing on both surfaces (e.g., a creative management platform that has both a library and transformation capabilities).

Pricing flow

  1. Account setup β€” rate card agreed. Determines pricing for all subsequent operations.
  2. Discovery β€” list_creatives or list_creative_formats with account and include_pricing: true returns pricing_options[]. Vendors may offer multiple options (volume tiers, context-specific rates, different models per product line).
  3. Build β€” build_creative with account. The agent computes the cost and returns pricing_option_id, vendor_cost, currency, and consumption in the response.
  4. Report β€” report_usage with creative_id and pricing_option_id for reconciliation.

Pricing models

Creative agents reuse the vendor pricing models defined in vendor-pricing-option.json:
ModelCreative use case
cpmCost per thousand impressions served β€” ad server model, DCO platforms
percent_of_mediaPercentage of media spend β€” agency/platform model
flat_feeFixed charge per period β€” licensed creative suites, subscription access
per_unitFixed price per unit of work β€” per format adapted, per image generated, per token, per variant rendered

Consumption details

Schema: core/creative-consumption.json The build_creative response includes a consumption object with structured details about what was consumed. Well-known fields: tokens (LLM tokens consumed), images_generated, renders (render passes), duration_seconds (processing time). Agents MAY include additional fields. The consumption object is informational β€” it lets the buyer verify that vendor_cost is consistent with the rate card. vendor_cost is the billing source of truth.

Accounts requirement

Creative agents that charge for their services MUST implement the Accounts Protocol. This applies to any creative agent with pricing β€” ad servers, generation platforms, and transformation agents that bill for usage.

Bundled mode

When a publisher uses a creative agent internally (bundled), the buyer never sees the creative agent’s pricing. The cost is absorbed into product pricing. The sales agent is the buyer in the creative agent relationship β€” it establishes an account, calls build_creative, and handles report_usage. The protocol surface is the same.

Tasks

The Creative Protocol defines the following tasks. See task reference pages for complete request/response schemas and examples.

list_creative_formats

Reference: list_creative_formats task Discover creative formats and their specifications. Requirements:
  • Creative agents MUST return full format specifications for formats they own
  • Creative agents MUST include agent_url identifying the authoritative agent for each format
  • Creative agents MUST include technical constraints (dimensions, duration, file types) in format definitions
  • Creative agents MAY include references to other creative agents providing additional formats
  • When filtering by format_ids, creative agents MUST return only the requested formats

build_creative

Reference: build_creative task Transform, generate, or retrieve creative manifests. Supports three modes:
  1. Generation: Create a manifest from a brief or seed assets
  2. Transformation: Adapt an existing manifest to a different format
  3. Library retrieval: Resolve a creative_id from the agent’s library into a manifest with ad-serving assets (HTML/JavaScript/VAST tags)
Requirements:
  • Creative agents MUST validate input manifests against format requirements
  • Creative agents MUST return a valid manifest for the target format on success
  • Creative agents MUST return validation errors if the transformation cannot be completed
  • Creative agents SHOULD preserve tracking URLs and macros during transformation
  • Creative agents SHOULD respect quality for generative tasks ("draft" for fast iteration, "production" for final delivery) and MAY ignore it for non-generative transforms
  • Creative agents SHOULD honor item_limit when present, using the lesser of item_limit and the format’s max_items
  • Creative agents MAY use AI/LLM processing for generation tasks
  • When creative_id is provided, creative agents MUST resolve the creative from their library
  • When macro_values is provided, creative agents SHOULD substitute the specified macros in the output manifest’s assets and leave unresolved macros as {MACRO} placeholders
  • Creative agents MUST ignore unrecognized macro keys in macro_values β€” unknown macros are not an error
  • Creative agents SHOULD assign globally unique creative_id values; when they cannot guarantee uniqueness, concept_id is REQUIRED on build_creative requests to disambiguate
  • build_creative supports async responses (status: "working" with context_id polling) for generation and transformation tasks that take significant time. Library retrieval is typically synchronous.
  • When account is provided and the agent charges, the response MUST include pricing_option_id, vendor_cost, and currency. The consumption object SHOULD be included when relevant.
  • For async builds, pricing fields appear on the final completed response only, not on intermediate status responses.
  • When a paid creative agent receives a build_creative request without account and the agent requires an account, the agent MUST return an error.

preview_creative

Reference: preview_creative task Generate preview renderings of creative manifests. Requirements:
  • Creative agents MUST validate manifests before generating previews
  • Creative agents MUST return preview URLs or HTML for valid manifests
  • Creative agents MUST include expires_at for preview URLs
  • Creative agents SHOULD support batch preview for multiple creatives
  • Creative agents MAY support multiple output formats (URL, HTML, image)

list_creatives

Schema: creative/list-creatives-request.json / creative/list-creatives-response.json Reference: list_creatives task Browse and filter creative assets in a creative library. Implemented by any agent that hosts a creative library β€” ad servers, creative management platforms, and sales agents that manage creatives. Requirements:
  • Agents MUST return creatives accessible to the authenticated account
  • Agents MUST include approval status for each creative
  • Agents SHOULD support filtering by format, status, tags, and date range
  • Agents SHOULD support filtering by concept_ids and format_ids when the platform organizes creatives into concepts
  • Agents MAY include dynamic content variable definitions when include_variables=true
  • Agents MAY include a lightweight delivery snapshot when include_snapshot=true. The snapshot provides lifetime impressions and last-served date for operational use β€” detailed analytics belong in get_creative_delivery.
  • When account and include_pricing=true are provided, agents that charge MUST include pricing_options on each creative β€” an array of vendor-pricing-option objects. Vendors may offer multiple options per creative (volume tiers, context-specific rates, different pricing models).
Account requirements:
  • Creative agents that charge for their services MUST implement the Accounts Protocol. This applies to any creative agent with pricing β€” ad servers, generation platforms, and transformation agents that bill for usage.
  • Creative agents that host a library but do not charge SHOULD implement the Accounts Protocol so buyers can establish access before querying.
  • This is the same accounts protocol used by sales agents β€” there is no separate version.
  • Sales agents that already implement accounts for media buys do not need to do anything additional.

sync_creatives

Schema: creative/sync-creatives-request.json / creative/sync-creatives-response.json Reference: sync_creatives task Upload and synchronize creative assets in a library. Implemented by any agent that hosts a creative library β€” ad servers, creative management platforms, and sales agents that manage creatives. Requirements:
  • Agents MUST validate creatives against format specifications
  • Agents MUST return validation errors for non-compliant creatives
  • Agents MAY require approval before creatives are available for use
  • Agents SHOULD support dry_run for validation without applying changes
  • Agents MUST reject requests that combine delete_missing: true with creative_ids β€” delete_missing applies to the entire library, not a filtered subset
  • Agents that also manage media buys SHOULD support the assignments field for bulk creative-to-package mapping
  • Standalone creative agents that do not manage media buys SHOULD ignore the assignments field

get_creative_delivery

Reference: get_creative_delivery task Retrieve creative delivery data with variant-level metrics. Requirements:
  • Agents MUST return delivery data for the requested creatives
  • Agents SHOULD include variant-level breakdowns when available
  • Sales agents implementing the Creative Protocol SHOULD support this task when their products generate or optimize creative variants

Error handling

Creative agents MUST return errors using the standard AdCP error schema. Common error codes:
  • REFERENCE_NOT_FOUND: Requested format does not exist or is not accessible (error.field identifies the format_id)
  • VALIDATION_ERROR: Manifest failed format validation
  • ASSET_MISSING: Required asset not provided in manifest
  • ASSET_INVALID: Asset does not meet format constraints
  • GENERATION_FAILED: Creative generation could not be completed

Security considerations

Transport security

All Creative Protocol communications MUST use HTTPS with TLS 1.2 or higher.

Asset security

  • Creative agents SHOULD validate that asset URLs are accessible
  • Creative agents SHOULD scan assets for malware and malicious content
  • Creative agents MUST NOT execute untrusted JavaScript during validation

Preview security

  • Preview URLs SHOULD be time-limited (indicated by expires_at)
  • Creative agents SHOULD sandbox HTML previews to prevent script execution
  • Consumers of output_format: "html" MUST only use trusted creative agents

Conformance

Creative agent conformance

A conformant Creative Protocol agent MUST:
  1. Support at least one specified transport (MCP or A2A)
  2. Implement list_creative_formats for format discovery
  3. Return authoritative format definitions only for formats it owns
  4. Validate manifests against format specifications
  5. Use specified error codes
A conformant Creative Protocol agent SHOULD:
  1. Implement build_creative for creative generation
  2. Implement preview_creative for preview rendering
  3. Support universal macros in tracking URLs
  4. Implement list_creatives when the agent hosts a creative library
  5. Implement sync_creatives when the agent accepts creative uploads
  6. Support creative_id in build_creative when the agent hosts a creative library
  7. Implement the accounts protocol (sync_accounts / list_accounts) when hosting a creative library
  8. Declare supports_generation, supports_transformation, and has_creative_library in get_adcp_capabilities so buyers can determine the correct interaction model

Consumer conformance

A conformant Creative Protocol consumer MUST:
  1. Use the agent_url from format IDs to identify the authoritative creative agent
  2. Validate manifests against format specifications before submission
  3. Handle validation errors appropriately
  4. Track visited URLs when recursively discovering formats to avoid infinite loops

Implementation notes

Response time expectations

Creative agents SHOULD target the following response times:
Operation TypeTarget Latency
Format listing (list_creative_formats)< 1 second
Library query (list_creatives)< 1 second
Creative sync (sync_creatives)< 5 seconds
Preview generation (preview_creative)< 5 seconds
Batch preview (10 creatives)< 10 seconds
Creative generation (build_creative)< 60 seconds

Recursive format discovery

Creative agents MAY reference other creative agents in their list_creative_formats response:
{
  "creative_agents": [{
    "agent_url": "https://creative.adcontextprotocol.org",
    "agent_name": "AdCP Reference Creative Agent",
    "capabilities": ["validation", "assembly", "preview"]
  }]
}
Consumers MAY recursively query referenced agents to discover additional formats. Consumers MUST track visited URLs to prevent infinite loops during recursive discovery.

Format-aware validation

Manifest validation MUST be performed in the context of the format specification:
  1. Look up the format definition from the authoritative creative agent
  2. For each asset in the manifest, find the corresponding entry in the format’s assets array
  3. Validate the asset value against the type and constraints defined in the format
The format definition determines what type each asset_id should be. Asset type information is NOT included in the manifest itself.

Standard vs custom formats

  • Standard formats: Based on IAB specifications, hosted by the reference creative agent (https://creative.adcontextprotocol.org)
  • Custom formats: Defined by individual publishers or creative platforms for specialized inventory
Both work identicallyβ€”the agent_url field identifies which agent is authoritative for each format.

Schema reference

Some creative protocol schemas (build_creative, list_creative_formats, preview_creative) have paths under media-buy/ because they were originally released as part of the media-buy protocol. The schema paths are stable identifiers and do not affect which protocol the task belongs to.
SchemaDescription
core/format.jsonFormat definition
core/creative-manifest.jsonCreative manifest
core/creative-asset.jsonAsset definition
media-buy/list-creative-formats-request.jsonlist_creative_formats request
media-buy/list-creative-formats-response.jsonlist_creative_formats response
creative/list-creatives-request.jsonlist_creatives request
creative/list-creatives-response.jsonlist_creatives response
creative/sync-creatives-request.jsonsync_creatives request
creative/sync-creatives-response.jsonsync_creatives response