From 5721d2acaa06da38da9886774b5fe4ad9c76c9f7 Mon Sep 17 00:00:00 2001 From: gagliathebuilder Date: Wed, 8 Jul 2026 16:43:05 -0700 Subject: [PATCH 1/2] docs: document creative format discovery deprecation Co-authored-by: Cursor --- ...ve-format-discovery-deprecation-posture.md | 5 +++ docs/building/by-layer/L4/build-an-agent.mdx | 2 + docs/creative/canonical-formats-migration.mdx | 2 +- .../creative/implementing-creative-agents.mdx | 42 ++++++++++--------- docs/creative/specification.mdx | 35 +++++++++------- .../task-reference/list_creative_formats.mdx | 10 +++++ .../task-reference/list_creatives.mdx | 2 +- docs/reference/release-notes.mdx | 28 +++++++++++++ .../source/protocols/creative/index.yaml | 12 ++++-- .../creative/scenarios/native_in_feed.yaml | 1 + .../source/protocols/media-buy/index.yaml | 2 + .../scenarios/creative_reception.yaml | 1 + .../specialisms/creative-ad-server/index.yaml | 1 + .../generative-seller.yaml | 5 ++- .../creative-generative/index.yaml | 1 + .../specialisms/creative-template/index.yaml | 2 + .../specialisms/sales-broadcast-tv/index.yaml | 1 + .../sales-catalog-driven/index.yaml | 1 + .../sales-proposal-mode/index.yaml | 1 + ...pagination-integrity-creative-formats.yaml | 2 + .../source/universal/schema-validation.yaml | 1 + 21 files changed, 118 insertions(+), 39 deletions(-) create mode 100644 .changeset/creative-format-discovery-deprecation-posture.md diff --git a/.changeset/creative-format-discovery-deprecation-posture.md b/.changeset/creative-format-discovery-deprecation-posture.md new file mode 100644 index 0000000000..d061cafbca --- /dev/null +++ b/.changeset/creative-format-discovery-deprecation-posture.md @@ -0,0 +1,5 @@ +--- +"adcontextprotocol": patch +--- + +Document the 3.2 creative-format discovery deprecation posture and relax conformance so agents that declare equivalent canonical-format discovery are not required to expose `list_creative_formats`. Buyers MUST NOT assume the v1 discovery tool when canonical discovery is declared. `list_creatives` remains the creative-library query task; v1 `format_id` / `format_ids[]` remain supported through 4.x. Compliance storyboard steps that call `list_creative_formats` are gated with `requires_tool` so migrated agents grade those steps `not_applicable` rather than failing. diff --git a/docs/building/by-layer/L4/build-an-agent.mdx b/docs/building/by-layer/L4/build-an-agent.mdx index 3e6bb913cb..61fc041744 100644 --- a/docs/building/by-layer/L4/build-an-agent.mdx +++ b/docs/building/by-layer/L4/build-an-agent.mdx @@ -173,6 +173,8 @@ npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp media_buy_seller - Storyboards exercise every required tool call and validate response shapes. The storyboard runner uses sandbox mode by default — your agent receives `sandbox: true` on all account references and should return simulated data without real platform calls. A passing run means your agent is protocol-compliant. +The sample transcript below includes `list_creative_formats` because the current `media_buy_seller` storyboard still exercises that v1 compatibility path. In 3.2+, agents that declare equivalent canonical-format discovery (`get_products.format_options[]` for sales agents, `get_adcp_capabilities.creative.supported_formats` for creative agents) are not required to expose `list_creative_formats` for new discovery; absence of the tool grades `not_applicable` on gated storyboard steps rather than failing conformance. See the [canonical formats migration guide](/docs/creative/canonical-formats-migration) and [`list_creative_formats`](/docs/creative/task-reference/list_creative_formats). + ``` media_buy_seller (9 steps) ✓ get_adcp_capabilities diff --git a/docs/creative/canonical-formats-migration.mdx b/docs/creative/canonical-formats-migration.mdx index d92c670b69..888bde6dd7 100644 --- a/docs/creative/canonical-formats-migration.mdx +++ b/docs/creative/canonical-formats-migration.mdx @@ -22,7 +22,7 @@ Most of AdCP doesn't change. v2 builds on the existing primitives: - Manifest envelope shape (`creative-manifest.json` keyed by `assets` map) — unchanged - Response envelopes, error schemas, common types — unchanged - v1 named formats (`format.json` with compound `format_id`) — still supported through 4.x -- v1 `list_creative_formats` tool — deprecated but functional through 4.x; removed at 5.0 +- v1 `list_creative_formats` tool — deprecated but functional through 4.x; removal aligned with the v1 `format_ids` deprecation calendar (2027-Q4 floor / 2029-Q1 ceiling; adoption-driven 5.0 cut sequence — see [When does v1 `format_ids` get removed?](#when-does-v1-format_ids-get-removed)) - All existing producers and consumers — continue to work without changes ## Side-by-side: a v1 named format → v2 product format declaration diff --git a/docs/creative/implementing-creative-agents.mdx b/docs/creative/implementing-creative-agents.mdx index 9428c7bd50..231f748fca 100644 --- a/docs/creative/implementing-creative-agents.mdx +++ b/docs/creative/implementing-creative-agents.mdx @@ -4,7 +4,7 @@ description: "How to build an AdCP creative agent that defines formats, validate "og:title": "AdCP — Implementing Creative Agents" --- -> **Canonical formats in 3.1**: in the canonical-formats path, creative agents declare what they can produce via `creative.supported_formats` on `get_adcp_capabilities` (replacing the v1 `list_creative_formats` overload for creative agents). Each entry uses the same `ProductFormatDeclaration` shape as a product's inline `format_options[i]`. See [canonical-formats](/docs/creative/canonical-formats). +> **Canonical formats in 3.1+ / preferred discovery in 3.2:** creative agents declare what they can produce via `creative.supported_formats` on `get_adcp_capabilities` (replacing the v1 `list_creative_formats` overload for creative agents). Each entry uses the same `ProductFormatDeclaration` shape as a product's inline `format_options[i]`. Sales agents use `get_products.format_options[]` for product-level format discovery. `list_creative_formats` remains a v1 compatibility path through 4.x. See [canonical-formats](/docs/creative/canonical-formats) and the [migration guide](/docs/creative/canonical-formats-migration). This guide explains how to implement a creative agent that defines and manages creative formats. @@ -31,13 +31,14 @@ The buyer passes all assets inline with each call. Your agent applies a template | Task | Role | |---|---| -| `list_creative_formats` | Discover available templates and their asset requirements | +| `get_adcp_capabilities.creative.supported_formats` | Preferred 3.2+ discovery of templates / producible formats | +| `list_creative_formats` | Deprecated v1 compatibility discovery through 4.x | | `preview_creative` | Render a template with provided assets | | `build_creative` | Transform input assets into a serving tag | **Capabilities:** `supports_transformation: true` -The buyer's workflow: discover your formats → preview with real assets → request built creatives for trafficking. +The buyer's workflow: discover your formats (canonical `supported_formats`, or v1 `list_creative_formats` through 4.x) → preview with real assets → request built creatives for trafficking. ### Stateful (pre-loaded): ad servers @@ -64,14 +65,16 @@ Buyers push creative assets or catalog items to your platform. You validate, sto | Task | Role | |---|---| -| `list_creative_formats` | Discover what formats you accept | +| `get_products.format_options[]` | Preferred 3.2+ discovery of formats your products accept | +| `list_creative_formats` | Deprecated v1 compatibility discovery through 4.x | | `sync_creatives` | Accept pushed assets or catalog items | | `preview_creative` | Preview pushed creatives in your platform's environment | | `get_creative_delivery` | Report delivery metrics | +| `list_creatives` | Browse the creative library after sync (not deprecated) | **Capabilities:** `has_creative_library: true` -The buyer's workflow: discover your accepted formats → push assets → preview in your environment. +The buyer's workflow: discover your accepted formats (product `format_options[]`, or v1 `list_creative_formats` through 4.x) → push assets → preview in your environment. ### Choosing your model @@ -294,18 +297,18 @@ When formats reference your agent_url, you are the authority for: ## Required tasks -Creative agents must implement these two tasks: +Creative agents must implement format discovery and preview. Preferred 3.2+ discovery is canonical; `list_creative_formats` is the v1 compatibility path through 4.x. -### list_creative_formats +### Format discovery (`creative.supported_formats` preferred; `list_creative_formats` through 4.x) -Return all formats your agent defines. This is how buyers discover what creative formats you support. +Declare producible formats via `get_adcp_capabilities.creative.supported_formats`. Optionally keep `list_creative_formats` for v1-era buyers through 4.x. -**Key responsibilities:** +**Key responsibilities when implementing `list_creative_formats`:** - Return complete format definitions with all `assets` (both required and optional) - Include your `agent_url` in each format - Use proper namespacing for `format_id` values -See [list_creative_formats task reference](/docs/creative/task-reference/list_creative_formats) for complete API specification. +See [list_creative_formats task reference](/docs/creative/task-reference/list_creative_formats) and [canonical formats](/docs/creative/canonical-formats) for complete specifications. ### preview_creative @@ -428,12 +431,13 @@ When updating format definitions: Before launching your creative agent: - [ ] MCP and/or A2A endpoints are accessible -- [ ] All format_ids use proper namespacing (`domain:id`) +- [ ] All format_ids use proper namespacing (`domain:id`) when using the v1 named-format path - [ ] Domain in format_id matches your `agent_url` domain -- [ ] `list_creative_formats` returns all your formats +- [ ] Format discovery is declared via `creative.supported_formats` (and/or product `format_options[]` for sales agents); `list_creative_formats` is optional v1 compatibility through 4.x - [ ] `preview_creative` validates manifests and generates previews - [ ] Format definitions include complete asset requirements - [ ] Documentation available for your custom formats +- [ ] If you host a library, `list_creatives` remains available (not deprecated by this posture) ## Integration patterns @@ -659,14 +663,14 @@ Re-submission resets the review clock. The agent treats the updated creative as The table below maps each interaction model to the tasks it should implement. See [Three interaction models](#three-interaction-models) above for detailed descriptions. -| Interaction model | Required tasks | Additional tasks | Capabilities | +| Interaction model | Required tasks | Additional / v1-compat through 4.x | Capabilities | |---|---|---|---| -| Template/transformer (Celtra, format conversion) | `list_creative_formats`, `preview_creative`, `build_creative` | — | `supports_transformation: true` | +| Template/transformer (Celtra, format conversion) | `get_adcp_capabilities` (`creative.supported_formats`), `preview_creative`, `build_creative` | `list_creative_formats` | `supports_transformation: true` | | Ad server (Innovid, Flashtalking, CM360) | `list_creatives`, `build_creative`, `preview_creative` | `list_creative_formats`, `get_creative_delivery` | `has_creative_library: true` | -| Sales agent with creative (publishers, retail media) | `list_creative_formats`, `sync_creatives`, `preview_creative` | `get_creative_delivery` | `has_creative_library: true` | -| Generative creative tool | `list_creative_formats`, `preview_creative`, `build_creative` | — | `supports_generation: true` | +| Sales agent with creative (publishers, retail media) | `get_products` (`format_options[]`), `sync_creatives`, `preview_creative` | `list_creative_formats`, `list_creatives`, `get_creative_delivery` | `has_creative_library: true` | +| Generative creative tool | `get_adcp_capabilities` (`creative.supported_formats`), `preview_creative`, `build_creative` | `list_creative_formats` | `supports_generation: true` | -Declare these capabilities in `get_adcp_capabilities` so buyer agents can determine the correct interaction model without trial and error. See [Interaction models](/docs/creative/specification#interaction-models) in the spec. +Declare these capabilities in `get_adcp_capabilities` so buyer agents can determine the correct interaction model without trial and error. See [Interaction models](/docs/creative/specification#interaction-models) in the spec. `list_creatives` remains the creative-library query task and is not deprecated by the 3.2 format-discovery posture. Platforms with a creative library should also implement the [accounts protocol](/docs/accounts/overview) so buyers can establish access before querying. This is the same accounts protocol used by sales agents for media buys. @@ -675,7 +679,7 @@ Platforms with a creative library should also implement the [accounts protocol]( - [Creative Formats](/docs/creative/formats) - Understanding format structure - [Creative Manifests](/docs/creative/creative-manifests) - How manifests work - [Asset Types](/docs/creative/asset-types) - Asset specifications -- [list_creative_formats task](/docs/creative/task-reference/list_creative_formats) - Format discovery API reference -- [list_creatives task](/docs/creative/task-reference/list_creatives) - Creative library API reference +- [list_creative_formats task](/docs/creative/task-reference/list_creative_formats) - Deprecated v1 format discovery (functional through 4.x) +- [list_creatives task](/docs/creative/task-reference/list_creatives) - Creative library API reference (not deprecated) - [build_creative task](/docs/creative/task-reference/build_creative) - Manifest generation API reference - [preview_creative task](/docs/creative/task-reference/preview_creative) - Preview rendering API reference diff --git a/docs/creative/specification.mdx b/docs/creative/specification.mdx index 167928fd42..2619f621b0 100644 --- a/docs/creative/specification.mdx +++ b/docs/creative/specification.mdx @@ -90,13 +90,13 @@ These models compose — an agent can support multiple. A creative ad server wit **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`) +- **Transformation**: discover via `get_adcp_capabilities.creative.supported_formats` (preferred in 3.2+) or v1 `list_creative_formats` through 4.x → `build_creative` (with `creative_manifest` + `target_format_id`) +- **Generation**: discover via `get_adcp_capabilities.creative.supported_formats` (preferred in 3.2+) or v1 `list_creative_formats` through 4.x → `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](/docs/accounts/overview) 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. +A transformation or generation agent that charges for its services implements the Accounts Protocol, exposes `pricing_options` on the discovery surface it still offers (`list_creative_formats` through 4.x, and/or pricing attached to canonical capability discovery where declared), 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 @@ -222,19 +222,20 @@ Creative agents that charge for their services expose pricing through the same d ### Pricing discovery surfaces -Pricing is discovered via two surfaces depending on the agent's interaction model: +Pricing is discovered via 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. +- **`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_creatives` is **not** deprecated by the 3.2 format-discovery posture. +- **`list_creative_formats`** *(v1 compatibility through 4.x)* — transformation and generation agents that still expose this task MAY attach `pricing_options[]` on each format so buyers can discover pricing before any creative exists. +- **Canonical discovery** — preferred in 3.2+ for format discovery itself: creative agents declare producible formats via `get_adcp_capabilities.creative.supported_formats`; sales agents declare product formats via `get_products.format_options[]`. Pricing may still be returned on `build_creative` and on any v1 discovery surface the agent continues to offer. -Both surfaces use the same `pricing_options[]` array of [`vendor-pricing-option`](https://adcontextprotocol.org/schemas/v3/core/vendor-pricing-option.json) objects. Both require `account` and `include_pricing: true` on the request. +Surfaces that return `pricing_options[]` use the same array of [`vendor-pricing-option`](https://adcontextprotocol.org/schemas/v3/core/vendor-pricing-option.json) objects and require `account` and `include_pricing: true` on the request when that surface supports the flag. -An agent MAY expose pricing on both surfaces (e.g., a creative management platform that has both a library and transformation capabilities). +An agent MAY expose pricing on more than one surface (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). +2. **Discovery** — `list_creatives` and/or v1 `list_creative_formats` (through 4.x) with `account` and `include_pricing: true` returns `pricing_options[]`. Vendors may offer multiple options (volume tiers, context-specific rates, different models per product line). Consumers MUST NOT assume `list_creative_formats` is present on 3.2+ agents that declare equivalent canonical-format discovery. 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. @@ -273,9 +274,9 @@ The Creative Protocol defines the following tasks. See task reference pages for **Reference**: [`list_creative_formats` task](/docs/creative/task-reference/list_creative_formats) -Discover creative formats and their specifications. +Discover creative formats and their specifications. **Deprecated for new discovery in 3.2** — prefer `get_adcp_capabilities.creative.supported_formats` (creative agents) or `get_products.format_options[]` (sales agents). The task remains a supported v1 compatibility path through 4.x; removal is aligned with the [v1 named-format deprecation calendar](/docs/creative/canonical-formats-migration). -**Requirements:** +**Requirements** (when the agent implements this v1 compatibility task): - 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 @@ -425,8 +426,10 @@ All Creative Protocol communications MUST use HTTPS with TLS 1.2 or higher. 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 +2. Provide format discovery by either: + - declaring equivalent canonical-format discovery — creative agents via `get_adcp_capabilities.creative.supported_formats`, sales agents via `get_products.format_options[]` — or + - implementing `list_creative_formats` (v1 compatibility path, functional through 4.x) +3. Return authoritative format definitions only for formats it owns (when returning v1 named-format definitions) 4. Validate manifests against format specifications 5. Use specified error codes @@ -435,11 +438,14 @@ 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 +4. Implement `list_creatives` when the agent hosts a creative library (`list_creatives` is **not** deprecated by the 3.2 format-discovery posture) 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 +9. Keep offering `list_creative_formats` through 4.x when serving v1-era buyers, even after declaring canonical discovery + +Legacy named-format creatives and v1 `format_id` / `format_ids[]` remain supported through 4.x. This 3.2 posture deprecates the discovery *tool* for new integrations; it is not a hard removal of named-format wire shapes. ### Consumer conformance @@ -449,6 +455,7 @@ A conformant Creative Protocol consumer MUST: 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 +5. MUST NOT assume `list_creative_formats` is present on 3.2+ agents when equivalent canonical-format discovery is declared (`creative.supported_formats` and/or product `format_options[]`). Prefer those surfaces for new discovery; treat `list_creative_formats` as an optional v1 compatibility fallback through 4.x. ## Implementation notes diff --git a/docs/creative/task-reference/list_creative_formats.mdx b/docs/creative/task-reference/list_creative_formats.mdx index 2287c0e4a0..b9cf4ec9d2 100644 --- a/docs/creative/task-reference/list_creative_formats.mdx +++ b/docs/creative/task-reference/list_creative_formats.mdx @@ -5,6 +5,16 @@ description: "list_creative_formats discovers available ad format specifications testable: true --- + +**Deprecated for new discovery (3.2).** Prefer role-appropriate canonical-format discovery instead of calling `list_creative_formats` on new integrations: + +- **Sales agents:** product-level formats via `get_products.format_options[]` +- **Creative agents:** producible formats via `get_adcp_capabilities.creative.supported_formats` + +The task remains functional through 4.x as a v1 compatibility surface. Removal is aligned with the v1 named-format / `format_ids` deprecation calendar in the [canonical formats migration guide](/docs/creative/canonical-formats-migration) (2027-Q4 floor / 2029-Q1 ceiling; 5.0 cut sequence). + +This deprecation does **not** affect [`list_creatives`](/docs/creative/task-reference/list_creatives), which remains the creative-library query task. Legacy named-format creatives and v1 `format_id` / `format_ids[]` remain supported through 4.x. + Discover creative formats supported by a creative agent. Returns full format specifications including asset requirements and technical constraints. diff --git a/docs/creative/task-reference/list_creatives.mdx b/docs/creative/task-reference/list_creatives.mdx index 747af235f6..8b0dddcda9 100644 --- a/docs/creative/task-reference/list_creatives.mdx +++ b/docs/creative/task-reference/list_creatives.mdx @@ -431,5 +431,5 @@ Find active creatives with delivery snapshots to identify stale or dormant asset - [`get_creative_delivery`](/docs/creative/task-reference/get_creative_delivery) - Detailed performance analytics with date ranges, variant breakdowns, and full delivery metrics - [`build_creative`](/docs/creative/task-reference/build_creative) - Build manifests from library creatives or generate from scratch - [`sync_creatives`](/docs/creative/task-reference/sync_creatives) - Upload and manage creative assets on any agent hosting a creative library -- [`list_creative_formats`](/docs/creative/task-reference/list_creative_formats) - Discover supported creative formats +- [`list_creative_formats`](/docs/creative/task-reference/list_creative_formats) - Deprecated v1 format discovery (prefer `format_options[]` / `creative.supported_formats`; functional through 4.x) - [`preview_creative`](/docs/creative/task-reference/preview_creative) - Generate previews of creative manifests diff --git a/docs/reference/release-notes.mdx b/docs/reference/release-notes.mdx index a21f826c86..f486084870 100644 --- a/docs/reference/release-notes.mdx +++ b/docs/reference/release-notes.mdx @@ -9,6 +9,34 @@ Authoritative version-by-version release record for AdCP, with cumulative change --- +## Version 3.2.0 + +**Status:** In development — minor release targeting the 3.2.0 milestone. Additive over 3.1 for wire shapes; this section records the creative-format **discovery** deprecation posture (#5779). + +### Creative-format discovery deprecation posture (#5779) + +`list_creative_formats` is **deprecated for new discovery**. Prefer: + +| Role | Preferred 3.2+ discovery | Notes | +|---|---|---| +| Sales agents | `get_products.format_options[]` | Product-level accepted formats | +| Creative agents | `get_adcp_capabilities.creative.supported_formats` | Producible-format catalog | + +The v1 task remains **functional through 4.x**. Removal is aligned with the v1 named-format / `format_ids` deprecation calendar in the [canonical formats migration guide](/docs/creative/canonical-formats-migration) (2027-Q4 floor / 2029-Q1 ceiling; adoption-driven 5.0 cut sequence) — not an immediate hard cut in 3.2. + +**Not deprecated by this change:** + +- [`list_creatives`](/docs/creative/task-reference/list_creatives) remains the creative-library query task. +- Legacy named-format creatives and v1 `format_id` / `format_ids[]` remain supported through 4.x. + +**Consumer conformance:** buyers and other consumers MUST NOT assume `list_creative_formats` is present on 3.2+ agents when equivalent canonical-format discovery is declared. + +**Compliance:** storyboard steps that call `list_creative_formats` are gated with `requires_tool` so agents that have migrated to canonical discovery grade those steps `not_applicable` rather than failing. Agents that still implement the v1 tool continue to conform. + +See [`list_creative_formats`](/docs/creative/task-reference/list_creative_formats), [Creative Protocol specification § Conformance](/docs/creative/specification#conformance), and [Implementing creative agents](/docs/creative/implementing-creative-agents). + +--- + ## Version 3.1.0 **Status:** General availability — minor release. The stable wire negotiation value is `"3.1"`. The published 3.0.x line remains supported for existing integrations; new 3.1 integrations should pin to `"3.1"` and read `supported_versions` before sending 3.1-only fields. diff --git a/static/compliance/source/protocols/creative/index.yaml b/static/compliance/source/protocols/creative/index.yaml index 020d19bf37..e1b0bbc31b 100644 --- a/static/compliance/source/protocols/creative/index.yaml +++ b/static/compliance/source/protocols/creative/index.yaml @@ -4,8 +4,11 @@ title: "Creative lifecycle" category: creative_lifecycle summary: "Baseline creative lifecycle on a stateful platform: sync display creatives, list with filtering, and preview renderings." track: creative -required_tools: - - list_creative_formats +# list_creative_formats is intentionally omitted from required_tools (AdCP #5779). +# 3.2 agents may declare equivalent canonical-format discovery instead +# (creative.supported_formats / product format_options[]). The discover_formats +# step below is gated with requires_tool so absence grades not_applicable. +required_tools: [] narrative: | You run a creative platform with a persistent library — an ad server, creative management @@ -88,8 +91,11 @@ phases: narrative: | The buyer calls list_creative_formats to discover what your platform accepts. The response defines format specs: dimensions, asset requirements, mime types, - and any platform-specific constraints. + and any platform-specific constraints. Preferred 3.2+ discovery is canonical + (creative.supported_formats / product format_options[]); this step exercises + the v1 compatibility path when the tool is still advertised. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/protocols/creative/scenarios/native_in_feed.yaml b/static/compliance/source/protocols/creative/scenarios/native_in_feed.yaml index b6fc3ef36a..46aa242574 100644 --- a/static/compliance/source/protocols/creative/scenarios/native_in_feed.yaml +++ b/static/compliance/source/protocols/creative/scenarios/native_in_feed.yaml @@ -97,6 +97,7 @@ phases: implementer substitutes with an actual format_id from this response. This follows the established pattern for storyboard format references. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/protocols/media-buy/index.yaml b/static/compliance/source/protocols/media-buy/index.yaml index 5914a87e0f..bc688637fa 100644 --- a/static/compliance/source/protocols/media-buy/index.yaml +++ b/static/compliance/source/protocols/media-buy/index.yaml @@ -361,6 +361,7 @@ phases: a stale or typo'd entry that would have failed silently at `sync_creatives` after the media buy was already committed. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" @@ -609,6 +610,7 @@ phases: dimensions, and constraints. This is a bounded integrity check, not a full format-catalog dump. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/protocols/media-buy/scenarios/creative_reception.yaml b/static/compliance/source/protocols/media-buy/scenarios/creative_reception.yaml index 27f8d332a6..ff21e9398c 100644 --- a/static/compliance/source/protocols/media-buy/scenarios/creative_reception.yaml +++ b/static/compliance/source/protocols/media-buy/scenarios/creative_reception.yaml @@ -91,6 +91,7 @@ phases: platform returns the formats you support — native post formats, display units, video slots, or product listing formats. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/specialisms/creative-ad-server/index.yaml b/static/compliance/source/specialisms/creative-ad-server/index.yaml index fb6cfe688a..99631cb09c 100644 --- a/static/compliance/source/specialisms/creative-ad-server/index.yaml +++ b/static/compliance/source/specialisms/creative-ad-server/index.yaml @@ -200,6 +200,7 @@ phases: VAST, native. The input formats are less relevant because creatives are already in your system. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/specialisms/creative-generative/generative-seller.yaml b/static/compliance/source/specialisms/creative-generative/generative-seller.yaml index 2516359517..4a046e6862 100644 --- a/static/compliance/source/specialisms/creative-generative/generative-seller.yaml +++ b/static/compliance/source/specialisms/creative-generative/generative-seller.yaml @@ -8,9 +8,11 @@ required_tools: - sync_governance - get_products - create_media_buy - - list_creative_formats - sync_creatives - get_media_buy_delivery +# list_creative_formats omitted from required_tools (AdCP #5779): 3.2 agents may +# declare equivalent canonical-format discovery instead. Steps that call the tool +# are gated with requires_tool so absence grades not_applicable. requires_scenarios: - media_buy_seller/refine_products - media_buy_seller/delivery_reporting @@ -260,6 +262,7 @@ phases: bring their own assets. If you sell inventory, you should accept pre-built creatives too — the generative capability is additive. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/specialisms/creative-generative/index.yaml b/static/compliance/source/specialisms/creative-generative/index.yaml index 0bc74adf29..841385fb03 100644 --- a/static/compliance/source/specialisms/creative-generative/index.yaml +++ b/static/compliance/source/specialisms/creative-generative/index.yaml @@ -125,6 +125,7 @@ phases: you support. Each format describes the output type, dimensions, and what inputs it needs (brief text, brand reference, seed images, etc.). task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/specialisms/creative-template/index.yaml b/static/compliance/source/specialisms/creative-template/index.yaml index 464a96561a..179ddc7e4c 100644 --- a/static/compliance/source/specialisms/creative-template/index.yaml +++ b/static/compliance/source/specialisms/creative-template/index.yaml @@ -121,6 +121,7 @@ phases: the buyer what templates are available, what assets each one needs, and what the output dimensions will be. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" @@ -168,6 +169,7 @@ phases: they need formats that accept image assets at specific dimensions. This tests that your agent handles filter parameters correctly. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/specialisms/sales-broadcast-tv/index.yaml b/static/compliance/source/specialisms/sales-broadcast-tv/index.yaml index 7f6263e6aa..7050b25877 100644 --- a/static/compliance/source/specialisms/sales-broadcast-tv/index.yaml +++ b/static/compliance/source/specialisms/sales-broadcast-tv/index.yaml @@ -438,6 +438,7 @@ phases: returns format specs defined by spot length, codec requirements, and file delivery specifications. No VAST or tracker-related formats appear. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/specialisms/sales-catalog-driven/index.yaml b/static/compliance/source/specialisms/sales-catalog-driven/index.yaml index 572bbaef47..3df2b1dcab 100644 --- a/static/compliance/source/specialisms/sales-catalog-driven/index.yaml +++ b/static/compliance/source/specialisms/sales-catalog-driven/index.yaml @@ -234,6 +234,7 @@ phases: platform supports for catalog-driven ads. This tells the buyer what image dimensions, text lengths, and required fields each catalog item needs. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/specialisms/sales-proposal-mode/index.yaml b/static/compliance/source/specialisms/sales-proposal-mode/index.yaml index c04466e56b..bc485ce703 100644 --- a/static/compliance/source/specialisms/sales-proposal-mode/index.yaml +++ b/static/compliance/source/specialisms/sales-proposal-mode/index.yaml @@ -438,6 +438,7 @@ phases: The buyer confirms what creative formats the accepted proposal's products require. Your platform returns format specs with asset requirements. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/universal/pagination-integrity-creative-formats.yaml b/static/compliance/source/universal/pagination-integrity-creative-formats.yaml index 32c7c55fe7..2ef0e3fd3e 100644 --- a/static/compliance/source/universal/pagination-integrity-creative-formats.yaml +++ b/static/compliance/source/universal/pagination-integrity-creative-formats.yaml @@ -174,6 +174,7 @@ phases: non-terminal. The runner captures `pagination.cursor` for the follow-up step. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" @@ -225,6 +226,7 @@ phases: `cursor` field. A cursor on `has_more=false` is a stale token that invites callers to follow it past the end of results. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" diff --git a/static/compliance/source/universal/schema-validation.yaml b/static/compliance/source/universal/schema-validation.yaml index 60cc49fb22..dc299de5b1 100644 --- a/static/compliance/source/universal/schema-validation.yaml +++ b/static/compliance/source/universal/schema-validation.yaml @@ -293,6 +293,7 @@ phases: reference. The seller's format catalog must cover that referenced format. task: list_creative_formats + requires_tool: list_creative_formats schema_ref: "creative/list-creative-formats-request.json" response_schema_ref: "creative/list-creative-formats-response.json" doc_ref: "/creative/task-reference/list_creative_formats" From 677b0df1be945a4b1d41b729d7acfd617d39ca21 Mon Sep 17 00:00:00 2001 From: gagliathebuilder Date: Thu, 9 Jul 2026 13:49:37 -0700 Subject: [PATCH 2/2] docs: fix creative conformance wording nit Consumer conformance item 5 was double-modal ("MUST: ... MUST NOT assume ..."). Drop the redundant modal since the list stem already establishes it. --- docs/creative/specification.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/creative/specification.mdx b/docs/creative/specification.mdx index 2619f621b0..09ce5d0212 100644 --- a/docs/creative/specification.mdx +++ b/docs/creative/specification.mdx @@ -455,7 +455,7 @@ A conformant Creative Protocol consumer MUST: 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 -5. MUST NOT assume `list_creative_formats` is present on 3.2+ agents when equivalent canonical-format discovery is declared (`creative.supported_formats` and/or product `format_options[]`). Prefer those surfaces for new discovery; treat `list_creative_formats` as an optional v1 compatibility fallback through 4.x. +5. Not assume `list_creative_formats` is present on 3.2+ agents when equivalent canonical-format discovery is declared (`creative.supported_formats` and/or product `format_options[]`). Prefer those surfaces for new discovery; treat `list_creative_formats` as an optional v1 compatibility fallback through 4.x. ## Implementation notes