> ## 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.

# Release Notes

> AdCP release notes with version highlights and migration guides. Covers breaking changes, new tasks, and schema updates for each major release.

High-level summaries of major AdCP releases with migration guidance. For detailed technical changelogs, see [CHANGELOG.md](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md).

***

## Version 3.0.0-rc.2

**Status:** Release Candidate | [AdCP 3.0 overview](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3)

### What's New

1. **Brand Protocol Rights Lifecycle** — `get_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. **Shows and Episodes** — Content dimension for products representing persistent programs (podcasts, TV series, YouTube channels). `show_ids` on products, `shows` array in `get_products` responses. Distribution identifiers for cross-seller matching, episode lifecycle states, break-based ad inventory, talent linking, show relationships, international content ratings.

4. **AI Media Channel** — `sponsored_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. **Account Model Simplification** — Removed `account_resolution` capability. `require_operator_auth` now determines both auth model and account reference style.

### Breaking Changes

| Change                     | rc.1                            | rc.2                                                                                  |
| -------------------------- | ------------------------------- | ------------------------------------------------------------------------------------- |
| Brand tone                 | String or object                | Object only — `{ voice, attributes, dos, donts }`                                     |
| Account resolution         | `account_resolution` capability | Removed — `require_operator_auth` determines account model                            |
| delete\_content\_standards | Documented task                 | Removed — archive standards via `update_content_standards` instead                    |
| get\_property\_features    | Standalone task                 | Removed — use property list filters and `get_adcp_capabilities` for feature discovery |

### 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](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3)

### What's New

1. **Keyword Targeting** — `keyword_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 Redesign** — `optimization_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 Optimization** — `reach` 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 Cap** — `frequency_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_capabilities` → `media_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 Codes** — `ch_plz` and `at_plz` added to the postal-system enum, with corresponding updates to `get_adcp_capabilities`.

11. **Brand Identity Unification** — `brand-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 Products** — `estimated_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 Mode** — `proposal_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 Catalogs** — `sync_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 Tasks** — `get_media_buys` for operational campaign monitoring, `get_creative_features` for creative governance, `sync_audiences` for CRM-based audience management.

16. **Buying Mode** — `buying_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 Mode** — `sandbox` protocol parameter on all tasks for testing without side effects.

18. **Creative Brief Type** — `CreativeBrief` type on `build_creative` request for structured creative direction.

19. **Campaign Reference** — `campaign_ref` field for cross-operation campaign grouping across multiple media buys.

20. **Geo Proximity Targeting** — `geo_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 Acknowledgment** — `refine` redesigned from nested object to typed change-request array with `scope` discriminator (`request`, `product`, `proposal`). Field renames: `product_id`/`proposal_id` → `id`, `notes` → `ask`. Seller responses include `refinement_applied` — a positionally-matched array with per-ask `status` (`applied`, `partial`, `unable`) and notes.

22. **AI Provenance and Disclosure** — `provenance` 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 Compliance** — `compliance` 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 Recovery** — `recovery` 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 Ergonomics** — `fields` 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 Deactivation** — `action` field on `activate_signal` with `activate` (default) and `deactivate` values for compliance-driven signal removal.

28. **Signal Metadata** — `categories` (valid values for categorical signals) and `range` (min/max for numeric signals) on signal entries in `get_signals` responses.

29. **Media Buy Rejection** — `rejected` status added to media-buy-status enum with `rejection_reason` on the MediaBuy object.

30. **Idempotency** — `idempotency_key` on `update_media_buy` and `sync_creatives` for at-most-once execution. `buyer_ref` documented as the idempotency key for `create_media_buy`.

### Breaking Changes

| Change                     | beta.3                                                | rc.1                                                                    |
| -------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------- |
| Brand identity             | Inline `brand_manifest` object                        | `brand` (BrandRef: `{ domain, brand_id }`) — resolved at execution time |
| Product exposure estimates | `estimated_exposures` (integer)                       | `forecast` (DeliveryForecast object)                                    |
| Proposal refinement        | `proposal_id` on `get_products` request               | Removed — use `buying_mode: "refine"` with typed `refine` array         |
| Optimization goals         | `optimization_goal` (singular object)                 | `optimization_goals` (array of discriminated union)                     |
| AudienceMember identity    | `external_id` in uid-type enum                        | `external_id` is required top-level field, removed from enum            |
| Signals deliver\_to        | Nested `deliver_to` object                            | Top-level `destinations` and `countries`                                |
| Signals pricing            | `pricing: { cpm }`                                    | Structured `pricing_options[]` array                                    |
| report\_usage              | `kind` and `operator_id` fields                       | Both removed                                                            |
| Refinement model           | `refine` object with `overall`/`products`/`proposals` | `refine` array of typed change-requests with `scope` discriminator      |
| Creative assignments       | `{ creative_id: package_id[] }` map                   | Typed array with `creative_id`, `package_id`, `weight`, `placement_ids` |
| Signals account            | String `account_id`                                   | `account` (AccountReference object)                                     |
| Signals deployments        | `deployments` field                                   | `destinations` (renamed)                                                |
| Package catalogs           | `catalog` (single object)                             | `catalogs` (array)                                                      |
| buying\_mode               | Not present                                           | Required — three modes: `brief`, `wholesale`, `refine`                  |
| Creative brief delivery    | Top-level `creative_brief` on `build_creative`        | `brief` asset type in manifest `assets` map                             |
| Creative capability        | `supports_brief`                                      | `supports_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](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3)

### 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](/dist/docs/3.0.0-rc.2/guides/commerce-media) and [Catalogs](/dist/docs/3.0.0-rc.2/creative/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`, `SHOW_NAME`, `EPISODE_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

| Change              | beta.2             | beta.3                             |
| ------------------- | ------------------ | ---------------------------------- |
| Pagination          | `limit`/`offset`   | Cursor-based `pagination` object   |
| Brand manifest tone | `string \| object` | Object 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 deprecated; `type` field on Format objects now optional
* `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](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md#300-beta2) | [AdCP 3.0 overview](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3)

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

| Removed                           | Replacement                               |
| --------------------------------- | ----------------------------------------- |
| `list_property_features` task     | `get_adcp_capabilities`                   |
| `list_authorized_properties` task | `get_adcp_capabilities` portfolio section |
| `adcp-extension.json` schema      | `get_adcp_capabilities` task              |
| `assets_required` format field    | `assets` array with `required` boolean    |
| `preview_image` format field      | `format_card` object                      |

***

## Version 3.0.0-beta.1

**Status:** Beta | [Full Changelog](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md#300-beta1) | [AdCP 3.0 overview](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3)

<Warning>
  **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.
</Warning>

### 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](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3) 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](/dist/docs/3.0.0-rc.2/reference/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](/dist/docs/3.0.0-rc.2/sponsored-intelligence/overview).

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

| Change              | v2.x                     | v3.x                               |
| ------------------- | ------------------------ | ---------------------------------- |
| Channels            | 9 values                 | 19 planning-oriented values        |
| Creative assignment | `creative_ids: [...]`    | `creative_assignments: [{...}]`    |
| Metro targeting     | `geo_metros: ["501"]`    | `geo_metros: [{ system, code }]`   |
| Postal targeting    | `geo_postal_codes`       | `geo_postal_areas` with system     |
| Asset discovery     | `assets_required: [...]` | `assets: [{ asset_id, required }]` |

See [AdCP 3.0 overview](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3) 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

#### Sponsored Intelligence Protocol

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 [Sponsored Intelligence Overview](/dist/docs/3.0.0-rc.2/sponsored-intelligence/overview) 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

| Removed                           | Replacement                               |
| --------------------------------- | ----------------------------------------- |
| `adcp-extension.json` agent card  | `get_adcp_capabilities` task              |
| `list_authorized_properties` task | `get_adcp_capabilities` portfolio section |
| `assets_required` in formats      | `assets` array with `required` boolean    |
| `preview_image` in formats        | `format_card` object                      |
| `creative_ids` in packages        | `creative_assignments` array              |
| `geo_postal_codes`                | `geo_postal_areas`                        |
| `fixed_rate` in pricing           | `fixed_price`                             |
| `price_guidance.floor`            | `floor_price` (top-level)                 |

### Quick Migration Checklist

* [ ] Update channel enum values ([taxonomy guide](/dist/docs/3.0.0-rc.2/reference/media-channel-taxonomy))
* [ ] 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 →](/dist/docs/3.0.0-rc.2/reference/whats-new-in-v3)**

***

## Version 2.5.0

**Released:** November 2025 | [Full Changelog](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md#250)

### 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:**

```json theme={null}
// Before
{
  "platform_id": "ttd"
}

// After
{
  "type": "platform",
  "platform_id": "ttd"
}
```

**Property Selectors:**

```json theme={null}
// 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:**

```json theme={null}
// 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:**

```json theme={null}
{
  "task_id": "task_123",
  "status": "completed",
  "media_buy_id": "mb_456",
  "packages": [...]
}
```

**After:**

```json theme={null}
{
  "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:**

```json theme={null}
{
  "activation_key": "segment_123"
}
```

**After:**

```json theme={null}
{
  "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:**

```json theme={null}
{
  "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):**

```json theme={null}
{
  "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`:

```json theme={null}
{
  "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](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md#230)

### 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:**

```json theme={null}
{
  "properties": [{
    "publisher_domain": "dailyplanet.com",
    "property_name": "CNN CTV App",
    "property_tags": ["ctv", "premium"]
  }]
}
```

**After:**

```json theme={null}
{
  "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:**

```json theme={null}
{
  "budget": 50000,
  "packages": [...]
}
```

**After:**

```json theme={null}
{
  "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](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md#220)

### 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:**

```json theme={null}
{
  "source_manifest": {...},
  "promoted_offerings": [...]
}
```

**After:**

```json theme={null}
{
  "creative_manifest": {
    "format_id": {...},
    "assets": {
      "promoted_offerings": [...]
    }
  }
}
```

### Breaking Changes

* `build_creative` parameter renamed: `source_manifest` → `creative_manifest`
* Removed `promoted_offerings` as top-level parameter (now in manifest assets)

***

## Version 2.1.0

**Released:** January 2025 | [Full Changelog](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md#210)

### 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:**

```json theme={null}
{
  "assets": {
    "banner_image": {
      "asset_type": "image",
      "url": "https://cdn.example.com/banner.jpg",
      "width": 300,
      "height": 250
    }
  }
}
```

**After:**

```json theme={null}
{
  "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](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md#200)

### 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](https://semver.org/):

* **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

* **Technical Changelog** - [CHANGELOG.md](https://github.com/adcontextprotocol/adcp/blob/main/CHANGELOG.md)
* **GitHub Releases** - [Release Archive](https://github.com/adcontextprotocol/adcp/releases)
* **Community** - [Slack](https://join.slack.com/t/agenticads/shared_invite/zt-3c5sxvdjk-x0rVmLB3OFHVUp~WutVWZg)
* **Issues** - [GitHub Issues](https://github.com/adcontextprotocol/adcp/issues)
* **Support** - [support@adcontextprotocol.org](mailto:support@adcontextprotocol.org)
