Skip to main content
High-level summaries of major AdCP releases with migration guidance. For detailed technical changelogs, see CHANGELOG.md.

Version 3.0.0-rc.3

Status: Release Candidate | AdCP 3.0 overview

What’s New

  1. Trusted Match Protocol (TMP) — Real-time execution layer for AdCP. 9 schemas, 12 documentation pages, provider discovery on products, typed artifacts for content resolution, and lightweight context matching. Deprecates AXE.
  2. Order Lifecycle Managementconfirmed_at on order creation, cancellation at media buy and package level with canceled_by attribution, per-package creative_deadline, valid_actions for state-aware agents, revision for optimistic concurrency, and include_history for revision audit trails. 7 new error codes.
  3. Governance Simplification — Remove binding field from check_governance (inferred from discriminating fields), remove mode from sync_plans (governance agent configuration, not protocol), remove escalated status (handled via async task lifecycle). Three terminal statuses: approved, denied, conditions.
  4. Seller-Assigned IDs — Remove buyer_ref, buyer_campaign_ref, and campaign_ref. Seller-assigned media_buy_id and package_id are canonical. idempotency_key on all mutating requests. Opaque governance_context string replaces structured schema.
  5. Proposal Lifecycle — Draft/committed proposal status, finalization via refine action, insertion order signing, and expiry enforcement on create_media_buy. Guaranteed products start as draft with indicative pricing.
  6. Audience Bias Governance — Structured audience data for fairness validation. New schemas for audience selectors, constraints, policy categories, and restricted attributes (GDPR Article 9). 10 policy category definitions, 8 restricted attribute definitions, 13 seed policies across US, EU, and platform regulations.
  7. Streaming and Audio Delivery Metricscompleted_views (renamed from video_completions), reach, reach_unit, and frequency in aggregated totals. Audio/podcast-native metrics. reach_unit co-occurrence constraint on delivery-metrics.json.
  8. Availability Forecastsbudget now optional on ForecastPoint for total available inventory. New availability forecast range unit. Guaranteed products include availability forecasts with estimated cost.
  9. Advertiser Industry Taxonomy — Two-level dot-notation categories on brand manifest and create_media_buy. Restricted categories (gambling, cannabis, dating) require explicit declaration.
  10. Content Standards Detailcontent_standards_detail on get_adcp_capabilities for pre-buy visibility into local evaluation and artifact delivery capabilities. sampling removed from get_media_buy_artifacts (configured at creation time).
  11. Event Source Health — Optional health on event sources (status, match rate, event volume, issues) and measurement_readiness on products for buyer event setup evaluation.
  12. Collection/Installment Extensionsspecial and limited_series fields, installment deadlines with deadline policies, print-capable creative formats with physical units, DPI, bleed, and color space.
  13. Scoped adagents.json Authorization — Delegation types, placement governance, signing keys, country and time-window constraints on authorized_agents.

Breaking Changes

Changerc.2rc.3
Buyer referencesbuyer_ref, buyer_campaign_ref, campaign_ref on requestsRemoved — seller-assigned media_buy_id and package_id are canonical
Idempotencybuyer_ref as implicit dedup keyExplicit idempotency_key on all mutating requests
Governance contextStructured governance-context.json schemaOpaque governance_context string
check_governance bindingbinding field on requestRemoved — inferred from discriminating fields
sync_plans modemode field (audit/advisory/enforce)Removed — governance agent configuration
check_governance statusescalated as possible statusRemoved — use async task lifecycle
get_media_buy_artifactssampling parameter on requestRemoved — sampling configured at media buy creation
FormatCategoryformat-category.json enum, type on FormatRemoved — use assets array or asset_types filter
Shows/episodesshow, episode, show_id, episode_idRenamed to collection, installment, collection_id, installment_id

Migration Notes For rc.2 Adopters

  • Buyer references — Remove buyer_ref and campaign_ref from request payloads. Use idempotency_key for safe retries instead.
  • Governance — Remove binding from check_governance calls, mode from sync_plans, and stop handling escalated status. Use async task polling for human review workflows.
  • Artifacts — Remove sampling from get_media_buy_artifacts requests. Configure sampling at create_media_buy time.
  • Format filtering — Replace format_types filters with asset_types on list_creative_formats or channels on get_products.
  • Collections — Rename show/episode references to collection/installment throughout.

Version 3.0.0-rc.2

Status: Release Candidate | AdCP 3.0 overview

What’s New

  1. Brand Protocol Rights Lifecycleget_rights, acquire_rights, update_rights tasks for brand licensing. Generation credentials, creative approval webhooks, revocation notifications, and usage reporting. Authenticated webhooks (HMAC-SHA256), actionable vs final rejection convention, DDEX PIE mapping for music licensing, and sandbox tooling for scenario testing.
  2. Visual Guidelines on Brand Manifest — Structured visual_guidelines field on brand.json: photography, graphic style, shapes, iconography, composition, motion, logo placement, colorways, type scale, asset libraries, and restrictions. Enables generative creative systems to produce on-brand assets.
  3. Collections and Installments — Content dimension for products representing persistent programs (podcasts, TV series, YouTube channels). collections on products references collections declared in an adagents.json by domain and collection ID — collection creators can serve as canonical sources regardless of distribution. collection_targeting_allowed controls whether buyers can select a subset or get the bundle. Distribution identifiers for cross-seller matching, installment lifecycle states, break-based ad inventory, talent linking, collection relationships, international content ratings.
  4. Sponsored Intelligence Channelsponsored_intelligence added to the media channel taxonomy for AI platform advertising (AI assistants, AI search, generative AI experiences).
  5. Property Governance Integration — Optional property_list parameter on get_products for filtering products by governance-evaluated property lists. property_list_applied response field confirms filtering.
  6. Campaign Governance and Policy Registrysync_plans, check_governance, report_plan_outcome, and get_plan_audit_logs for plan-level governance. Adds audit/advisory/enforce modes, delegated budget authority, seller-side governance checks, portfolio governance, registry-backed shared policies, and governance_context for canonical plan extraction.
  7. Account Model Simplification — Removed account_resolution capability. require_operator_auth now determines both auth model and account reference style.
  8. Creative Workflow Upgradesbuild_creative now supports inline preview via include_preview, multi-format output via target_format_ids, quality tiers for draft vs production output, catalog-driven item_limit, and library retrieval using creative_id plus optional macro substitution and trafficking context. preview_creative also adds quality control parameters.
  9. Creative Library Protocol Unificationlist_creatives and sync_creatives now live in the Creative Protocol. Creative agents can advertise supports_generation, supports_transformation, and has_creative_library so buyers can route generation, transformation, and library retrieval intentionally.
  10. Disclosure Persistence — Regulatory disclosure requirements can now specify persistence (continuous, initial, flexible) in addition to position and duration, with matching capability declarations on formats.
  11. Product Discovery and Planning Ergonomics — Product discovery adds exclusivity and preferred_delivery_types; products may omit delivery_measurement; packages and proposals support per-package start_time / end_time; and get_products now supports time_budget with incomplete response reporting.
  12. Accounts and Sandbox Refinementssync_accounts adds payment_terms, sandbox capability moves to the account capability block, and sandbox now participates in the account natural key for implicit account flows.
  13. Governance Agent Syncsync_governance task for syncing governance agent endpoints to specific accounts. Supports both explicit accounts (account_id) and implicit accounts (brand + operator) via account references. Replace semantics per call. Governance sync is now a dedicated tool — removed from sync_accounts and list_accounts.

Breaking Changes

Changerc.1rc.2
Account resolutionaccount_resolution capabilityRemoved — require_operator_auth determines account model
Creative library operationslist_creatives and sync_creatives documented under Media BuyCreative library tasks now live in the Creative Protocol
Sandbox capabilitymedia_buy.features.sandboxaccount.sandbox
DOOH flat rate parametersflat_rate.parameters without discriminatorflat_rate.parameters.type: "dooh" required when parameters are present
delete_content_standardsDocumented taskRemoved — archive standards via update_content_standards instead
get_property_featuresStandalone taskRemoved — use property list filters and get_adcp_capabilities for feature discovery
Governance agent syncgovernance_agents on sync_accounts request and list_accounts requestMoved to dedicated sync_governance task

Migration Notes For rc.1 Adopters

  • Creative task routing — If you adopted 3.0.0-rc.1, update any assumptions that creative library operations are Media Buy tasks. list_creatives and sync_creatives are Creative Protocol operations in rc.2, even when a sales agent implements them on the same endpoint.
  • Capability discovery — Replace reads of account_resolution with require_operator_auth, and read sandbox support from account.sandbox instead of media_buy.features.sandbox.
  • Creative request/response handlingbuild_creative can now return inline previews, multiple manifests, or a library-resolved manifest. Clients that assumed only single-format manifest-in / manifest-out behavior should update their response handling.
  • DOOH validation — Existing v3 DOOH flat_rate integrations must add type: "dooh" inside parameters when those parameters are provided.

Other Updates

  • Certification program — Three-tier certification (Basics, Practitioner, Specialist) taught by Addie through interactive chat, with vibe coding build projects for non-technical participants.
  • Documentation — Illustrated protocol walkthroughs, buy-side guides, FAQ expansion, schema-compliant examples, and collapsed sidebar navigation.

Version 3.0.0-rc.1

Status: Release Candidate | AdCP 3.0 overview

What’s New

  1. Keyword Targetingkeyword_targets and negative_keywords on the targeting overlay for search and retail media. Per-keyword bid prices with broad, phrase, and exact match types. Incremental management via keyword_targets_add and keyword_targets_remove on package updates. by_keyword breakdown in delivery reporting.
  2. Optimization Goals Redesignoptimization_goal (singular) replaced by optimization_goals (array). Discriminated union on kind: metric for seller-native delivery metrics or event for conversion tracking. Priority ordering for multi-goal packages. New metric types: engagements, follows, saves, profile_visits. View duration configuration for video completion goals.
  3. Reach Optimizationreach as a metric optimization goal with reach_unit (individuals, households, devices, accounts, cookies, custom) and optional target_frequency band (min/max/window). Products declare supported_reach_units when reach is in their supported metrics.
  4. Expanded Frequency Capfrequency_cap now supports max_impressions + per + window in addition to the existing suppress_minutes.
  5. Signal Pricing Models — Discriminated union with three pricing models: cpm, percent_of_media (with optional max_cpm), and flat_fee. Structured pricing_options array replaces the legacy pricing object on signals. pricing_option_id on activate_signal. idempotency_key on report_usage for preventing double-billing.
  6. Dimension Breakdowns — Opt-in reporting dimensions on get_media_buy_delivery: by_geo, by_device_type, by_device_platform, by_audience, by_placement — each with truncation flags. New reporting_dimensions request parameter with per-dimension limit and sort_by controls. Capability declaration at seller level (get_adcp_capabilitiesmedia_buy.reporting) and product level (reporting_capabilities).
  7. Device Type Targeting — New device_type field (form factor: desktop, mobile, tablet, ctv, dooh, unknown) distinct from existing device_platform (OS). With device_type_exclude for negative targeting. Declared in get_adcp_capabilities targeting capabilities.
  8. Deliver-to Flattening — The nested deliver_to object in get_signals request replaced with two top-level fields: destinations and countries. Simplifies queries where the caller is querying a platform’s own signal agent.
  9. Metric Optimization Capabilities — Products declare metric_optimization block with supported_metrics, supported_view_durations, and supported_targets. max_optimization_goals on products. Conversion tracking declares supported_targets. multi_source_event_dedup flag in get_adcp_capabilities.
  10. Swiss & Austrian Postal Codesch_plz and at_plz added to the postal-system enum, with corresponding updates to get_adcp_capabilities.
  11. Brand Identity Unificationbrand-manifest.json deleted. Task schemas now reference brands by { domain, brand_id } (BrandRef) instead of passing inline manifests. Brand data is resolved from brand.json or the registry at execution time.
  12. Delivery Forecasts on Productsestimated_exposures replaced with structured forecast field using the DeliveryForecast type. Products now return time periods, metric ranges, and methodology context during discovery.
  13. Proposal Refinement via Buying Modeproposal_id removed from get_products request. Refinement now uses buying_mode: "refine" with a typed refine array (see item 21). Session continuity (context_id in MCP, contextId in A2A) carries conversation history across calls. Proposal execution via create_media_buy with proposal_id is unchanged.
  14. First-Class Catalogssync_catalogs task with 13 catalog types (structural and industry-vertical). Formats declare catalog_requirements. Catalogs include conversion_events and content_id_type for attribution alignment.
  15. New Tasksget_media_buys for operational campaign monitoring, get_creative_features for creative governance, sync_audiences for CRM-based audience management.
  16. Buying Modebuying_mode on get_products with three modes: brief (natural language discovery), wholesale (full catalog), and refine (typed change-requests on previous results). Now required on all get_products calls.
  17. Sandbox Modesandbox protocol parameter on all tasks for testing without side effects.
  18. Creative Brief TypeCreativeBrief type on build_creative request for structured creative direction.
  19. Campaign Referencecampaign_ref field for cross-operation campaign grouping across multiple media buys.
  20. Geo Proximity Targetinggeo_proximity targeting overlay for point-based proximity targeting. Three methods: travel_time isochrones (e.g., “within 2hr drive of Düsseldorf”), radius (e.g., “within 30km of Heathrow”), and pre-computed geometry (buyer provides a GeoJSON polygon). Structured capability declaration in get_adcp_capabilities with per-method and transport mode support.
  21. Typed Refinement with Seller Acknowledgmentrefine redesigned from nested object to typed change-request array with scope discriminator (request, product, proposal). Field renames: product_id/proposal_idid, notesask. Seller responses include refinement_applied — a positionally-matched array with per-ask status (applied, partial, unable) and notes.
  22. AI Provenance and Disclosureprovenance object on creative manifests, assets, and artifacts for AI content transparency. IPTC-aligned digital_source_type enum (9 values), ai_tool metadata, human_oversight levels, C2PA soft references via manifest_url, regulatory disclosure with per-jurisdiction requirements (EU AI Act, California SB 942), and third-party verification results. provenance_required on creative policy for seller enforcement.
  23. Creative Compliancecompliance object on creative briefs with required_disclosures (structured items with text, position, jurisdictions, regulation, minimum duration) and prohibited_claims. New disclosure-position enum with 8 standard positions. Formats declare supported_disclosure_positions. supports_compliance capability flag replaces supports_brief.
  24. Manifest Unification — Creative manifest model unified to format_id + assets. Briefs and catalogs become proper asset types (brief, catalog) within the assets map. All asset reference lists across creative-manifest, creative-asset, and list-creatives-response aligned to 14 asset types with consistent anyOf validation.
  25. Structured Error Recoveryrecovery field on errors with three classifications: transient (retry after delay), correctable (fix request and resend), terminal (requires human action). 18 standard error codes (INVALID_REQUEST, RATE_LIMITED, POLICY_VIOLATION, PRODUCT_UNAVAILABLE, etc.) with recovery mappings in the new error-code enum.
  26. Agent Ergonomicsfields parameter on get_products for response projection (24 projectable fields). include_package_daily_breakdown opt-in on delivery reporting. Request-side attribution_window for cross-platform normalization. Buy-level start_time/end_time on get_media_buys. supported_pricing_models on seller capabilities. Audience metadata: description, audience_type (crm, suppression, lookalike_seed), tags, and total_uploaded_count for match rate calculation.
  27. Signal Deactivationaction field on activate_signal with activate (default) and deactivate values for compliance-driven signal removal.
  28. Signal Metadatacategories (valid values for categorical signals) and range (min/max for numeric signals) on signal entries in get_signals responses.
  29. Media Buy Rejectionrejected status added to media-buy-status enum with rejection_reason on the MediaBuy object.
  30. Idempotencyidempotency_key on update_media_buy and sync_creatives for at-most-once execution. idempotency_key added to create_media_buy for at-most-once creation.

Breaking Changes

Changebeta.3rc.1
Brand identityInline brand_manifest objectbrand (BrandRef: { domain, brand_id }) — resolved at execution time
Product exposure estimatesestimated_exposures (integer)forecast (DeliveryForecast object)
Proposal refinementproposal_id on get_products requestRemoved — use buying_mode: "refine" with typed refine array
Optimization goalsoptimization_goal (singular object)optimization_goals (array of discriminated union)
AudienceMember identityexternal_id in uid-type enumexternal_id is required top-level field, removed from enum
Signals deliver_toNested deliver_to objectTop-level destinations and countries
Signals pricingpricing: { cpm }Structured pricing_options[] array
report_usagekind and operator_id fieldsBoth removed
Refinement modelrefine object with overall/products/proposalsrefine array of typed change-requests with scope discriminator
Creative assignments{ creative_id: package_id[] } mapTyped array with creative_id, package_id, weight, placement_ids
Signals accountString account_idaccount (AccountReference object)
Signals deploymentsdeployments fielddestinations (renamed)
Package catalogscatalog (single object)catalogs (array)
buying_modeNot presentRequired — three modes: brief, wholesale, refine
Creative brief deliveryTop-level creative_brief on build_creativebrief asset type in manifest assets map
Creative capabilitysupports_briefsupports_compliance

Other Changes

  • audience-source enum for breakdown-level audience attribution
  • device-type enum (desktop, mobile, tablet, ctv, dooh, unknown) for form factor targeting and breakdown reporting
  • sort-metric enum for controlling breakdown sort order
  • geo-breakdown-support schema for declaring per-geography breakdown capabilities
  • Keyword targeting capability flags in get_adcp_capabilities
  • reporting object in get_adcp_capabilities for declaring dimension breakdown support
  • geo_proximity capability object in get_adcp_capabilities for declaring supported proximity methods and transport modes
  • error-code enum with 18 standard error codes and recovery classifications
  • disclosure-position enum (8 standard positions for regulatory disclosures)
  • digital-source-type enum (9 IPTC-aligned values for AI content classification)
  • provenance core object for AI content transparency across creative schemas
  • consent-basis enum extracted from sync_audiences (consent, legitimate_interest, contract, legal_obligation)
  • date-range and datetime-range core types replacing inline period objects
  • Property list filters relaxed: countries_all and channels_any no longer required
  • Signal categories and range metadata on get_signals responses
  • rejected media buy status with rejection_reason
  • idempotency_key on update_media_buy and sync_creatives
  • Removed not:{} patterns from 7 response schemas for Python codegen compatibility

Version 3.0.0-beta.3

Status: Beta | AdCP 3.0 overview

What’s New

  1. Delivery Forecasting - Predict campaign performance before committing budget. New DeliveryForecast type with budget curves, forecast methods (estimate, modeled, guaranteed), daypart targeting windows, and GRP demographic notation. Forecasts attach to product allocations and proposals, enabling budget curve analysis across spend levels.
  2. Brand Protocol - Brand discovery and identity resolution via brand.json. Four manifest variants (authoritative redirect, house redirect, brand agent, house portfolio) with builder tools, registry, and admin UI. Brands declare authorized_operators to control which agents can represent them.
  3. Account Management - sync_accounts task lets agents declare brand portfolios to sellers with upsert semantics. Account capabilities in get_adcp_capabilities describe billing requirements and operator authorization. Two billing models (operator, agent) with account lifecycle (active, pending_approval, payment_required, suspended, closed). account_id is optional on create_media_buy — single-account agents can omit it.
  4. Commerce Media - Catalog-driven product discovery (catalog on get_products), catalog-driven packages, per-catalog-item delivery reporting (by_catalog_item), store catchment targeting, and catalog_types on products. Cross-retailer GTIN matching via catalog selectors. Commerce attribution metrics (roas, new_to_brand_rate) in delivery response. See the Commerce Media Guide and Catalogs.
  5. Creative Delivery Reporting - Per-creative metrics breakdown within by_package in delivery responses. New get_creative_delivery task on creative agents for variant-level delivery data with manifests. Three variant tiers: standard (1:1), asset group optimization, and generative creative. Format-level reported_metrics declare which metrics each format can provide.
  6. CPA & TIME Pricing Models - Two new pricing models. CPA (Cost Per Acquisition) for outcome-based campaigns — covers CPO, CPL, CPI use cases differentiated by event_type. TIME for sponsorship-based advertising where price scales with duration (hour, day, week, month) with optional min/max constraints.
  7. Conversion Tracking - New events protocol with sync_event_sources and log_event tasks for attribution and measurement.
  8. Signal Catalog - Data providers become first-class members with signal definitions, categories, targeting schemas, and value types. New schemas for signal discovery and integration into products.
  9. Cursor-Based Pagination - All list operations (list_creatives, tasks_list, list_property_lists, get_property_list, get_media_buy_artifacts) standardized on cursor-based pagination with shared pagination-request.json and pagination-response.json schemas.
  10. Accessibility in Creative Formats - Two-layer accessibility model. Format-level wcag_level (A/AA/AAA) and requires_accessible_assets flag. Asset-level metadata for inspectable assets (alt text, captions, transcripts) and self-declared properties for opaque assets (keyboard navigable, motion control). Buyers can filter by wcag_level in list_creative_formats.
  11. Targeting Restrictions & Geo Exclusion - Functional restriction overlays for age (with verification methods), device platform (Sec-CH-UA-Platform values), and language localization. Geographic exclusion fields (geo_countries_exclude, geo_regions_exclude, geo_metros_exclude, geo_postal_areas_exclude) enable RCT holdout groups and regulatory exclusions.
  12. Typed Asset Requirements - Discriminated union schemas for all 12 asset types (image, video, audio, text, markdown, HTML, CSS, JavaScript, VAST, DAAST, URL, webhook) using asset_type as discriminator.
  13. Universal Macros - universal-macro.json enum defining all 54 standard ad-serving macros, including 6 new additions: GPP_SID, IP_ADDRESS, STATION_ID, COLLECTION_NAME, INSTALLMENT_ID, AUDIO_DURATION.
  14. Brand Manifest Improvements - Structured tone object with voice, attributes, dos, donts fields. Logo objects gain orientation, background, variant, usage fields.

Breaking Changes

Changebeta.2beta.3
Paginationlimit/offsetCursor-based pagination object
Brand manifest tonestring | objectObject only with structured fields

Other Changes

  • optimization_goals on package requests — buyers can specify conversion and metric optimization goals when creating or updating media buys
  • Attribution window metadata on delivery response: click_window_days, view_window_days, and attribution model (last_touch, first_touch, linear, time_decay, data_driven)
  • Channel fields on property and product schemas: supported_channels and channels referencing Media Channel Taxonomy enum
  • account_id added to get_media_buy_delivery and get_media_buy_artifacts requests
  • date_range_support in reporting capabilities
  • minItems: 1 on request-side arrays for stricter validation
  • FormatCategory enum and type field removed from Format objects (use assets array instead)
  • format_id optional in preview_creative (falls back to creative_manifest.format_id)
  • selection_mode on repeatable asset groups to distinguish sequential (carousel) from optimize (asset pool) behavior
  • Session ID fallback recommendation for MCP agent context_id

Version 3.0.0-beta.2

Status: Beta | Full Changelog | AdCP 3.0 overview Building on beta.1, this release adds account-level billing, property targeting controls, CTV technical specs, and agent-driven UI rendering for Sponsored Intelligence.

What’s New

  1. Accounts & Agents - AdCP now distinguishes Brand (whose products are advertised), Account (who gets billed), and Agent (who places the buy). New account_id field on media buys, product queries, and creative operations enables multi-account billing with rate cards and credit limits.
  2. Property Targeting - Products can declare property_targeting_allowed to let buyers target a subset of publisher properties. When enabled, buyers pass a property_list in their targeting overlay and the package runs on the intersection.
  3. A2UI for Sponsored Intelligence - Sponsored Intelligence sessions now support agent-driven UI rendering via MCP Apps, enabling rich interactive experiences within AI assistants.
  4. CTV & Streaming Constraints - Video formats gain technical constraint fields for frame rate, HDR, GOP structure, and moov atom position. Audio formats add codec, sampling rate, channel layout, and loudness normalization (LUFS/true peak) fields.
  5. Creative Protocol Discovery - get_adcp_capabilities now includes "creative" in supported_protocols, letting agents discover creative services at runtime.

Schema Changes

  • New account.json, list-accounts-request.json, list-accounts-response.json schemas
  • account_id added to create-media-buy-request, get-products-request, sync-creatives-request, and their responses
  • Shared price-guidance.json schema extracted to fix duplicate type generation across pricing options
  • property_targeting_allowed and property_list fields added to product and targeting overlay schemas
  • Video/audio asset schemas extended with CTV technical constraint fields

Removed

RemovedReplacement
list_property_features taskget_adcp_capabilities
list_authorized_properties taskget_adcp_capabilities portfolio section
adcp-extension.json schemaget_adcp_capabilities task
assets_required format fieldassets array with required boolean
preview_image format fieldformat_card object

Version 3.0.0-beta.1

Status: Beta | Full Changelog | AdCP 3.0 overview
This is a beta release. While the API is stable for testing, breaking changes may occur before the final 3.0.0 release. We encourage early adopters to test and provide feedback.

What’s New

Version 3.0.0 is a major release that expands AdCP beyond media buying into governance, brand suitability, and conversational commerce. See the AdCP 3.0 overview for detailed upgrade instructions. 🎯 Key Themes:
  1. Media Channel Taxonomy - Complete overhaul from 9 format-oriented channels to 19 planning-oriented channels that reflect how buyers allocate budgets. See Media Channel Taxonomy.
  2. Governance Protocol - New protocol domain for property lists, content standards, and brand suitability evaluation with collaborative calibration workflows.
  3. Sponsored Intelligence Protocol - Conversational brand experiences in AI assistants. Defines how hosts invoke brand agent endpoints for rich engagement without breaking conversational flow. See Sponsored Intelligence.
  4. Protocol-Level Capability Discovery - get_adcp_capabilities task replaces agent card extensions, providing runtime discovery of capabilities, supported protocols, and geo targeting systems.
  5. Creative Assignment Weighting - Replace simple creative ID arrays with weighted assignments supporting traffic allocation and placement targeting.
  6. Global Geo Targeting - Structured geographic targeting with named systems (Nielsen DMA, UK ITL, Eurostat NUTS2, etc.) for international markets.

Breaking Changes Summary

Changev2.xv3.x
Channels9 values19 planning-oriented values
Creative assignmentcreative_ids: [...]creative_assignments: [{...}]
Metro targetinggeo_metros: ["501"]geo_metros: [{ system, code }]
Postal targetinggeo_postal_codesgeo_postal_areas with system
Asset discoveryassets_required: [...]assets: [{ asset_id, required }]
See AdCP 3.0 overview for detailed before/after examples and migration steps.

New Protocol Domains

Governance Protocol

Brand suitability and inventory curation:
  • Property Lists - create_property_list, get_property_list, update_property_list, delete_property_list, list_property_lists
  • Content Standards - create_content_standards, get_content_standards, update_content_standards, calibrate_content, validate_content_delivery
  • Product Filtering - Pass property lists to get_products for compliant inventory discovery
Conversational brand experiences:
  • Session Management - si_get_offering, si_initiate_session, si_send_message, si_terminate_session
  • Capability Negotiation - Brands declare modalities (voice, video, avatar), hosts respond with supported capabilities
  • Commerce Handoff - Seamless transition to AdCP for transactions
See SI Chat Protocol for complete documentation.

New Features

  • get_adcp_capabilities task - Runtime capability discovery replacing agent card extensions
  • Unified asset discovery - assets array with required boolean for full asset visibility
  • Property list filtering - Pass governance lists to get_products for brand-safe inventory

Removed in v3

RemovedReplacement
adcp-extension.json agent cardget_adcp_capabilities task
list_authorized_properties taskget_adcp_capabilities portfolio section
assets_required in formatsassets array with required boolean
preview_image in formatsformat_card object
creative_ids in packagescreative_assignments array
geo_postal_codesgeo_postal_areas
fixed_rate in pricingfixed_price
price_guidance.floorfloor_price (top-level)

Quick Migration Checklist

  • Update channel enum values (taxonomy guide)
  • Replace creative_ids with creative_assignments
  • Add system specification to metro/postal targeting
  • Implement get_adcp_capabilities task
  • Update format parsing to use assets array
View AdCP 3.0 overview →

Version 2.5.0

Released: November 2025 | Full Changelog

What’s New

Version 2.5.0 is a developer experience and API refinement release that significantly improves type safety, schema infrastructure, and creative workflow performance. This release prepares AdCP for production-scale integrations with better TypeScript/Python code generation, stricter validation semantics, and flexible schema versioning. 🎯 Key Themes:
  1. Type Safety & Code Generation - Comprehensive discriminator fields throughout the protocol enable excellent TypeScript/Python type inference and eliminate ambiguous union types.
  2. Batch Creative Previews - Generate previews for up to 50 creatives in a single API call with optional direct HTML embedding, reducing preview generation time by 5-10x.
  3. Schema Infrastructure - Build-time schema versioning with semantic paths (/schemas/2.5.0/, /schemas/v2/, /schemas/v2.5/) enables version pinning and automatic minor version tracking.
  4. API Consistency - Atomic response semantics (success XOR error) and standardized webhook payloads eliminate ambiguity and improve reliability.
  5. Signal Protocol Refinement - Activation keys returned per deployment with permission-based access, enabling proper multi-platform signal activation.
  6. Template Formats - Dynamic creative sizing with accepts_parameters enables formats that accept runtime dimensions, durations, and other parameters.
  7. Enhanced Product Discovery - Structured filters with date ranges, budget constraints, country targeting, and channel filtering improve product search precision.

Key Enhancements

Type Safety & Code Generation

  • Discriminator fields added to all discriminated union types (destinations, pricing, property selectors, preview requests/responses)
  • Atomic response semantics - All task responses now use strict success XOR error patterns with oneOf discriminators
  • Explicit type declarations on all const fields for proper TypeScript literal type generation
  • 31 new enum schemas extracted from inline definitions for better reusability

Schema Infrastructure

  • Build-time versioning - Schemas now support semantic version paths (/schemas/2.5.0/), major version aliases (/schemas/v2/), and minor version aliases (/schemas/v2.5/)
  • Consistent media buy responses - Both create_media_buy and update_media_buy now return full Package objects
  • Standardized webhook payload - Protocol envelope at top-level with task data under result field

Product Discovery

  • Structured filters - Extracted filter objects into separate schemas (product-filters.json, creative-filters.json, signal-filters.json)
  • Enhanced filtering - Date ranges (start_date, end_date), budget ranges with currency, country targeting, and channel filtering
  • Full enum support - Filters now accept complete enum values without artificial restrictions

Signal Protocol

  • Activation keys - activate_signal now returns deployment-specific activation keys (segment IDs, key-value pairs) based on authenticated permissions
  • Consistent terminology - Standardized on “deployments” throughout signal requests and responses

Creative Protocol

  • Batch preview support - Preview multiple creatives in one request (preview_creative supports 1-50 items)
  • Direct HTML embedding - Responses can include raw HTML for iframe-free rendering
  • Simplified brand manifest - Single required field (name) eliminates duplicate type generation
  • Template formats - accepts_parameters field enables dynamic formats (e.g., display_[width]x[height], video_[duration]s)
  • Inline creative updates - sync_creatives task provides upsert semantics for updating creatives in existing campaigns

Documentation & Testing

  • Testable documentation - All code examples can be validated against live schemas
  • Client library prominence - NPM badges and installation instructions in intro
  • Fixed 389 broken links across 50 documentation files

Migration Guide

Discriminator Fields (Breaking)

Many schemas now require explicit discriminator fields. Update your code to include these fields: Signal Destinations:
// Before
{
  "platform_id": "ttd"
}

// After
{
  "type": "platform",
  "platform_id": "ttd"
}
Property Selectors:
// Before
{
  "publisher_domain": "dailyplanet.com",
  "property_ids": ["cnn_ctv_app"]
}

// After
{
  "publisher_domain": "dailyplanet.com",
  "selection_type": "by_id",
  "property_ids": ["cnn_ctv_app"]
}
Pricing Options:
// Before
{
  "pricing_model": "cpm",
  "rate": 12.50
}

// After (fixed pricing uses fixed_price field)
{
  "pricing_model": "cpm",
  "fixed_price": 12.50
}

Webhook Payload Structure (Breaking)

Webhook payloads now use protocol envelope at top-level: Before:
{
  "task_id": "task_123",
  "status": "completed",
  "media_buy_id": "mb_456",
  "packages": [...]
}
After:
{
  "task_id": "task_123",
  "task_type": "create_media_buy",
  "status": "completed",
  "timestamp": "2025-11-21T10:30:00Z",
  "result": {
    "media_buy_id": "mb_456",
    "packages": [...]
  }
}

Signal Activation Response (Breaking)

activate_signal response changed from single key to deployments array: Before:
{
  "activation_key": "segment_123"
}
After:
{
  "deployments": [
    {
      "destination": {"type": "platform", "platform_id": "ttd"},
      "activation_key": "segment_123",
      "status": "active"
    }
  ]
}

Template Formats

Formats can now accept parameters for dynamic sizing: Template Format Definition:
{
  "format_id": {"agent_url": "https://creative.adcontextprotocol.org", "id": "display_static"},
  "accepts_parameters": ["dimensions"],
  "renders": [{
    "role": "primary",
    "parameters_from_format_id": true
  }]
}
The parameters_from_format_id: true flag indicates dimensions come from the format_id at usage time. Usage (parameterized format_id):
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_static",
    "width": 300,
    "height": 250
  }
}
This creates a specific 300x250 variant of the display_static template.

Enhanced Product Filtering

New structured filters in get_products:
{
  "filters": {
    "start_date": "2026-01-01",
    "end_date": "2026-03-31",
    "budget_range": {
      "min": 10000,
      "max": 50000,
      "currency": "USD"
    },
    "countries": ["US", "CA"],
    "channels": ["display", "ctv"]
  }
}

Schema Versioning

New version paths available:
  • /schemas/2.5.0/ - Exact version (recommended for production)
  • /schemas/v2.5/ - Latest 2.5.x patch (auto-updates for patch releases)
  • /schemas/v2/ - Latest 2.x release (auto-updates for minor/patch)
  • /schemas/latest/ - Backward compat alias (same as v2)

Breaking Changes

  • Discriminator fields required in destinations, property selectors, pricing options, and preview requests
  • Webhook payload structure - Task data moved under result field; domain no longer required
  • Signal activation response - Changed from activation_key string to deployments array
  • Removed legacy creative fields - media_url, click_url, duration removed from list_creatives response

Non-Breaking Additions

  • Application context object (optional) in all task requests
  • product_card and format_card fields (optional) for visual UI support
  • Batch preview mode in preview_creative (backward compatible)
  • Package pricing fields in delivery reporting (already documented, now schema-enforced)
  • Minor version symlinks (/schemas/v2.5/)

Version 2.3.0

Released: October 2025 | Full Changelog

What’s New

Publisher-Owned Property Definitions - Properties are now owned by publishers and referenced by agents, following the IAB Tech Lab sellers.json model. This eliminates duplication and creates a single source of truth for property information. Placement Targeting - Products can now define multiple placements (e.g., homepage banner, article sidebar), and buyers can assign different creatives to each placement within a product purchase. Simplified Budgets - Budget is now only specified at the package level, enabling mixed-currency campaigns and eliminating redundant aggregation at the media buy level.

Migration Guide

Publisher-Owned Properties

Before:
{
  "properties": [{
    "publisher_domain": "dailyplanet.com",
    "property_name": "CNN CTV App",
    "property_tags": ["ctv", "premium"]
  }]
}
After:
{
  "publisher_properties": [
    {
      "publisher_domain": "dailyplanet.com",
      "property_tags": ["ctv"]
    }
  ]
}
Buyers now fetch property definitions from https://dailyplanet.com/.well-known/adagents.json.

Remove Media Buy Budget

Before:
{
  "budget": 50000,
  "packages": [...]
}
After:
{
  "packages": [
    {"package_id": "p1", "budget": 30000},
    {"package_id": "p2", "budget": 20000}
  ]
}
Budget is specified per package only.

Breaking Changes

  • properties field in products → publisher_properties
  • list_authorized_properties returns publisher_domains array
  • Removed budget from create_media_buy/update_media_buy requests

Version 2.2.0

Released: October 2025 | Full Changelog

What’s New

Build Creative Alignment - The build_creative task now follows a clear “manifest-in → manifest-out” transformation model with consistent parameter naming.

Migration Guide

Before:
{
  "source_manifest": {...},
  "promoted_offerings": [...]
}
After:
{
  "creative_manifest": {
    "format_id": {...},
    "assets": {
      "promoted_offerings": [...]
    }
  }
}

Breaking Changes

  • build_creative parameter renamed: source_manifestcreative_manifest
  • Removed promoted_offerings as top-level parameter (now in manifest assets)

Version 2.1.0

Released: January 2025 | Full Changelog

What’s New

Simplified Asset Schema - Separated asset payload schemas from format requirement schemas, eliminating redundancy. Asset types are now determined by format specifications rather than declared in manifests.

Migration Guide

Before:
{
  "assets": {
    "banner_image": {
      "asset_type": "image",
      "url": "https://cdn.example.com/banner.jpg",
      "width": 300,
      "height": 250
    }
  }
}
After:
{
  "assets": {
    "banner_image": {
      "url": "https://cdn.example.com/banner.jpg",
      "width": 300,
      "height": 250
    }
  }
}

Breaking Changes

  • Removed asset_type field from creative manifest payloads
  • Schema paths changed: /creative/asset-types/*.json/core/assets/*-asset.json
  • Constraint fields moved from asset payloads to format specifications

Version 2.0.0

Released: October 2025 | Full Changelog

What’s New

First production release of the Advertising Context Protocol with:
  • 8 Media Buy Tasks - Complete workflow from product discovery to delivery reporting
  • 3 Creative Tasks - AI-powered creative generation and management
  • 2 Signals Tasks - First-party data integration
  • Standard Formats - Industry-standard display, video, and native formats
  • Multi-Protocol Support - Works with MCP and A2A

Core Features

  • Natural language product discovery with brief-based targeting
  • Asynchronous task management with human-in-the-loop approvals
  • JSON Schema validation for all requests and responses
  • Publisher-owned property definitions via .well-known/adagents.json
  • Comprehensive format specifications with asset requirements

Versioning Policy

AdCP follows Semantic Versioning 2.0.0:
  • PATCH (x.x.N) - Bug fixes, documentation, clarifications
  • MINOR (x.N.0) - New features, backward-compatible additions
  • MAJOR (N.0.0) - Breaking changes

Deprecation Process

Breaking changes follow a 6-month deprecation cycle:
  1. Deprecation Notice - Feature marked deprecated in minor release
  2. Transition Period - Minimum 6 months support with warnings
  3. Migration Guide - Detailed upgrade path provided
  4. Breaking Change - Removed in next major version

Additional Resources