OptionalexperimentalWhen true, this canonical or seller narrowing may not work as declared. Adopters SHOULD preflight it with validate_input or in a sandbox and SHOULD NOT route production budget without testing; experimental status never makes the deprecated v1 path preferable. Drivers include unsettled spec shape, an adopter runtime gap, and custom shapes awaiting promotion. This replaces the earlier status plus runtime_status axes. Sellers SHOULD set experimental whenever a canonical or declaration is not production-ready.
OptionaldeprecatedWhen true, this canonical (or a seller's specific narrowing of it) is going away. Existing adopters are supported through the deprecation cycle; new adoption is discouraged. Pair with migration_target_version to indicate when the canonical is expected to be removed. Distinct from experimental: an experimental canonical may stabilize and stop being experimental; a deprecated canonical is on a sunset path.
Optionalv1_Whether this canonical has any v1 named-format equivalent. true (default) — the canonical is structurally expressible as one or more v1 named formats (IAB display sizes, VAST tags, DAAST tags, etc.); v1→v2 projection via v1-canonical-mapping.json is meaningful. false — the canonical is inherently new in v2 and has no v1 form; v1's list_creative_formats couldn't express it because the underlying concept (algorithmic surface composition, AI-surface mentions, retail-media catalog placements, multi-card carousels) didn't exist as a v1 named-format archetype.
Lets SDKs distinguish two failure modes that today look identical: (a) the registry hasn't covered this canonical yet (correctable — seller adds explicit canonical field or files a registry entry) vs (b) no v1 path is possible (informational — buyer needs v2-aware consumption, or seller declares canonical_formats_only: true on the product declaration). SDKs encountering v1_translatable: false on a canonical SHOULD NOT emit FORMAT_PROJECTION_FAILED (which signals registry-coverage gap) — instead surface the inherent v1-unreachability as a different diagnostic or skip silently. The 4 inherently-v2 canonicals at 3.1 GA: image_carousel, sponsored_placement, responsive_creative, agent_placement.
Optionalsince_AdCP MAJOR.MINOR version that introduced this canonical (e.g., '3.1', '3.2'). Lets adopters reason about minimum protocol version requirements when consuming a format declaration. Patch precision is intentionally rejected — canonicals are introduced at minor-version boundaries.
Optionalmigration_AdCP MAJOR.MINOR version by which the working group expects this canonical to stabilize, surface a breaking revision, or (when deprecated: true) be removed. Patch precision is intentionally rejected — canonicals shift at minor-version boundaries. Absence signals 'no specific target' (omit the field rather than use a placeholder like 'unknown').
Optionalcomposition_Whether the surface composes deterministically (buyer can predict per-slot rendering — sponsored_placement, image, video) or algorithmically (surface chooses combinations or phrasing — responsive_creative, agent_placement).
Optionalprovenance_When true, the product rejects unsigned synthesized assets. Builders calling build_creative MUST attach a C2PA-compatible provenance manifest attributing synthesis to the creative agent.
Optionalplatform_Platform-specific extensions narrowing the canonical (pixel ID shapes, conversion event taxonomies, platform-specific CTAs/destinations). Each extension is a URI+digest reference resolved against the bundled extensions map in get_products responses or fetched directly.
Collision precedence (normative). When two or more platform_extensions[] entries on the same declaration extend the same target (e.g., both extend tracking) with overlapping field names, array order is authoritative — later entries override earlier ones on a per-field basis (last-in-array-wins). SDKs MUST surface the overlap via the errors[] array on the get_products response with a structured code (FORMAT_DECLARATION_DIVERGENT is appropriate when the overlap appears across dual-emitted shapes; a producer-self-emitted overlap on a single declaration SHOULD use the same code with error.details: { collision_kind: "platform_extension_field", target, overlapping_fields, winning_extension_uri }). Producers SHOULD avoid the collision by emitting one extension per target or by partitioning fields across extensions; the deterministic precedence is for last-resort consistency across SDK implementations, not a sanctioned merging strategy.
Optionalsynthesis_When true, the format's production pipeline is genuinely nondeterministic — the platform cannot guarantee that synthesis from a given input set produces in-spec output. Veo / Sora / Runway-class generative video, and other AI-synthesis flows where output dimensions, duration, or quality vary per run. Implies a different validation contract: predictive validate_input is impossible; the platform's own post-synthesis QA loop applies; if the QA loop exhausts without producing a valid artifact, build_creative returns task_failed with a synthesis_failed reason. Distinct from composition_model (which describes how the surface composes per-slot rendering, not whether synthesis is deterministic). When false or absent, the format's production is predictable enough that validate_input can predict output properties from input properties.
Compatibility with asset_source / item_production_model: synthesis_nondeterministic: true MAY pair with any of seller_pre_rendered_from_brief, seller_human_designed, or agent_synthesized (the QA loop is concept-level, not source-specific — 'seller renders from brief but each retry differs' is just as nondeterministic as Veo). It MUST NOT pair with buyer_uploaded (the buyer ships pre-rendered bytes; there's no synthesis step to be nondeterministic about). It MUST NOT pair with publisher_host_recorded (the publisher's host produces a deterministic-from-script output even if the human voice varies). When synthesis_nondeterministic: true is set with an incompatible source, validators SHOULD reject with a structured error.
OptionalslotsProgrammatic declaration of which canonical asset_group_id slots a manifest targeting this format must (or may) populate. Lets SDK codegen and validators enumerate expected slots without parsing the format's prose description. Each entry references an asset_group_id from the canonical vocabulary registry, paired with an asset_type so the validator knows which asset schema to apply. Format-level narrowing parameters that apply across all slots (e.g., flat headline_max_chars on responsive_creative) may also live on the format declaration; per-slot constraints (a specific slot's max_chars or max_size_kb) live on the slot entry.
Optionalrequired_Downstream platform connections or grants required to use this format declaration. These are in addition to the single AdCP caller credential. Use this when a platform product requires multiple downstream grants, such as an advertiser account connection plus a publisher identity or post authorization for published-post references.
Optionalprovider?: stringStable provider or platform namespace, preferably lowercase. Examples: social.example, shortvideo.example, or a seller-defined namespace. Omit only when the requirement is provider-agnostic, or when an authorization_url fully routes the human to the correct provider-specific connection flow.
Kind of downstream connection required. advertiser_account is the platform account used to buy/manage ads. publisher_identity is the creator, page, channel, organization, or profile that owns source posts. post_authorization is a post-scoped grant when the platform authorizes individual posts instead of, or in addition to, the owning identity.
Optionalrequired_for?: string[]Concrete AdCP protocol operation names that require this downstream connection. Sellers SHOULD include this in product declarations when the requirement is known ahead of time, and in AUTHORIZATION_REQUIRED details when it explains the failed operation. Prefer specific operation names such as list_creatives, sync_creatives, create_media_buy, get_media_buy_delivery, or get_creative_delivery over broad category labels such as reporting.
Optionalscope?: "unknown" | "account" | "identity" | "post"Granularity of the downstream grant.
Optionalstatus?: Current seller-observed state for this downstream connection when known. Product declarations MAY omit status or use unknown; AUTHORIZATION_REQUIRED details SHOULD use missing, expired, or revoked for the connection that blocked the call.
Optionalconnection_id?: stringSeller-defined identifier for an already-created downstream connection. Omit when no connection exists yet or when exposing it would leak platform/account state.
Optionalresource_ref?: {Optional opaque provider-native resource hint, such as a platform account id, profile URL, handle, channel id, post id, or post URL. This is a hint for routing authorization, not proof that authorization exists.
Optionalplatform_account_id?: stringProvider-native advertiser or business account id, when safe to disclose.
Optionalidentity_id?: stringProvider-native creator, page, channel, organization, or profile id, when safe to disclose.
Optionalhandle?: stringProvider-native public handle for the owning identity, when available.
Optionalprofile_url?: stringPublic URL for the owning identity, when available.
Optionalpost_id?: stringProvider-native post id, when the grant is post-scoped or the failed request referenced a specific post.
Optionalpost_url?: stringPublic URL for the referenced post, when available.
Optionalauthorization_url?: stringSeller-hosted or provider-hosted URL where a human can complete or restore this downstream connection.
Optionalauthorization_instructions?: stringHuman-readable instructions for completing or restoring this downstream connection.
Optionalexpires_at?: stringExpiration time for the downstream grant, when known.
Optionalreference_Policy for formats whose slots accept a published_post reference. immutable_snapshot: seller snapshots the referenced post at approval and later source changes do not change the served creative. mutable_requires_reapproval: the source post may change and material changes require review before continued serving. mutable_auto_recheck: the source post may change and the seller continuously or periodically rechecks authorization/policy without requiring buyer resubmission. Omit when the format has no published_post slot.
Optionalproduction_Typical production turnaround in business days when the format requires seller-side production (e.g., host-recording from a buyer-supplied script). 0 for synchronous (e.g., generative AI); >0 for human-produced (e.g., podcast host-read). Absent when no production is required (buyer uploads complete creative).
Shared parameter fields that apply across canonical formats. Each canonical format extends this base with format-specific parameters (dimensions, durations, codecs, slot constraints).