Optionaladcp_Release-precision AdCP version (VERSION.RELEASE, e.g. "3.0", "3.1", "3.1-beta"). On a request: the buyer's release pin — the seller validates against its supported_versions and returns VERSION_UNSUPPORTED on cross-major mismatch, or downshifts to the highest supported release within the same major. On a response: the release the seller actually served — clients SHOULD validate the response against that release's schema, not against their pin. Patches are not negotiated; surface them as build_version on capabilities for operational visibility. When omitted, falls back to adcp_major_version (deprecated) or server default. Buyers SHOULD emit both adcp_version and adcp_major_version through 3.x to remain compatible with sellers that only read the legacy field. NORMALIZATION: SDKs that read full-semver values from bundle metadata (e.g. ComplianceIndex.published_version = "3.1.0-beta.1") MUST normalize to release-precision ("3.1-beta.1") before emitting on the wire — meta-field values are NOT valid wire values.
Optionaladcp_DEPRECATED in favor of adcp_version (release-precision string). Servers MUST continue to honor this field through 3.x. Removed in 4.0. Original semantics: the AdCP major version the buyer's payloads conform to. Sellers validate against their supported major_versions and return VERSION_UNSUPPORTED if unsupported. When omitted, the seller assumes its highest supported version.
Optionalcontext_MCP compatibility field: servers ignore this value; A2A uses transport-native Message/Task contextId.
OptionalcontextOptionalgovernance_Optionalpush_Client-generated key required for retry-safe proposal decline.
Proposal declines to apply. proposal_id is the semantic uniqueness key and values MUST be unique even when two entries otherwise differ; implementations enforce this rule because JSON Schema uniqueItems only compares whole objects. Results preserve request order.
Immutable proposal ID returned by request_proposals or refine_proposals.
Optionaldetail?: stringOptional short, non-identifying explanation. MUST NOT identify a competitor or disclose sensitive campaign information.
OptionalopportunityOpaque buyer-assigned identifier for this planning cycle, scoped to the seller and account.
Optionalphase?: "exploratory" | "planning" | "active_sourcing"Current stage of buyer planning.
Optionalintent?: "planning" | "test" | "speculative" | "live_rfp"How seriously the buyer is evaluating supply in this cycle.
Optionalplanning_horizon?: DateRangeOptionalresponse_deadline?: stringDeadline by which the buyer needs a seller response.
Optionalstatus?: "closed" | "open"Whether the planning cycle remains open. On calls after initial creation, omission means no status update and MUST NOT reopen or close the opportunity implicitly, except that successful create_media_buy proposal execution explicitly infers accepted closure.
Optionalclose_reason?: Why the opportunity closed. Required when status is closed.
Optionalclose_detail?: stringOptional non-sensitive context about closure. MUST NOT identify a competitor or disclose confidential clearing terms.
Terminally decline one or more immutable proposals. Repeating an already-applied decline with a new idempotency key succeeds with outcome declined and preserves the first recorded reason and detail; the proposal cannot later be executed.