AdCP 3.3 beta program
3.3 is a minor release with a deliberately short cycle. Its beta follows the same order as 3.2: the protocol first, then the SDKs.Beta status
The latest checkpoint is3.3.0-beta.3, published 2026-10-31. Each beta is an immutable, signed checkpoint, and later betas may change 3.3 surfaces before GA. GA follows the first beta that meets every one of the proposed GA criteria in #8600: SDK support for the latest beta, green storyboards, the closed-schema triage (#8501), no open objections on consent items and decision records, and current release docs. Objections are due by 2026-11-06, or at the 2026-11-09 working-group session.
Beta.0 did not wait for the SDKs. A checkpoint is SDK-backed only after the matching SDK versions and integration evidence are published.
@adcp/sdk 17.0.0-beta.11 is the first published SDK that bundles beta.3 (SDK guidance). Three features that shipped in the betas are withdrawn after beta.1.
Know which version string to use
The artifact version, wire pin, and documentation selector are related but not interchangeable:
Only send a prerelease wire pin to a peer that advertises that exact value in
get_adcp_capabilities.adcp.supported_versions. Prerelease pins are exact: a buyer pinned to "3.3-beta.2" must not silently negotiate to beta.3, and a stable "3.2" pin must not silently negotiate to a beta.
Test a beta without an SDK
Download the signed protocol bundle of the beta you test (the commands use the latest,3.3.0-beta.3; substitute another published checkpoint) rather than copying schemas from main or from the moving /schemas/3.3.0-beta.4/ path:
adcp-3.3.0-beta.3/ directory contains:
manifest.json: release version, bundle contents, skills, and file count;schemas/: source-shaped and bundled request/response schemas, includingschemas/manifest.jsonfor the task and capability inventory;compliance/: storyboards, test kits, vectors, and runner contracts;skills/: role guidance for coding agents;openapi/: published OpenAPI artifacts.
- Generate or refresh types from the pinned bundled schemas.
- Validate representative requests and responses for the roles you implement, including the new 3.3 surfaces you plan to adopt: the
account_ididentity model and, if you support it,request_account;statuson every response through the protocol envelope;expected_confirmation_at, vendor-metricoutcome_targetgoals,reporting_webhook.operation_id,media_buy.features.catalog_ingestion, the DOOHlocationanddooh_inventory_summaryfields,sync_audiencesaudience sizes, and the experimental spot, print, daypart, loudness, reporting-subscription, live-creative-update, and governancebudget.periods[]fields. - Compare your advertised tools with
schemas/manifest.json. - Exercise raw MCP or A2A calls with
adcp_version: "3.3-beta.3"against a staging peer that advertises the same pin. - Run the compliance assets with a source-compatible runner if you maintain one. Do not weaken production authentication to accommodate a beta runner.
Try the preview on the public test agent
The public test agent athttps://test-agent.adcontextprotocol.org serves 3.3.0-beta.3 as an opt-in preview alongside its stable releases. It lists "3.3-beta.3" in adcp.supported_versions and serves the preview only to a request that pins exactly that value:
/sales/mcp serves the experimental 3.3 surfaces the training agent implements:
- account requests (
account.requests):request_account, andaccount_requestsonlist_accounts; - the caller’s
authorization, withauthorized_atandregranted_at, andrevisionon eachlist_accountsaccount; - principal-level reporting subscriptions (
media_buy.reporting_subscriptions): thereporting_subscriptionssection ofsync_principalandget_principal, andsubscription_coverageonget_reporting_status; - the
reporting_subscription_probecontroller scenario, which revokes, reduces, and restores grants and advances a per-caller sandbox clock; - collection cards (
media_buy.collection_cards):include_collectionsonget_products,list_products,request_proposalsandrefine_proposals, with images, samples, links, talentbrand_refand follower counts on the CreatorLoop creator channels; - the collection catalog (
media_buy.collection_catalog):list_collections, and thecollection_card.*andcollection_catalog.bulk_changewebhooks registered throughsync_accounts; - the
seed_collectioncontroller scenario, which changes the caller’s cards (a sample, a removal, a follower sweep) so the card webhooks fire; - inventory holds (Hold policy):
hold_policyon products and drafts (media_buy.hold_policy), committed proposals withhold_placed_at, ranked holds withhold_rank(media_buy.hold_ranking), per-installmentholds(media_buy.installment_holds),extend_hold(media_buy.hold_extension), and theforce_hold_unavailablecontroller scenario.
/brand/mcp returns collections on get_brand_identity for the creators (brand.collection_links).
Holds are kept per caller and timed by the caller’s sandbox clock, so two accounts that hold the same slot are queued at positions 1 and 2. These products carry hold policies:
Other products take the default: a hold that never contends.
tools/list includes request_account and list_collections only when the listing is pinned to the preview (params._meta.adcp_version, as @adcp/sdk sends it).
With @adcp/sdk, use 17.0.0-beta.11 or later, which negotiates exactly 3.3-beta.3. Earlier 17.0.0 betas bundle an older beta, so they settle on 3.2 with the test agent.
No 3.3 verification badge is issued from a beta. A beta bundle is an implementation input, not a certification target, and prerelease grading runs are diagnostic, as they were for 3.2.
SDK support contract
An SDK support claim must name all of the following:- exact SDK package version;
- exact AdCP prerelease bundle used to generate or load schemas;
- supported roles and transports;
- known unsupported or raw-only surfaces;
- install command and one tested validation command.
SDK guidance
TypeScript. Use@adcp/sdk 17.0.0-beta.6 or later (npm beta dist-tag) to test 3.3. The published prereleases bundle a signed AdCP release: 17.0.0-beta.6 bundles 3.3.0-beta.1, 17.0.0-beta.10 bundles 3.3.0-beta.2, and 17.0.0-beta.11 and later bundle 3.3.0-beta.3. Each negotiates only its own beta, so a buyer and seller on different betas settle on a stable release. Pin the exact SDK version, and send a prerelease adcp_version only to a peer that advertises that exact pin. @adcp/sdk 17 is a major release; read its 16 to 17 migration guide first.
Python. There is no Python SDK release that bundles a 3.3 beta. Support is pending adcp-client-python#1560, which is open. Until it lands, use the adcp 3.2 release for production-line work and validate 3.3 behavior over the raw wire against the signed bundle.
Go. Check the adcp-go releases for a published 3.3 support statement; this page names none.
Do not combine an SDK that bundles an earlier beta with a later wire pin unless that SDK explicitly documents forward compatibility. GA needs SDK support for the latest beta, so these versions will move; Choose your SDK is the SDK matrix, and it can lag the npm dist-tag.
SDK convergence
A beta is the SDK-backed ecosystem checkpoint only when:- every first-party SDK’s support for it is marked supported, partial, or unavailable with an exact package version;
- accepted protocol feedback from the previous beta is merged;
- the integration scenarios below have run against the previous beta and identify any correction in the candidate;
- copy/paste installation and validation commands have been executed as published;
- the cumulative migration guide and release notes describe any correction that requires adopter action.
Withdrawn after beta.1
Three features shipped in3.3.0-beta.1 and are not part of 3.3. They leave the protocol after beta.1. All three add terms to commercial_terms, which stays closed within 3.x so that a buyer is never bound by terms it cannot read (adcp#8501). They are planned for 4.0, where commercial_terms gets a declared extension point with must-understand.
The migration guide lists every surface removed, and Planned for 4.0 keeps the designs.
Required integration evidence
Retain the exact protocol bundle, SDK package versions, capability responses, redacted requests and responses, task IDs, and account and MediaBuy identifiers for each run.- Account lifecycle. Call a discovery task (
get_productsorlist_products) with a buyer-declared natural key that was never provisioned. The seller returnsACCOUNT_NOT_FOUND(a seller that provisions lazily instead of exposingsync_accountsmay answer without creating the account), andlist_accountsshows no new account. Then provision, withsync_accountsor the seller’s lazy path on a provisioning task, and repeat the read. - Signed traffic. Send a signed request and receive a signed webhook between two agents that publish
identity.brand_json_url. Confirm agent resolution by canonical URL, and that a pinned key missing from the agent’s JWKS is rejected. Against a seller that lists an operation inrequired_foranda2a_invocation_skillinrequest_signing.operation_sources, confirm an unsigned A2A call to that operation is rejected. A 3.3 seller that lists the operation inrequired_forwithout the marker must reject it too; the marker advertises enforcement, it does not enable it. - Catalog intake. For a seller that declares
media_buy.features.catalog_ingestion, confirmsync_catalogsrejects an unlisted catalog type, mode, or feed format, and an explicitcontent_id_typeoutside a declaredsupported_content_id_types, withUNSUPPORTED_FEATUREbefore mutation, including on a dry run, and reports oneitem_issuesentry per item on terminal results and discovery reads underper_itemreporting. - Delivery webhooks. Register a
reporting_webhookwith anoperation_idand confirm everymedia_buy_deliverywebhook echoes it verbatim. Register one without it and confirm the seller sends no delivery webhooks to it. - End to end. Run one buyer and seller lifecycle through purchase, creative assignment, and a delivery readback.
What may still change
The 3.3.0 milestone is the live scope record for work that may still land during the beta cycle. Use these maintained GitHub views as the live record: Milestone assignment means candidate for the 3.3 line, not a commitment to any particular beta or GA. A change is included in a beta only when it is merged before that beta’s tag. Items may be deferred, split, or moved to a later release as working groups resolve scope and interoperability risk.In review for 3.3
These are proposals, not features. Each row is an issue that was open in the 3.3.0 milestone on 2026-10-31 (28 issues, not counting the GA tracking issue), with its open pull request where one exists. An issue stays open while part of it is still in review, so a row can list merged work. Issues whose work has fully merged have been closed and are not listed; see What’s new and the release notes for what they shipped. None is part of a beta unless it merges before that beta’s tag. “Merged so far” names the slice that already shipped on
main; the rest of the issue is still in review. The live lists are the open 3.3 issues and open pull requests and drafts.Decisions
Four records document surfaces merged for beta.0 and are accepted (decided 2026-10-30): DR-0027 (
error.mutation_outcome), DR-0028 (sales-fixed-rate), DR-0029 (delivery projection), and DR-0030 (media-buy lineage).
Open 3.3.0 milestone issues
Also open, without a 3.3 milestone issue: #7958 composable delivery breakdowns and #7957 metric aggregation semantics (both drafts; their issues moved to 3.4.0), #7446 TMP Context Match cache isolation (on the 3.3.0 milestone), and #8346 signed creative addons (open; asks the working group to reconsider a 3.4 deferral, and WG approval is pending).
Known beta boundaries
- Experimental surfaces retain their experimental-status contract. A 3.3 beta does not graduate them to stable. The surfaces new in 3.3 are listed in the release notes.
- The
3.3-betadocumentation selector moves forward; pinned semver artifacts and documentation snapshots remain immutable. - Stable schema aliases continue to resolve to stable releases during beta. Use pinned prerelease URLs when validating beta behavior.
- The
media_buy_seller/unprovisioned_account_referencestoryboard is advisory until runner capability14.1.0.
Report useful feedback
Include this information in a beta issue:- protocol artifact version and wire pin;
- SDK name and version, or
raw wire; - buyer, seller, creative, signals, brand, measurement, or governance role;
- transport and task name;
- schema path or JSON Pointer involved;
- expected and actual behavior;
- minimal redacted payload and validation error;
- whether the problem blocks interoperability on the beta you tested.