4.0.0 (2026-04-22)
- types: rename Asset content types to Content
- server: pluggable TaskStore on A2A — unblock production A2A adoption
- server: expert-review followups — tenant-scoped idempotency, A2A context_factory, ContextVar safety
- types: AssetsNN semantic aliases + format_category shim + downstream smoke
- sdk: ResolvedBrand.brand_manifest removed. Use .brand. CreateMediaBuyRequest.brand_manifest removed. Use brand. BrandManifest, FormatCategory, DeliverTo, PromotedProducts, PromotedOfferings, Pricing, PackageStatus imports now raise ImportError. See MIGRATION_v3_to_v4.md.
- webhooks: ADCPClient webhook verification now requires raw_body to be passed through from the HTTP handler. Callers that relied on the implicit re-serialize-from-payload fallback will start seeing ADCPWebhookSignatureError until they plumb the raw body through from their framework's pre-parse hook. Fix path:
- webhooks: get_adcp_signed_headers_for_webhook now signs the compact-separator JSON form of the payload. Callers that previously hand-serialized spaced JSON and POSTed it with content= will see signature mismatches after this change. The fix is to also serialize with separators=(",", ":") or switch to httpx json= which already uses that form.
- serve(mount=...) kwarg removed.
Budget.authority_levelis removed. Migrate toreallocation_threshold/reallocation_unlimitedonplan.budget, and setplan.human_review_requiredfor decisions affecting data subjects. See the rc.4 migration section in README.md.
- A2A server support in serve() (d0c3015)
- A2A server support in serve() (4e5db4f), closes #175
- a2a: auto-retain contextId + taskId across multi-turn calls (0564635)
- a2a: auto-retain contextId + taskId across multi-turn calls (8a084ec)
- ADCP 3.0 server DX helpers, type guards, and schema sync (de4a079)
- ADCP 3.0 server DX helpers, type guards, and schema sync to latest (bf0d81d)
- AdCP RFC 9421 request-signing profile (ba53961)
- add collection_list and sync_governance task methods (2dbeac1)
- address PR review — real-world transforms and SDK error types (cfaa9c5)
- AssetsNN aliases, format_category shim, MCP adoption hooks — unblock salesagent (ed7d30a)
- auto-inject context passthrough in create_tool_caller (4d4fe5e)
- bump to 4.0.0b1 with test fixtures updated for new schema shape (dcd6709)
- bundle-based schema sync + Sigstore verify + 4.0.0b1 on latest (755071a)
- error translation helper for multi-transport servers (7825ed6)
- error translation helper for multi-transport servers (#176) (88126d1)
- examples: add seller_agent.py reference impl (40341c9)
- idempotency_key auto-injection, typed errors, and capability gate (af9dd2d)
- idempotency_key auto-injection, typed errors, and capability gate (12cc983)
- implement AdCP RFC 9421 request-signing profile (fc995e9)
- MCP response + error extraction per AdCP spec (d991b1e)
- MCP response + error extraction per AdCP spec (896beb8)
- mcp: auto-generate sync_governance inputSchema from Pydantic (ac1edb3)
- mcp: inline $defs in generated inputSchema (closes #208) (8eaeb4d)
- mcp: inline $defs in generated inputSchema (closes #208) (ffa58e5)
- migrate+types: v3->v4 codemod, strict-validation flag, version helpers, subclass test (0f50d39)
- migrate+types: v3->v4 codemod, strict-validation flag, version helpers, subclass test (32bfbeb)
- salesagent review feedback - typed error codes, state machine export, missing types (8ef8161)
- schemas: regen for AdCP 3.0 GA — custom pricing + experimental_features (4dfaffe)
- schemas: regen for AdCP 3.0 GA — custom pricing + experimental_features (db913ba), closes #204
- sdk: 4.0 beta cleanup — version wiring, brand_manifest drop, migration guide (ebaab12)
- server+migrate: round-1 feedback followups (dbbc390)
- server+migrate: round-1 feedback followups (0fe9cb5)
- server: AccountAwareToolContext + multi-tenant contract doc (69fd3da)
- server: AccountAwareToolContext + multi-tenant contract doc (3747939)
- server: context_factory, tenant_id, DISCOVERY_TOOLS — unblock MCP adoption (2203c1d)
- server: DISCOVERY_METHODS + document tools/list pre-auth posture (closes #222) (a26c948)
- server: DISCOVERY_METHODS + lock tools/list pre-auth posture (closes #222) (ba2de29)
- server: gate tools/list on method overrides (#220) (816d22c)
- server: gate tools/list on method overrides (closes #220) (fc1a788)
- server: idempotency middleware per AdCP #2315 spec (101713c)
- server: idempotency middleware per AdCP #2315 spec (f708ed2)
- server: middleware parity, auth, A2A parser hook, startup log (549d190)
- server: middleware parity, auth, A2A parser hook, startup log (c9d7bbc)
- server: per-skill middleware hook in ADCPAgentExecutor (#226) (4e95764)
- server: per-skill middleware hook in ADCPAgentExecutor (closes #226) (6f9bd26)
- server: pluggable PushNotificationConfigStore on A2A (#225) (ea21864)
- server: pluggable PushNotificationConfigStore on A2A (closes #225) (4f64c8d)
- server: pluggable TaskStore on A2A — unblock production A2A adoption (69ebccd)
- server: propagate caller_identity from transport into ToolContext (b4a4c93)
- server: propagate caller_identity from transport into ToolContext (1f3cf8f)
- server: request-body size cap middleware (closes #239) (21249a5)
- server: request-body size cap middleware (closes #239) (9ccf960)
- server: thread ToolContext through TestControllerStore (closes #227) (a4c6489)
- server: thread ToolContext through TestControllerStore (closes #227) (a0d89e3)
- server: typed handler params via Pydantic annotation (closes #214) (dcc2c87)
- server: typed handler params via Pydantic annotation (closes #214) (4e86e1a)
- server: TypeVar-bound ADCPHandler for typed ToolContext subclasses (#223) (d737527)
- server: TypeVar-bound ADCPHandler for typed ToolContext subclasses (closes #223) (e1eb923)
- server: wire idempotency errors to wire + capability helper + DX polish (5b8f353)
- signing: async revocation-list + JWKS fetchers (55a8fd4)
- signing: async revocation-list + JWKS fetchers (1c2e676)
- signing: auto-sign outgoing requests via ADCPClient signing kwarg (551aaf8)
- signing: auto-sign outgoing requests via ADCPClient signing kwarg (c07c946)
- signing: full-wire e2e + DX fixes from integrator walkthrough (a44896b)
- signing: generate_signing_keypair() programmatic API (closes #217) (dd2b961)
- signing: generate_signing_keypair() programmatic API (closes #217) (c6d5505)
- signing: IP-pinned httpx transport closes DNS-rebinding TOCTOU (9a7ee9c)
- signing: IP-pinned httpx transport closes DNS-rebinding TOCTOU (1fa0820)
- signing: keygen --encrypt flag and adcp-keygen entry point (01c0c5d)
- signing: live revocation-list fetcher with signed JWS verification (249b79d)
- signing: live revocation-list fetcher with signed JWS verification (fbe3e90)
- signing: module rename + keygen --encrypt + adcp-keygen entry point (7bce09a)
- signing: PostgreSQL-backed PgReplayStore for multi-instance verifiers (8118033)
- signing: PostgreSQL-backed PgReplayStore for multi-instance verifiers (3ad3951)
- strip bogus Literal['reuse'] subclasses from datamodel-codegen (3684227)
- switch ADCP_VERSION to latest, remap aliases for schema redesign (253be88)
- sync rc.4 schemas + wire update_rights task (67119bf)
- sync rc.4 schemas + wire update_rights task (6c0e0e9)
- sync schemas from protocol bundle with Sigstore verification (66b9fb1)
- ToolAnnotations and agent-facing descriptions for all 56 MCP tools (66729ee)
- types: AssetsNN semantic aliases + format_category shim + downstream smoke (f5c6b18)
- types: regenerate schemas + inject Literal-discriminator defaults (27468aa)
- types: regenerate schemas + inject Literal-discriminator defaults (a4bd6d8)
- types: rename <Type>Asset content types to <Type>Content (7d0679f)
- webhooks: adcp.webhooks.deliver() + A2A artifacts conformance (493f219)
- webhooks: adcp.webhooks.deliver() one-shot legacy-auth dispatcher (3bf663d)
- webhooks: add from_pem and sign_legacy_webhook helpers (19a8ab3)
- webhooks: RFC 9421 signing + idempotency_key + sender/receiver UX (63732c8)
- webhooks: RFC 9421 signing + required idempotency_key + sender/receiver UX (c640b8c)
- CI failures - noqa F401 on guard re-exports, dynamic model_rebuild (378ac50)
- CI failures and review findings (9089711)
- CI lint - sort imports in types/init.py, pin ADCP_VERSION (cfbdca1)
- CI lint (noqa F401 re-exports) and pin ADCP_VERSION to 3.0.0-rc.3 (5959e7b)
- example: derive port and AGENT_URL from ADCP_PORT env (1df2306)
- harness,server: surface partial/failing storyboards, reuse port on rerun, default list_creatives timestamps (3b27001)
- idempotency: honor new required Idempotency.supported field in strict gate (9ff08c9)
- make ergonomic codegen resilient to datamodel-codegen variant suffix shifts (138179b)
- migrate+types: PR #247 expert-review followups (ac505c0)
- mypy override errors in subclass handlers (d35bc63)
- mypy valid-type in generated code, subclass handler param types (eb4e027)
- noqa F401 on new re-exports (TRANSIENT_CODES, MEDIA_BUY_STATE_MACHINE, PaginationResponse) (b4059c5)
- resolve CI failures from latest-tracking regeneration (8b49e1a)
- sdk: remove stray noqa, correct capabilities_response docstring (05ac689)
- sdk: SDK cheap fixes for DX Stream B1 (e67e8ed)
- sdk: three cleanups from round-4 validator findings (d7e93f7)
- seller: declare compliance_testing block and add missing force_creative_status scenario (5de1c61)
- server: expert-review followups — tenant-scoped idempotency, A2A context_factory, ContextVar safety (5f053af)
- server: PR #230 expert-review followups — cross-tenant isolation + hardening (bb2bc67)
- server: PR #232 expert-review followups — scope_provider injection, loud anonymous fallback, SSRF/secret-storage docs (5d3eff8)
- server: PR #233 expert-review followups — security docs + retry/transform tests (afbbfac)
- server: PR #234 expert-review followups — TypeVar tests & docs (df5898c)
- server: PR #237 expert-review followups (a415786)
- server: PR #238 expert-review followups (a198656)
- server: PR #238 review round 2 — MCP field surfacing + custom-validator doc (4d4e2e7)
- server: PR #241 expert-review followups (ce189f8)
- server: PR #244 expert-review followups (6af9a7d)
- server: PR #245 code-review followups — fail loudly on silent-skip paths (a0a3077)
- server: Threat 3 merge-blocker on advertised-tools gate (11abb3b)
- signing: PR #206 reviewer fixes — IDN normalization, HTTPS_PROXY, fail-closed reuse (b432b03)
- signing: PR #243 expert-review followups (e616307)
- signing: round-2 review — harden identifier check, drop invalid SQL (4ea1d8f)
- signing: round-2 review — harden issuer/Last-Modified, slide next_update on 304 (8dbcbc5)
- sort TYPE_CHECKING imports in base.py and mcp_tools.py (I001) (71f7448)
- suppress E501 in mcp_tools.py (tool descriptions are long strings) (9eea1d9)
- webhooks,seller,signals: round-6 P1+P2 DX fixes (6e51519)
- webhooks: align deliver() with canonical compact-separator on-wire form (92240d5)
- webhooks: re-apply compact-separator signer after rebase onto 3.0 GA (166aa1b)
- webhooks: sign compact-separator JSON to match httpx wire format (1c2a527)
- webhooks: verifier fails closed when raw_body missing (adcp#2478) (9a906a9)
- creative: fix NameError in build_creative fallback (afe6afb)
- creative: remove anti-patterns from build-creative-agent skill (9e42039)
- design: FastMCP native registration investigation (#209) (d32694f)
- design: FastMCP native registration investigation (closes #209) (ba3cb73)
- fix DX gaps in skill docs from real-world agent builds (dc63f8b)
- generative-seller: fix invalid enums and document generative tools (99e9f2e)
- link upstream codegen bug in post_generate_fixes (ee6f52c)
- retail: fix invalid capability enum and storyboard invocation (249acb1)
- seller,retail: teach proposal refine schema and webhook emission (9723eef)
- seller: correct invalid schema claims and serve() signature (f3a77c6)
- seller: replace false compliance_testing auto-wire with explicit kwarg (8d74805)
- signals,generative: correct idempotency.wrap decorator usage (3ba41e6)
- signals,seller: round-2 validator findings (2b941d0)
- signals: tighten signal_ids filter, idempotency, validation command (e0fb6d6)
- skills,examples: align webhook + proposal examples with real SDK and schema (a9e2a63)
- skills: round-8 DX polish — scope seller, self-contain signals (3686e38)
- skills: round-8 DX polish — scope seller, self-contain signals (8b5075c)
- mark 4.0 breaking change for release-please (8d0c430)
First 4.0 beta. See MIGRATION_v3_to_v4.md for upgrade instructions and before/after examples.
- Removed types (no replacement stubs):
BrandManifest,FormatCategory,DeliverTo,PromotedProducts,PromotedOfferings,Pricing,PackageStatus. These were removed upstream from the AdCP spec. Inline any dict payloads, or use the spec-current replacements (BrandReferenceforBrandManifest;MediaBuyStatusfor the formerPackageStatus). ResolvedBrand.brand_manifestfield removed. UseResolvedBrand.brand. The cross-populate validator that mirroredbrand↔brand_manifestis gone.CreateMediaBuyRequest.brand_manifest→brand, matching the spec. The request now takes aBrandReference, not an inline brand manifest dict.- Numbered discriminated-union classes renumbered.
Assets5…Assets14from 3.x now correspond to higher-numbered variants (Assets57…Assets149depending on the response). Import via semantic aliases fromadcp.types(e.g.,CreateMediaBuySuccessResponse) instead of numbered classes. RawAssets*imports are unsupported — they are code-generation artifacts and will shift again. - Asset-content types renamed
<Type>Asset→<Type>Content(issue #221). The payload-describing types (AudioAsset,CssAsset,HtmlAsset,ImageAsset,JavascriptAsset,TextAsset,UrlAsset,VideoAsset,WebhookAsset) are renamed toAudioContent,CssContent,HtmlContent,ImageContent,JavascriptContent,TextContent,UrlContent,VideoContent,WebhookContent. This disambiguates payload types from the slot-describing<Type>FormatAssetfamily (VideoContentdescribes what a creative delivers;VideoFormatAssetis a slot inside a format definition). The old names are no longer exported fromadcp.types. SeeMIGRATION_v3_to_v4.mdfor a search-and-replace.
__version__is now sourced from installed distribution metadata (importlib.metadata.version("adcp")) so it always matchespyproject.toml.- Added top-level re-exports:
TargetingOverlay,AdvertiserIndustry,KellerType,BrandSource. Any generated type not on the top-level surface is available fromadcp.types—adcp.types.generated_poc.*is internal and not supported for direct import.
3.12.0 (2026-04-16)
- skill-based agent generation with storyboard validation (e0eef4c)
- skill-based agent generation with storyboard validation (d9d8778)
- authorization_type takes precedence over stale properties key (3fc9ed0)
- resolve property_ids and property_tags in get_all_properties() (ef55dcb)
- resolve property_ids and property_tags in get_all_properties() (eca6bd7), closes #172
- SSRF protections for authoritative_location redirects (6d1c962)
3.11.0 (2026-04-04)
- ADCP 3.0.0-rc3 spec + full registry support (c3f6937)
- implement ADCP 3.0.0-rc3 spec with full registry support (edc9578)
- remove all backward-compat type stubs for clean 3.0.0 surface (a45cdf5)
- add backward-compat FormatCategory/FormatType enum stub (756ed50)
- clean up formatting in registry_sync and property_registry (44a1914)
- remove accidental cursor file, add to .gitignore (2650f8e)
- remove stale buyer_campaign_ref from MCP tool schemas (3c7a2c8)
3.10.0 (2026-03-17)
- add feature capability validation API (supports/require) (d550c08)
- add RC2 governance support and full spec coverage (523ea20)
- feature capability validation API (supports/require) (f86f6c4)
- filter MCP tools by handler type, add webhook replay protection (ae7f378)
- address PR review feedback (FieldModel collision, handler boilerplate, deprecation aliases) (b9eac61)
- replace TypeAdapter with model_validate, tighten slug regex (103d616)
- require webhook headers when secret configured, restrict unknown handler tools (12f1080)
- walk MRO for tool filtering, add tool name validation (39985e5)
3.9.1 (2026-03-16)
- flatten validation-only oneOf schemas for consumer subclassing (3171a95)
- flatten validation-only oneOf schemas to single subclassable classes (c242a7d)
3.9.0 (2026-03-13)
- add raw_body support for verification and use Unix timestamps (4a663e5), closes #151
- set AdCPBaseModel extra='ignore' and remove obsolete generate_models.py (#157) (21077d9)
- unwrap RootModel unions for consumer subclassing (#156) (8fd7b92)
- use default JSON separators for webhook HMAC signing (2223f6e)
- use default JSON separators for webhook HMAC signing (0dd495f), closes #151
3.8.0 (2026-03-01)
3.7.0 (2026-02-28)
3.6.0 (2026-02-23)
3.5.0 (2026-02-22)
3.4.0 (2026-02-20)
- add brand and property registry lookup methods (#130) (9bfb0fb), closes #129
- export PromotedOfferingsRequirement and PromotedOfferingsAssetRequirements, sync latest schemas (#133) (9216ea7)
- sync ADCP schemas to latest, add brand compat and AAO member API (#132) (0dca021)
3.3.0 (2026-02-12)
3.2.0 (2026-02-04)
3.1.0 (2026-01-26)
3.0.0 (2026-01-26)
- CpmAuctionPricingOption, CpmFixedRatePricingOption, VcpmAuctionPricingOption, VcpmFixedRatePricingOption have been consolidated into CpmPricingOption and VcpmPricingOption respectively.
2.19.0 (2026-01-14)
- fix PackageRequest schema inconsistency in adcp (de2b4bf)
- sync schemas with ADCP 2.6 package updates (a6c55db)
2.18.0 (2026-01-09)
- add deprecated field metadata injection and CLI warnings (8947090)
- add format asset utilities and deprecation warnings for assets_required migration (c3c379a)
- upgrade to AdCP protocol 2.6.0 (245a7d3)
- rename format_ to format in FieldModel enum (1a6ab9a)
- resolve import sorting lint error in generated _ergonomic.py (45350d1)
- resolve linter errors (import sorting, line length) (4a53e33)
- shorten comment line to pass lint (7a2e30e)
2.17.0 (2025-12-30)
2.16.0 (2025-12-21)
2.15.0 (2025-12-21)
2.14.0 (2025-12-19)
- add IPR agreement workflow using centralized AdCP signatures (#101) (a33c5d6)
- update schemas (436f754)
- update webhook handling (874d170)
- apply PR suggestion (cecc2dc)
- drop --collapse-root-models option from type gen. Regenerate types (6cba9ef)
- format (aabb322)
- format (1dca6f1)
- format (83da78d)
- handle all authorization types in get_properties_by_agent (#100) (934f437)
- regenerate schemas (4ab4f53)
- tests (e1664aa)
- update MCP SDK to >=1.23.2 for streaming stability (#94) (3c25822)
- update verify signature function to work with timestamp (aaa7c8b)
- utility functions (bc47233)
2.13.0 (2025-12-07)
2.12.2 (2025-11-29)
- handle BaseExceptionGroup with CancelledError during cleanup (#89) (940e6ee)
- handle ExceptionGroup and CancelledError in MCP error flow (#87) (27ff0ae)
- use official A2A SDK for spec-compliant client implementation (#90) (d1b55cf)
2.12.1 (2025-11-24)
2.12.0 (2025-11-22)
2.11.1 (2025-11-21)
2.11.0 (2025-11-21)
2.10.0 (2025-11-20)
2.9.0 (2025-11-20)
- add missing AdCP protocol methods to CLI and client (#71) (f9432a3)
- integrate AdCP schema improvements (PR #222 + #223) (#73) (d61ca33)
2.8.0 (2025-11-19)
2.7.0 (2025-11-19)
- export FormatId, PackageRequest, PushNotificationConfig, and PriceGuidance from stable API (#68) (654f882)
2.6.0 (2025-11-19)
2.5.0 (2025-11-18)
2.4.1 (2025-11-18)
2.4.0 (2025-11-18)
2.3.0 (2025-11-17)
2.2.0 (2025-11-16)
2.1.0 (2025-11-16)
2.0.0 (2025-11-15)
1.6.1 (2025-11-13)
- context field for custom injected types (e37c095)
- context field for custom injected types (8e96c6e)
- mypy failures (c186472)
- ruff check (b8296e5)
1.6.0 (2025-11-13)
- add adagents.json validation and discovery (#42) (4ea16a1)
- add AdCPBaseModel with exclude_none serialization (#40) (c3cd590)
1.5.0 (2025-11-13)
1.4.1 (2025-11-11)
1.4.0 (2025-11-10)
1.3.1 (2025-11-10)
1.3.0 (2025-11-10)
1.2.1 (2025-11-09)
1.2.0 (2025-11-08)
1.1.0 (2025-11-07)
1.0.5 (2025-11-07)
1.0.4 (2025-11-07)
1.0.3 (2025-11-07)
1.0.2 (2025-11-06)
1.0.1 (2025-11-06)
1.0.0 (2025-11-06)
- All client methods now require typed request objects. The legacy kwargs API has been removed for a cleaner, more type-safe interface.
- All client methods now require typed request objects. The legacy kwargs API has been removed for a cleaner, more type-safe interface.
- All client methods now require typed request objects. The legacy kwargs API has been removed for a cleaner, more type-safe interface.
- update PyPI setup guide with correct secret name and current status (085b961)
0.1.2 (2025-11-05)
- correct secret name from PYPI_API_TOKEN to PYPY_API_TOKEN (0b7599d)
0.1.1 (2025-11-05)
- remove deprecated package-name parameter from release-please config (28d8154)
- add automated versioning and PyPI publishing (e7f8bbb)
- add comprehensive PyPI publishing setup guide (dcc8135)