From 04b2833ac43f5e4f1919454d46f896e6ae6ee9aa Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sun, 16 Aug 2026 20:31:29 +0200 Subject: [PATCH 1/2] docs: expand v7 migration guidance --- MIGRATION_v6_to_v7.md | 217 ++++++++++++++++++++++++++++++++++++------ README.md | 2 +- 2 files changed, 187 insertions(+), 32 deletions(-) diff --git a/MIGRATION_v6_to_v7.md b/MIGRATION_v6_to_v7.md index 8e09b8b7..f6a4e9c4 100644 --- a/MIGRATION_v6_to_v7.md +++ b/MIGRATION_v6_to_v7.md @@ -1,17 +1,67 @@ # Migrating from Python SDK 6 to 7 -Python SDK 7 makes canonical creatives the default application contract. The -package release (`7.0.0-rc`) is distinct from the negotiated AdCP protocol -version (`3.0` or `3.1`). AdCP 3.2 is not advertised until the SDK ships its -validator bundle. +This guide applies to applications upgrading from any Python SDK 6.x release +to 7.x. SDK 7 makes canonical creatives the primary application contract, +updates the bundled protocol schemas to AdCP 3.1.13, and tightens several +security and concurrency boundaries. + +The SDK package version and negotiated AdCP protocol version are independent. +Installing `adcp==7.0.0` does not force peers to use a particular wire version; +SDK 7 continues to interoperate with AdCP 3.0 and 3.1 agents. + +## Upgrade checklist + +1. Install SDK 7 in a branch and run your test suite with deprecation warnings + visible: + + ```bash + pip install --upgrade "adcp>=7,<8" + python -W default::DeprecationWarning -m pytest + ``` + +2. Replace legacy creative identity in normal application code with canonical + `Format` declarations and `format_options`. +3. Move any intentionally legacy creative calls and types to the explicit + `Legacy*` and `*_legacy` APIs. +4. Add an authorization callback to every `create_roster_account_store` call. +5. If you provide a custom decisioning executor, set + `timed_sync_get_products_limit`. +6. If you use `PgBackend`, create a separate connection pool for advisory-lock + transactions and pass it as `lock_pool`. +7. Confirm that synchronous callers consume terminal results inline instead of + waiting for a duplicate completion webhook. +8. Exercise callback validation and multi-tenant isolation in staging before + production rollout. + +## Canonical creatives are the primary API Use `Format`, `Product.format_options`, `format_kind`, and -`format_option_refs` in normal application code. `Format` now means a -canonical declaration. Products, packages, creatives, filters, delivery -reads, callbacks, generic task execution, multi-agent clients, server -handlers, response builders, and asset helpers enforce this boundary. +`format_option_refs` in normal application code. Products, packages, +creatives, filters, delivery reads, callbacks, generic task execution, +multi-agent clients, server handlers, response builders, and asset helpers all +enforce the canonical boundary. -Legacy named-format identity is explicit: +The main renames for code that still needs named-format compatibility are: + +| SDK 6 surface | SDK 7 compatibility surface | +|---|---| +| `FormatId` | `LegacyFormatId` | +| `BuildCreativeRequest` | `LegacyBuildCreativeRequest` | +| `PreviewCreativeRequest` | `LegacyPreviewCreativeRequest` | +| `ListCreativeFormatsRequest` | `LegacyListCreativeFormatsRequest` | +| `client.get_products(...)` for raw legacy rows | `client.get_products_legacy(...)` | +| `client.build_creative(...)` | `client.build_creative_legacy(...)` | +| `client.preview_creative(...)` | `client.preview_creative_legacy(...)` | +| `client.list_creative_formats(...)` | `client.list_creative_formats_legacy(...)` | +| legacy server handler names | handler names ending in `_legacy` | + +`Product` and creative filters no longer expose `format_ids`. Use canonical +`format_options`, `format_kind`, and `format_option_refs` instead. Do not import +from `adcp.types._generated` or `adcp.types.generated_poc`; those modules are +internal and regenerated from the protocol schemas. + +If a workflow must continue using the legacy wire shape during migration, make +that boundary explicit: ```python from adcp.types.legacy import LegacyGetProductsRequest @@ -19,15 +69,18 @@ from adcp.types.legacy import LegacyGetProductsRequest raw = await client.get_products_legacy(LegacyGetProductsRequest(...)) ``` -`FormatId` and `list_creative_formats` are no longer normal root surfaces. -Use `LegacyFormatId`, `adcp.types.legacy`, and methods ending in `_legacy` -only for migration or conformance tooling. These methods emit -`DeprecationWarning` and are scheduled for removal with AdCP 4.0. +Legacy methods emit `DeprecationWarning` and are scheduled for removal with +AdCP 4.0. Treat them as a temporary interoperability layer rather than the +default API for new code. + +### Converting between legacy and canonical formats For seller-owned named formats, configure `legacy_format_converter`. For -canonical selections persisted across a JSON/process boundary, configure a -separate `canonical_format_legacy_resolver`; the SDK never reverse-guesses a -legacy tuple. Catalog snapshots can build both: +canonical selections persisted across a JSON or process boundary, configure a +separate `canonical_format_legacy_resolver`; the SDK deliberately does not +reverse-guess a legacy tuple. + +Catalog snapshots can build both adapters: ```python from adcp.canonical_formats import projection_adapters_from_catalog_snapshots @@ -40,27 +93,129 @@ client = ADCPClient( ) ``` -AdCP 3.0 is upgraded on reads and downgraded on writes. AdCP 3.1 requires the -`media_buy.features.canonical_creatives` capability or unambiguous -request-local evidence. AdCP 3.2 will be canonical by contract once supported; -advertising `canonical_creatives: false` there will be an error. +AdCP 3.0 payloads are upgraded on reads and downgraded on writes. For AdCP 3.1, +the framework advertises `media_buy.features.canonical_creatives: true` for +canonical-capable sellers. If you build capability responses yourself, include +that feature or provide unambiguous request-local canonical evidence. -## Synchronous completion webhooks +## Roster account stores require authorization + +`create_roster_account_store` no longer treats possession of an account ID as +authorization. Every store must receive a synchronous or asynchronous callback +that binds the verified `AuthInfo` principal to the candidate account. + +```python +from adcp.decisioning import create_roster_account_store + +async def authorize(account, auth_info): + return await access_policy.can_access( + principal=auth_info, + account_id=account.id, + ) + +accounts = create_roster_account_store( + roster=roster, + authorize=authorize, +) +``` + +Return exactly `True` to allow access. Missing authentication, `False`, or an +exception denies access. Avoid a blanket allow callback outside isolated test +fixtures; it defeats the security boundary this change introduces. + +## Custom executors require an admission limit + +When a decisioning server receives a custom `executor=`, it cannot safely infer +the executor's capacity. SDK 7 therefore requires an explicit positive +`timed_sync_get_products_limit`: + +```python +from concurrent.futures import ThreadPoolExecutor +from adcp.decisioning import serve + +executor = ThreadPoolExecutor(max_workers=16) +serve( + platform, + executor=executor, + timed_sync_get_products_limit=8, +) +``` + +Choose a value that leaves capacity for other tools. If the SDK creates the +pool through `thread_pool_size=`, the admission limit defaults to half the +worker count, with a minimum of one, so no change is required. + +The caller still owns the lifecycle of a custom executor and must shut it down +cleanly. + +## PostgreSQL idempotency requires a distinct lock pool + +`PgBackend` now requires both `pool` and `lock_pool`. They must be different +pool objects: the lock pool holds advisory-lock transactions while adopter code +runs, and sharing it with business or cache queries can deadlock under +saturation. + +```python +from psycopg_pool import AsyncConnectionPool +from adcp.server.idempotency import IdempotencyStore, PgBackend + +pool = AsyncConnectionPool(database_url, min_size=2, max_size=10) +lock_pool = AsyncConnectionPool(database_url, min_size=2, max_size=10) + +backend = PgBackend(pool=pool, lock_pool=lock_pool) +await backend.create_schema() +store = IdempotencyStore(backend=backend, ttl_seconds=86_400) +``` + +Open and close both caller-owned pools with the application lifecycle. The +same requirement applies when constructing `PgBackend` through `LazyBackend`. +Passing the same object for both arguments fails at construction. + +## Synchronous completion webhooks default to off `auto_emit_completion_webhooks` now defaults to `False`. AdCP forbids a task webhook when the initial response is already terminal: the result is available -inline and no registry task exists for a webhook `task_id`. +inline, and no registry task exists for a webhook `task_id`. -If an existing buyer depends on receiving both copies, temporarily pass +If an existing buyer temporarily depends on receiving both copies, pass `auto_emit_completion_webhooks=True` to `serve()` or -`create_adcp_server_from_platform()`. This retains the former behavior as a +`create_adcp_server_from_platform()`. This preserves the SDK 6 behavior as a non-conformant compatibility extension with a synthetic, unpollable `sync-*` task ID. Update the buyer to consume the inline result, then remove the opt-in. -This setting only controls synthetic synchronous-completion delivery. Terminal -webhooks for real `TaskHandoff` requests remain enabled when the request supplies -`push_notification_config` and a webhook sender or supervisor is configured. The -framework rejects a push-configured handoff before task creation when no transport -is available, rather than returning `submitted` and silently dropping the callback. -Adopters that deliver terminal task webhooks themselves can set the independent -`auto_emit_task_webhooks=False` ownership flag. +This setting controls only synthetic synchronous-completion delivery. Terminal +webhooks for real `TaskHandoff` requests remain enabled when the request +supplies `push_notification_config` and a webhook sender or supervisor is +configured. Adopters that deliver terminal task webhooks themselves can set +the independent `auto_emit_task_webhooks=False` ownership flag. + +## Callback and tenant boundaries are stricter + +SDK 7 validates and canonicalizes A2A callback destinations with a fail-closed +default policy. Deployments that accept dynamic callback destinations or use +DNS pinning must provide a custom sender and enforce resolution at connection +time. A push-configured handoff with no available delivery transport is now +rejected before task creation instead of being accepted and silently dropped. + +Account registries, sessions, proposals, notification stores, and reference +seller state now enforce tenant ownership. Test fixtures or application code +that relied on a cross-tenant fallback must be updated to carry the authenticated +tenant/account scope explicitly. Notification credentials are no longer +returned through typed or generic response paths. + +## Recommended rollout + +1. Deploy SDK 7 to staging with the legacy creative adapters only where they + are still required. +2. Run buyer and seller storyboards for every supported wire version. +3. Test two separate tenants using the same external identifiers and verify + that neither can read the other's accounts, sessions, proposals, or tasks. +4. Exercise allowed and denied callback destinations, including redirects and + DNS changes if your sender supports them. +5. Load-test timed synchronous `get_products` calls and PostgreSQL idempotency + under pool saturation. +6. Remove temporary legacy adapters and + `auto_emit_completion_webhooks=True` after all callers have migrated. + +See the [7.0.0 release](https://github.com/adcontextprotocol/adcp-client-python/releases/tag/v7.0.0) +and [full changelog](CHANGELOG.md) for the complete change list. diff --git a/README.md b/README.md index c360e1ab..2043790b 100644 --- a/README.md +++ b/README.md @@ -298,7 +298,7 @@ forward traffic degrades gracefully rather than failing. - **[API Reference](https://adcontextprotocol.github.io/adcp-client-python/)** - Complete API documentation with type signatures and examples - **[Protocol Spec](https://github.com/adcontextprotocol/adcp)** - Ad Context Protocol specification - **[Handler authoring](docs/handler-authoring.md)** - Building an AdCP-compliant agent on `adcp.server` -- **[Migrating from SDK 6 to 7](MIGRATION_v6_to_v7.md)** - Canonical creative replacements and legacy escape hatches +- **[Migrating from SDK 6 to 7](MIGRATION_v6_to_v7.md)** - Breaking API, security, concurrency, and webhook changes - **[Testing your AdCP server](docs/testing-your-adcp-server.md)** - In-process harness for unit tests plus storyboard-runner compliance grading - **[Multi-tenant contract](docs/multi-tenant-contract.md)** - Scope invariants every multi-tenant agent must satisfy - **[Examples](examples/)** - Code examples and usage patterns From 5c4e83010598a02aab0618d251b050529c1d303b Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Sun, 16 Aug 2026 20:52:26 +0200 Subject: [PATCH 2/2] fix(protocol): support AdCP 3.1.14 schemas --- MIGRATION_v6_to_v7.md | 2 +- README.md | 4 +- SCHEMA_DELTAS.md | 12 +- schemas/cache/3.1/adagents.json | 14 +-- schemas/cache/3.1/brand.json | 20 ++-- .../calibrate-content-request.json | 2 +- .../calibrate-content-response.json | 2 +- .../create-content-standards-request.json | 2 +- .../create-content-standards-response.json | 2 +- .../get-content-standards-request.json | 2 +- .../get-content-standards-response.json | 2 +- .../get-media-buy-artifacts-request.json | 2 +- .../get-media-buy-artifacts-response.json | 2 +- .../list-content-standards-request.json | 2 +- .../list-content-standards-response.json | 2 +- .../update-content-standards-request.json | 2 +- .../update-content-standards-response.json | 2 +- .../validate-content-delivery-request.json | 2 +- .../validate-content-delivery-response.json | 2 +- .../3.1/bundled/core/tasks-get-request.json | 2 +- .../3.1/bundled/core/tasks-get-response.json | 106 +++++------------- .../3.1/bundled/core/tasks-list-request.json | 2 +- .../3.1/bundled/core/tasks-list-response.json | 2 +- .../get-creative-delivery-request.json | 2 +- .../get-creative-delivery-response.json | 2 +- .../get-creative-features-request.json | 2 +- .../get-creative-features-response.json | 2 +- .../list-creative-formats-request.json | 2 +- .../list-creative-formats-response.json | 57 ++++------ .../creative/list-creatives-request.json | 2 +- .../creative/list-creatives-response.json | 2 +- .../creative/list-transformers-request.json | 2 +- .../creative/list-transformers-response.json | 2 +- .../creative/preview-creative-request.json | 2 +- .../creative/preview-creative-response.json | 2 +- .../creative/sync-creatives-request.json | 2 +- .../creative/sync-creatives-response.json | 2 +- .../creative/validate-input-request.json | 2 +- .../creative/validate-input-response.json | 2 +- .../media-buy/build-creative-request.json | 2 +- .../media-buy/build-creative-response.json | 2 +- .../media-buy/create-media-buy-request.json | 2 +- .../media-buy/create-media-buy-response.json | 2 +- .../get-media-buy-delivery-request.json | 2 +- .../get-media-buy-delivery-response.json | 2 +- .../media-buy/get-media-buys-request.json | 2 +- .../media-buy/get-media-buys-response.json | 2 +- .../media-buy/get-products-request.json | 2 +- .../media-buy/get-products-response.json | 73 ++++-------- .../list-creative-formats-request.json | 2 +- .../list-creative-formats-response.json | 57 ++++------ .../bundled/media-buy/log-event-request.json | 2 +- .../bundled/media-buy/log-event-response.json | 2 +- .../bundled/media-buy/package-request.json | 2 +- .../provide-performance-feedback-request.json | 2 +- ...provide-performance-feedback-response.json | 2 +- .../media-buy/sync-audiences-request.json | 2 +- .../media-buy/sync-audiences-response.json | 2 +- .../media-buy/sync-catalogs-request.json | 2 +- .../media-buy/sync-catalogs-response.json | 2 +- .../media-buy/sync-event-sources-request.json | 2 +- .../sync-event-sources-response.json | 2 +- .../media-buy/update-media-buy-request.json | 2 +- .../media-buy/update-media-buy-response.json | 2 +- .../create-property-list-request.json | 2 +- .../create-property-list-response.json | 2 +- .../delete-property-list-request.json | 2 +- .../delete-property-list-response.json | 2 +- .../property/get-property-list-request.json | 2 +- .../property/get-property-list-response.json | 2 +- .../property/list-property-lists-request.json | 2 +- .../list-property-lists-response.json | 2 +- .../update-property-list-request.json | 2 +- .../update-property-list-response.json | 2 +- .../validate-property-delivery-request.json | 2 +- .../validate-property-delivery-response.json | 2 +- .../get-adcp-capabilities-request.json | 2 +- .../get-adcp-capabilities-response.json | 30 ++++- .../protocol/get-task-status-request.json | 2 +- .../protocol/get-task-status-response.json | 106 +++++------------- .../bundled/protocol/list-tasks-request.json | 2 +- .../bundled/protocol/list-tasks-response.json | 2 +- .../signals/activate-signal-request.json | 2 +- .../signals/activate-signal-response.json | 2 +- .../bundled/signals/get-signals-request.json | 2 +- .../bundled/signals/get-signals-response.json | 2 +- .../si-get-offering-request.json | 2 +- .../si-get-offering-response.json | 2 +- .../si-initiate-session-request.json | 2 +- .../si-initiate-session-response.json | 2 +- .../si-send-message-request.json | 2 +- .../si-send-message-response.json | 2 +- .../si-terminate-session-request.json | 2 +- .../si-terminate-session-response.json | 2 +- schemas/cache/3.1/core/registry-event.json | 10 +- .../cache/3.1/creative/asset-types/index.json | 10 +- schemas/cache/3.1/extensions/index.json | 2 +- .../canonical/sponsored_placement.json | 16 +-- schemas/cache/3.1/index.json | 10 +- schemas/cache/3.1/manifest.json | 6 +- .../get-adcp-capabilities-response.json | 13 +-- src/adcp/ADCP_VERSION | 2 +- src/adcp/types/_generated.py | 6 +- src/adcp/types/generated_poc/adagents.py | 30 ++--- .../types/generated_poc/brand/__init__.py | 22 ++-- .../get_adcp_capabilities_response.py | 10 +- .../generated_poc/core/registry_event.py | 13 +-- .../formats/canonical/sponsored_placement.py | 21 +--- .../get_adcp_capabilities_response.py | 28 ++--- .../conformance/signing/vector_manifest.json | 4 +- tests/test_adcp_3_1_14_schema_backport.py | 29 +++++ 111 files changed, 357 insertions(+), 522 deletions(-) create mode 100644 tests/test_adcp_3_1_14_schema_backport.py diff --git a/MIGRATION_v6_to_v7.md b/MIGRATION_v6_to_v7.md index f6a4e9c4..e22ea87f 100644 --- a/MIGRATION_v6_to_v7.md +++ b/MIGRATION_v6_to_v7.md @@ -2,7 +2,7 @@ This guide applies to applications upgrading from any Python SDK 6.x release to 7.x. SDK 7 makes canonical creatives the primary application contract, -updates the bundled protocol schemas to AdCP 3.1.13, and tightens several +updates the bundled protocol schemas to AdCP 3.1.14, and tightens several security and concurrency boundaries. The SDK package version and negotiated AdCP protocol version are independent. diff --git a/README.md b/README.md index 2043790b..abc87df7 100644 --- a/README.md +++ b/README.md @@ -276,7 +276,7 @@ async with ADCPMultiAgentClient( ## AdCP version support -The 7.x line is built against **AdCP 3.1.13 stable**, makes canonical creatives +The 7.x line is built against **AdCP 3.1.14 stable**, makes canonical creatives the primary Python contract, and negotiates AdCP 3.0, 3.1, and 3.2 wire dialects. The SDK package version and protocol version are intentionally independent: @@ -285,7 +285,7 @@ independent: import adcp adcp.get_adcp_sdk_version() # SDK package version, e.g. "7.0.0rc1" -adcp.get_adcp_spec_version() # AdCP spec this build targets, e.g. "3.1.13" +adcp.get_adcp_spec_version() # AdCP spec this build targets, e.g. "3.1.14" ``` If you talk to an agent on a newer spec than this SDK validates, the response diff --git a/SCHEMA_DELTAS.md b/SCHEMA_DELTAS.md index 0f0db1c2..715f945d 100644 --- a/SCHEMA_DELTAS.md +++ b/SCHEMA_DELTAS.md @@ -1,3 +1,13 @@ # Generated-types delta -_No field-shape changes detected._ +## Field changes + +- `bundled/protocol/get_adcp_capabilities_response.py` + - `SupportedCatalogType`: `+promotion` + - `Surface`: `+linear_tv` +- `core/registry_event.py` + - `BadgeRole`: `+root` `-brand`, `-creative`, `-governance`, `-media_buy`, `-signals`, `-sponsored_intelligence` +- `formats/canonical/sponsored_placement.py` + - **classes removed**: SupportedCatalogType +- `protocol/get_adcp_capabilities_response.py` + - **classes removed**: Surface diff --git a/schemas/cache/3.1/adagents.json b/schemas/cache/3.1/adagents.json index d016bdc3..fb8a2115 100644 --- a/schemas/cache/3.1/adagents.json +++ b/schemas/cache/3.1/adagents.json @@ -786,12 +786,12 @@ ], "examples": [ { - "$schema": "/schemas/3.1.13/adagents.json", + "$schema": "/schemas/3.1.14/adagents.json", "authoritative_location": "https://cdn.example.com/adagents/v2/adagents.json", "last_updated": "2025-01-15T10:00:00Z" }, { - "$schema": "/schemas/3.1.13/adagents.json", + "$schema": "/schemas/3.1.14/adagents.json", "properties": [ { "property_id": "example_site", @@ -872,7 +872,7 @@ "last_updated": "2025-01-10T12:00:00Z" }, { - "$schema": "/schemas/3.1.13/adagents.json", + "$schema": "/schemas/3.1.14/adagents.json", "contact": { "name": "Meta Advertising Operations", "email": "adops@meta.com", @@ -981,7 +981,7 @@ "last_updated": "2025-01-10T15:30:00Z" }, { - "$schema": "/schemas/3.1.13/adagents.json", + "$schema": "/schemas/3.1.14/adagents.json", "contact": { "name": "Tumblr Advertising" }, @@ -1020,7 +1020,7 @@ "last_updated": "2025-01-10T16:00:00Z" }, { - "$schema": "/schemas/3.1.13/adagents.json", + "$schema": "/schemas/3.1.14/adagents.json", "contact": { "name": "Example Third-Party Sales Agent", "email": "sales@agent.example", @@ -1085,7 +1085,7 @@ "last_updated": "2025-01-10T17:00:00Z" }, { - "$schema": "/schemas/3.1.13/adagents.json", + "$schema": "/schemas/3.1.14/adagents.json", "contact": { "name": "Premium News Publisher", "email": "adops@news.example.com", @@ -1160,7 +1160,7 @@ "last_updated": "2025-01-10T18:00:00Z" }, { - "$schema": "/schemas/3.1.13/adagents.json", + "$schema": "/schemas/3.1.14/adagents.json", "contact": { "name": "Polk Automotive Data", "email": "partnerships@polk.com", diff --git a/schemas/cache/3.1/brand.json b/schemas/cache/3.1/brand.json index 57e4efac..7a9cab9a 100644 --- a/schemas/cache/3.1/brand.json +++ b/schemas/cache/3.1/brand.json @@ -2720,16 +2720,16 @@ ], "examples": [ { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "authoritative_location": "https://adcontextprotocol.org/brand/abc123/brand.json" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "house": "nikeinc.com", "note": "Redirect to house domain for full brand portfolio" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "agents": [ { @@ -2740,7 +2740,7 @@ ] }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "house": { "domain": "pg.com", @@ -3041,7 +3041,7 @@ "last_updated": "2026-01-15T10:00:00Z" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "house": { "domain": "nikeinc.com", @@ -3222,7 +3222,7 @@ "last_updated": "2026-01-15T10:00:00Z" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "house": { "domain": "mediavine.com", @@ -3273,7 +3273,7 @@ "last_updated": "2026-01-15T10:00:00Z" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "house": { "domain": "nikeinc.com", @@ -3310,7 +3310,7 @@ "last_updated": "2026-01-15T10:00:00Z" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "house": { "domain": "wpp.com", @@ -3335,7 +3335,7 @@ "last_updated": "2026-01-15T10:00:00Z" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "id": "converse", "names": [ @@ -3355,7 +3355,7 @@ "last_updated": "2026-01-15T10:00:00Z" }, { - "$schema": "/schemas/3.1.13/brand.json", + "$schema": "/schemas/3.1.14/brand.json", "version": "1.0", "id": "patagonia", "names": [ diff --git a/schemas/cache/3.1/bundled/content-standards/calibrate-content-request.json b/schemas/cache/3.1/bundled/content-standards/calibrate-content-request.json index 2430e254..1b1b22ed 100644 --- a/schemas/cache/3.1/bundled/content-standards/calibrate-content-request.json +++ b/schemas/cache/3.1/bundled/content-standards/calibrate-content-request.json @@ -2279,7 +2279,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.079Z", + "generatedAt": "2026-08-15T20:02:32.716Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/calibrate-content-response.json b/schemas/cache/3.1/bundled/content-standards/calibrate-content-response.json index 753198a4..916e8a1c 100644 --- a/schemas/cache/3.1/bundled/content-standards/calibrate-content-response.json +++ b/schemas/cache/3.1/bundled/content-standards/calibrate-content-response.json @@ -667,7 +667,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.083Z", + "generatedAt": "2026-08-15T20:02:32.719Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/create-content-standards-request.json b/schemas/cache/3.1/bundled/content-standards/create-content-standards-request.json index af638f92..20efbb3b 100644 --- a/schemas/cache/3.1/bundled/content-standards/create-content-standards-request.json +++ b/schemas/cache/3.1/bundled/content-standards/create-content-standards-request.json @@ -4697,7 +4697,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.098Z", + "generatedAt": "2026-08-15T20:02:32.734Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/create-content-standards-response.json b/schemas/cache/3.1/bundled/content-standards/create-content-standards-response.json index dce53247..d8580b8b 100644 --- a/schemas/cache/3.1/bundled/content-standards/create-content-standards-response.json +++ b/schemas/cache/3.1/bundled/content-standards/create-content-standards-response.json @@ -603,7 +603,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.104Z", + "generatedAt": "2026-08-15T20:02:32.740Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/get-content-standards-request.json b/schemas/cache/3.1/bundled/content-standards/get-content-standards-request.json index 0b678aca..d461f173 100644 --- a/schemas/cache/3.1/bundled/content-standards/get-content-standards-request.json +++ b/schemas/cache/3.1/bundled/content-standards/get-content-standards-request.json @@ -51,7 +51,7 @@ "standards_id" ], "_bundled": { - "generatedAt": "2026-08-11T10:05:18.104Z", + "generatedAt": "2026-08-15T20:02:32.740Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/get-content-standards-response.json b/schemas/cache/3.1/bundled/content-standards/get-content-standards-response.json index ac8d08b1..d1ef07c5 100644 --- a/schemas/cache/3.1/bundled/content-standards/get-content-standards-response.json +++ b/schemas/cache/3.1/bundled/content-standards/get-content-standards-response.json @@ -5454,7 +5454,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.119Z", + "generatedAt": "2026-08-15T20:02:32.756Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-request.json b/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-request.json index 84a7124c..6f46f8d1 100644 --- a/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-request.json +++ b/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-request.json @@ -743,7 +743,7 @@ "media_buy_id" ], "_bundled": { - "generatedAt": "2026-08-11T10:05:18.125Z", + "generatedAt": "2026-08-15T20:02:32.761Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-response.json b/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-response.json index e684cfa1..b23653e1 100644 --- a/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-response.json +++ b/schemas/cache/3.1/bundled/content-standards/get-media-buy-artifacts-response.json @@ -2921,7 +2921,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.129Z", + "generatedAt": "2026-08-15T20:02:32.766Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/list-content-standards-request.json b/schemas/cache/3.1/bundled/content-standards/list-content-standards-request.json index ac288a62..bd8085b9 100644 --- a/schemas/cache/3.1/bundled/content-standards/list-content-standards-request.json +++ b/schemas/cache/3.1/bundled/content-standards/list-content-standards-request.json @@ -134,7 +134,7 @@ }, "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.130Z", + "generatedAt": "2026-08-15T20:02:32.768Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/list-content-standards-response.json b/schemas/cache/3.1/bundled/content-standards/list-content-standards-response.json index b5832758..3fa20828 100644 --- a/schemas/cache/3.1/bundled/content-standards/list-content-standards-response.json +++ b/schemas/cache/3.1/bundled/content-standards/list-content-standards-response.json @@ -5483,7 +5483,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.136Z", + "generatedAt": "2026-08-15T20:02:32.774Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/update-content-standards-request.json b/schemas/cache/3.1/bundled/content-standards/update-content-standards-request.json index 984f2cc0..c7fae442 100644 --- a/schemas/cache/3.1/bundled/content-standards/update-content-standards-request.json +++ b/schemas/cache/3.1/bundled/content-standards/update-content-standards-request.json @@ -4686,7 +4686,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.142Z", + "generatedAt": "2026-08-15T20:02:32.780Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/update-content-standards-response.json b/schemas/cache/3.1/bundled/content-standards/update-content-standards-response.json index ff4f5849..9edb443f 100644 --- a/schemas/cache/3.1/bundled/content-standards/update-content-standards-response.json +++ b/schemas/cache/3.1/bundled/content-standards/update-content-standards-response.json @@ -618,7 +618,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.144Z", + "generatedAt": "2026-08-15T20:02:32.782Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-request.json b/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-request.json index 0764ee06..43a4f79e 100644 --- a/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-request.json +++ b/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-request.json @@ -2333,7 +2333,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.147Z", + "generatedAt": "2026-08-15T20:02:32.785Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-response.json b/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-response.json index 5dea2958..5fceacf3 100644 --- a/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-response.json +++ b/schemas/cache/3.1/bundled/content-standards/validate-content-delivery-response.json @@ -695,7 +695,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.148Z", + "generatedAt": "2026-08-15T20:02:32.786Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/core/tasks-get-request.json b/schemas/cache/3.1/bundled/core/tasks-get-request.json index fc6f35e6..73f24abe 100644 --- a/schemas/cache/3.1/bundled/core/tasks-get-request.json +++ b/schemas/cache/3.1/bundled/core/tasks-get-request.json @@ -737,7 +737,7 @@ } ], "_bundled": { - "generatedAt": "2026-08-11T10:05:18.150Z", + "generatedAt": "2026-08-15T20:02:32.788Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/core/tasks-get-response.json b/schemas/cache/3.1/bundled/core/tasks-get-response.json index bbdd1a00..aeec7e94 100644 --- a/schemas/cache/3.1/bundled/core/tasks-get-response.json +++ b/schemas/cache/3.1/bundled/core/tasks-get-response.json @@ -7667,21 +7667,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -16428,21 +16414,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -43057,21 +43029,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -51818,21 +51776,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -156034,6 +155978,26 @@ "marketplace_listing": "Marketplace, catalog, directory, or store listing logo." } }, + "CatalogType": { + "title": "Catalog Type", + "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", + "type": "string", + "enum": [ + "offering", + "product", + "inventory", + "store", + "promotion", + "hotel", + "flight", + "job", + "vehicle", + "real_estate", + "education", + "destination", + "app" + ] + }, "VideoPlacementType": { "title": "Video Placement Type", "description": "Declared video placement classification for OLV and other video inventory, using the IAB Tech Lab/OpenRTB 2.6 video.plcmt definitions with AdCP-native value names. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.", @@ -156900,26 +156864,6 @@ "numeric": "Signal with continuous numeric values within a range (e.g., 'purchase_propensity' from 0.0 to 1.0)" } }, - "CatalogType": { - "title": "Catalog Type", - "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", - "type": "string", - "enum": [ - "offering", - "product", - "inventory", - "store", - "promotion", - "hotel", - "flight", - "job", - "vehicle", - "real_estate", - "education", - "destination", - "app" - ] - }, "AssessmentStatus": { "title": "Assessment Status", "description": "Overall measurement readiness level for this product given the buyer's event setup. 'insufficient' means the product cannot optimize effectively with the current setup.", @@ -158095,7 +158039,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.400Z", + "generatedAt": "2026-08-15T20:02:33.027Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/core/tasks-list-request.json b/schemas/cache/3.1/bundled/core/tasks-list-request.json index 929741bc..4dfd66e2 100644 --- a/schemas/cache/3.1/bundled/core/tasks-list-request.json +++ b/schemas/cache/3.1/bundled/core/tasks-list-request.json @@ -993,7 +993,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.464Z", + "generatedAt": "2026-08-15T20:02:33.089Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/core/tasks-list-response.json b/schemas/cache/3.1/bundled/core/tasks-list-response.json index 84aa1460..0925579a 100644 --- a/schemas/cache/3.1/bundled/core/tasks-list-response.json +++ b/schemas/cache/3.1/bundled/core/tasks-list-response.json @@ -665,7 +665,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.465Z", + "generatedAt": "2026-08-15T20:02:33.090Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/get-creative-delivery-request.json b/schemas/cache/3.1/bundled/creative/get-creative-delivery-request.json index 8f12e79e..1b6d69d5 100644 --- a/schemas/cache/3.1/bundled/creative/get-creative-delivery-request.json +++ b/schemas/cache/3.1/bundled/creative/get-creative-delivery-request.json @@ -754,7 +754,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.466Z", + "generatedAt": "2026-08-15T20:02:33.091Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/get-creative-delivery-response.json b/schemas/cache/3.1/bundled/creative/get-creative-delivery-response.json index 7013b623..515c5d5b 100644 --- a/schemas/cache/3.1/bundled/creative/get-creative-delivery-response.json +++ b/schemas/cache/3.1/bundled/creative/get-creative-delivery-response.json @@ -23570,7 +23570,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.495Z", + "generatedAt": "2026-08-15T20:02:33.123Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/get-creative-features-request.json b/schemas/cache/3.1/bundled/creative/get-creative-features-request.json index f21ced24..5d037532 100644 --- a/schemas/cache/3.1/bundled/creative/get-creative-features-request.json +++ b/schemas/cache/3.1/bundled/creative/get-creative-features-request.json @@ -20170,7 +20170,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.524Z", + "generatedAt": "2026-08-15T20:02:33.152Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/get-creative-features-response.json b/schemas/cache/3.1/bundled/creative/get-creative-features-response.json index 0ddcc93c..0fde044c 100644 --- a/schemas/cache/3.1/bundled/creative/get-creative-features-response.json +++ b/schemas/cache/3.1/bundled/creative/get-creative-features-response.json @@ -836,7 +836,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.530Z", + "generatedAt": "2026-08-15T20:02:33.159Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/list-creative-formats-request.json b/schemas/cache/3.1/bundled/creative/list-creative-formats-request.json index cff287cb..9ae9da3d 100644 --- a/schemas/cache/3.1/bundled/creative/list-creative-formats-request.json +++ b/schemas/cache/3.1/bundled/creative/list-creative-formats-request.json @@ -988,7 +988,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.532Z", + "generatedAt": "2026-08-15T20:02:33.161Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/list-creative-formats-response.json b/schemas/cache/3.1/bundled/creative/list-creative-formats-response.json index a9219e73..7d4bbe11 100644 --- a/schemas/cache/3.1/bundled/creative/list-creative-formats-response.json +++ b/schemas/cache/3.1/bundled/creative/list-creative-formats-response.json @@ -1505,24 +1505,7 @@ "type": "object", "properties": { "catalog_type": { - "title": "Catalog Type", - "description": "The catalog type this requirement applies to", - "type": "string", - "enum": [ - "offering", - "product", - "inventory", - "store", - "promotion", - "hotel", - "flight", - "job", - "vehicle", - "real_estate", - "education", - "destination", - "app" - ] + "$ref": "#/$defs/CatalogType" }, "required": { "type": "boolean", @@ -10727,21 +10710,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -13531,6 +13500,26 @@ "7.1" ] }, + "CatalogType": { + "title": "Catalog Type", + "description": "The catalog type this requirement applies to", + "type": "string", + "enum": [ + "offering", + "product", + "inventory", + "store", + "promotion", + "hotel", + "flight", + "job", + "vehicle", + "real_estate", + "education", + "destination", + "app" + ] + }, "DisclosurePosition": { "title": "Disclosure Position", "description": "Where a required disclosure should appear within a creative. Used by creative briefs to specify disclosure placement and by formats to declare which positions they can render.", @@ -13645,7 +13634,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.545Z", + "generatedAt": "2026-08-15T20:02:33.174Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/list-creatives-request.json b/schemas/cache/3.1/bundled/creative/list-creatives-request.json index a7f390fd..4ab814dd 100644 --- a/schemas/cache/3.1/bundled/creative/list-creatives-request.json +++ b/schemas/cache/3.1/bundled/creative/list-creatives-request.json @@ -1666,7 +1666,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.551Z", + "generatedAt": "2026-08-15T20:02:33.180Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/list-creatives-response.json b/schemas/cache/3.1/bundled/creative/list-creatives-response.json index fc1dcfcb..5d1126aa 100644 --- a/schemas/cache/3.1/bundled/creative/list-creatives-response.json +++ b/schemas/cache/3.1/bundled/creative/list-creatives-response.json @@ -21408,7 +21408,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.571Z", + "generatedAt": "2026-08-15T20:02:33.200Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/list-transformers-request.json b/schemas/cache/3.1/bundled/creative/list-transformers-request.json index 1d9f88c3..34bef723 100644 --- a/schemas/cache/3.1/bundled/creative/list-transformers-request.json +++ b/schemas/cache/3.1/bundled/creative/list-transformers-request.json @@ -887,7 +887,7 @@ }, "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.579Z", + "generatedAt": "2026-08-15T20:02:33.207Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/list-transformers-response.json b/schemas/cache/3.1/bundled/creative/list-transformers-response.json index bf688074..b7b054bf 100644 --- a/schemas/cache/3.1/bundled/creative/list-transformers-response.json +++ b/schemas/cache/3.1/bundled/creative/list-transformers-response.json @@ -1413,7 +1413,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.580Z", + "generatedAt": "2026-08-15T20:02:33.209Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/preview-creative-request.json b/schemas/cache/3.1/bundled/creative/preview-creative-request.json index c8fc1280..ee06eea0 100644 --- a/schemas/cache/3.1/bundled/creative/preview-creative-request.json +++ b/schemas/cache/3.1/bundled/creative/preview-creative-request.json @@ -38730,7 +38730,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.617Z", + "generatedAt": "2026-08-15T20:02:33.246Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/preview-creative-response.json b/schemas/cache/3.1/bundled/creative/preview-creative-response.json index c7fb557c..add0a9fa 100644 --- a/schemas/cache/3.1/bundled/creative/preview-creative-response.json +++ b/schemas/cache/3.1/bundled/creative/preview-creative-response.json @@ -21080,7 +21080,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.650Z", + "generatedAt": "2026-08-15T20:02:33.278Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/sync-creatives-request.json b/schemas/cache/3.1/bundled/creative/sync-creatives-request.json index fef7d04b..4c5403e2 100644 --- a/schemas/cache/3.1/bundled/creative/sync-creatives-request.json +++ b/schemas/cache/3.1/bundled/creative/sync-creatives-request.json @@ -19885,7 +19885,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.678Z", + "generatedAt": "2026-08-15T20:02:33.303Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/sync-creatives-response.json b/schemas/cache/3.1/bundled/creative/sync-creatives-response.json index ba032632..69b08710 100644 --- a/schemas/cache/3.1/bundled/creative/sync-creatives-response.json +++ b/schemas/cache/3.1/bundled/creative/sync-creatives-response.json @@ -2448,7 +2448,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.688Z", + "generatedAt": "2026-08-15T20:02:33.313Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/validate-input-request.json b/schemas/cache/3.1/bundled/creative/validate-input-request.json index 2e11fde5..7ac9379f 100644 --- a/schemas/cache/3.1/bundled/creative/validate-input-request.json +++ b/schemas/cache/3.1/bundled/creative/validate-input-request.json @@ -20724,7 +20724,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.708Z", + "generatedAt": "2026-08-15T20:02:33.333Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/creative/validate-input-response.json b/schemas/cache/3.1/bundled/creative/validate-input-response.json index 6cdfdd0a..f466497a 100644 --- a/schemas/cache/3.1/bundled/creative/validate-input-response.json +++ b/schemas/cache/3.1/bundled/creative/validate-input-response.json @@ -592,7 +592,7 @@ } ], "_bundled": { - "generatedAt": "2026-08-11T10:05:18.715Z", + "generatedAt": "2026-08-15T20:02:33.340Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/build-creative-request.json b/schemas/cache/3.1/bundled/media-buy/build-creative-request.json index 08dd531e..87f1ad36 100644 --- a/schemas/cache/3.1/bundled/media-buy/build-creative-request.json +++ b/schemas/cache/3.1/bundled/media-buy/build-creative-request.json @@ -26224,7 +26224,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.743Z", + "generatedAt": "2026-08-15T20:02:33.366Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/build-creative-response.json b/schemas/cache/3.1/bundled/media-buy/build-creative-response.json index 59af6b5f..4662a58e 100644 --- a/schemas/cache/3.1/bundled/media-buy/build-creative-response.json +++ b/schemas/cache/3.1/bundled/media-buy/build-creative-response.json @@ -60679,7 +60679,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.841Z", + "generatedAt": "2026-08-15T20:02:33.462Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/create-media-buy-request.json b/schemas/cache/3.1/bundled/media-buy/create-media-buy-request.json index 5ab38565..f86d5635 100644 --- a/schemas/cache/3.1/bundled/media-buy/create-media-buy-request.json +++ b/schemas/cache/3.1/bundled/media-buy/create-media-buy-request.json @@ -27058,7 +27058,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.891Z", + "generatedAt": "2026-08-15T20:02:33.513Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/create-media-buy-response.json b/schemas/cache/3.1/bundled/media-buy/create-media-buy-response.json index ec408854..cb9697a7 100644 --- a/schemas/cache/3.1/bundled/media-buy/create-media-buy-response.json +++ b/schemas/cache/3.1/bundled/media-buy/create-media-buy-response.json @@ -10489,7 +10489,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.910Z", + "generatedAt": "2026-08-15T20:02:33.530Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-request.json b/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-request.json index 6967ee75..0e8ecdbf 100644 --- a/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-request.json +++ b/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-request.json @@ -1332,7 +1332,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.915Z", + "generatedAt": "2026-08-15T20:02:33.535Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-response.json b/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-response.json index b1ac5990..0498f45c 100644 --- a/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-response.json +++ b/schemas/cache/3.1/bundled/media-buy/get-media-buy-delivery-response.json @@ -22157,7 +22157,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.935Z", + "generatedAt": "2026-08-15T20:02:33.556Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/get-media-buys-request.json b/schemas/cache/3.1/bundled/media-buy/get-media-buys-request.json index 7610ac76..fa41b387 100644 --- a/schemas/cache/3.1/bundled/media-buy/get-media-buys-request.json +++ b/schemas/cache/3.1/bundled/media-buy/get-media-buys-request.json @@ -782,7 +782,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.944Z", + "generatedAt": "2026-08-15T20:02:33.565Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/get-media-buys-response.json b/schemas/cache/3.1/bundled/media-buy/get-media-buys-response.json index 00164c86..ca1a854a 100644 --- a/schemas/cache/3.1/bundled/media-buy/get-media-buys-response.json +++ b/schemas/cache/3.1/bundled/media-buy/get-media-buys-response.json @@ -6142,7 +6142,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.951Z", + "generatedAt": "2026-08-15T20:02:33.570Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/get-products-request.json b/schemas/cache/3.1/bundled/media-buy/get-products-request.json index df339e09..9ca486ae 100644 --- a/schemas/cache/3.1/bundled/media-buy/get-products-request.json +++ b/schemas/cache/3.1/bundled/media-buy/get-products-request.json @@ -5317,7 +5317,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.957Z", + "generatedAt": "2026-08-15T20:02:33.576Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/get-products-response.json b/schemas/cache/3.1/bundled/media-buy/get-products-response.json index 98561a2f..b462fced 100644 --- a/schemas/cache/3.1/bundled/media-buy/get-products-response.json +++ b/schemas/cache/3.1/bundled/media-buy/get-products-response.json @@ -7108,21 +7108,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -15869,21 +15855,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -27135,24 +27107,7 @@ "type": "array", "description": "Catalog types this product supports for catalog-driven campaigns. A sponsored product listing declares [\"product\"], a job board declares [\"job\", \"offering\"]. Buyers match synced catalogs to products via this field.", "items": { - "title": "Catalog Type", - "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", - "type": "string", - "enum": [ - "offering", - "product", - "inventory", - "store", - "promotion", - "hotel", - "flight", - "job", - "vehicle", - "real_estate", - "education", - "destination", - "app" - ] + "$ref": "#/$defs/CatalogType" }, "uniqueItems": true, "minItems": 1 @@ -36409,6 +36364,26 @@ "marketplace_listing": "Marketplace, catalog, directory, or store listing logo." } }, + "CatalogType": { + "title": "Catalog Type", + "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", + "type": "string", + "enum": [ + "offering", + "product", + "inventory", + "store", + "promotion", + "hotel", + "flight", + "job", + "vehicle", + "real_estate", + "education", + "destination", + "app" + ] + }, "VideoPlacementType": { "title": "Video Placement Type", "description": "Declared video placement classification for OLV and other video inventory, using the IAB Tech Lab/OpenRTB 2.6 video.plcmt definitions with AdCP-native value names. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.", @@ -37002,7 +36977,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:18.996Z", + "generatedAt": "2026-08-15T20:02:33.615Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/list-creative-formats-request.json b/schemas/cache/3.1/bundled/media-buy/list-creative-formats-request.json index 2ba5d5dc..01b0d2e4 100644 --- a/schemas/cache/3.1/bundled/media-buy/list-creative-formats-request.json +++ b/schemas/cache/3.1/bundled/media-buy/list-creative-formats-request.json @@ -343,7 +343,7 @@ }, "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.008Z", + "generatedAt": "2026-08-15T20:02:33.628Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/list-creative-formats-response.json b/schemas/cache/3.1/bundled/media-buy/list-creative-formats-response.json index 1c1be576..187658de 100644 --- a/schemas/cache/3.1/bundled/media-buy/list-creative-formats-response.json +++ b/schemas/cache/3.1/bundled/media-buy/list-creative-formats-response.json @@ -1505,24 +1505,7 @@ "type": "object", "properties": { "catalog_type": { - "title": "Catalog Type", - "description": "The catalog type this requirement applies to", - "type": "string", - "enum": [ - "offering", - "product", - "inventory", - "store", - "promotion", - "hotel", - "flight", - "job", - "vehicle", - "real_estate", - "education", - "destination", - "app" - ] + "$ref": "#/$defs/CatalogType" }, "required": { "type": "boolean", @@ -10727,21 +10710,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -13544,6 +13513,26 @@ "7.1" ] }, + "CatalogType": { + "title": "Catalog Type", + "description": "The catalog type this requirement applies to", + "type": "string", + "enum": [ + "offering", + "product", + "inventory", + "store", + "promotion", + "hotel", + "flight", + "job", + "vehicle", + "real_estate", + "education", + "destination", + "app" + ] + }, "DisclosurePosition": { "title": "Disclosure Position", "description": "Where a required disclosure should appear within a creative. Used by creative briefs to specify disclosure placement and by formats to declare which positions they can render.", @@ -13658,7 +13647,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.021Z", + "generatedAt": "2026-08-15T20:02:33.639Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/log-event-request.json b/schemas/cache/3.1/bundled/media-buy/log-event-request.json index 01089c32..9a25264d 100644 --- a/schemas/cache/3.1/bundled/media-buy/log-event-request.json +++ b/schemas/cache/3.1/bundled/media-buy/log-event-request.json @@ -627,7 +627,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.027Z", + "generatedAt": "2026-08-15T20:02:33.645Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/log-event-response.json b/schemas/cache/3.1/bundled/media-buy/log-event-response.json index b9ed4205..c0037f83 100644 --- a/schemas/cache/3.1/bundled/media-buy/log-event-response.json +++ b/schemas/cache/3.1/bundled/media-buy/log-event-response.json @@ -680,7 +680,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.027Z", + "generatedAt": "2026-08-15T20:02:33.646Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/package-request.json b/schemas/cache/3.1/bundled/media-buy/package-request.json index 8695b296..7c5da332 100644 --- a/schemas/cache/3.1/bundled/media-buy/package-request.json +++ b/schemas/cache/3.1/bundled/media-buy/package-request.json @@ -25250,7 +25250,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.052Z", + "generatedAt": "2026-08-15T20:02:33.673Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-request.json b/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-request.json index f2722dc1..80a1aa9d 100644 --- a/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-request.json +++ b/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-request.json @@ -132,7 +132,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.059Z", + "generatedAt": "2026-08-15T20:02:33.681Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-response.json b/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-response.json index e5631dd3..e8115bce 100644 --- a/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-response.json +++ b/schemas/cache/3.1/bundled/media-buy/provide-performance-feedback-response.json @@ -629,7 +629,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.060Z", + "generatedAt": "2026-08-15T20:02:33.681Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/sync-audiences-request.json b/schemas/cache/3.1/bundled/media-buy/sync-audiences-request.json index 012b5afd..18aaf7f0 100644 --- a/schemas/cache/3.1/bundled/media-buy/sync-audiences-request.json +++ b/schemas/cache/3.1/bundled/media-buy/sync-audiences-request.json @@ -965,7 +965,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.061Z", + "generatedAt": "2026-08-15T20:02:33.683Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/sync-audiences-response.json b/schemas/cache/3.1/bundled/media-buy/sync-audiences-response.json index 4d370b15..300a0343 100644 --- a/schemas/cache/3.1/bundled/media-buy/sync-audiences-response.json +++ b/schemas/cache/3.1/bundled/media-buy/sync-audiences-response.json @@ -1104,7 +1104,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.063Z", + "generatedAt": "2026-08-15T20:02:33.684Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/sync-catalogs-request.json b/schemas/cache/3.1/bundled/media-buy/sync-catalogs-request.json index b45e6e37..948504b6 100644 --- a/schemas/cache/3.1/bundled/media-buy/sync-catalogs-request.json +++ b/schemas/cache/3.1/bundled/media-buy/sync-catalogs-request.json @@ -1372,7 +1372,7 @@ } ], "_bundled": { - "generatedAt": "2026-08-11T10:05:19.065Z", + "generatedAt": "2026-08-15T20:02:33.686Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/sync-catalogs-response.json b/schemas/cache/3.1/bundled/media-buy/sync-catalogs-response.json index 1d23ece6..078c9f4e 100644 --- a/schemas/cache/3.1/bundled/media-buy/sync-catalogs-response.json +++ b/schemas/cache/3.1/bundled/media-buy/sync-catalogs-response.json @@ -1089,7 +1089,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.066Z", + "generatedAt": "2026-08-15T20:02:33.688Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/sync-event-sources-request.json b/schemas/cache/3.1/bundled/media-buy/sync-event-sources-request.json index 619f048a..e86b148b 100644 --- a/schemas/cache/3.1/bundled/media-buy/sync-event-sources-request.json +++ b/schemas/cache/3.1/bundled/media-buy/sync-event-sources-request.json @@ -905,7 +905,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.068Z", + "generatedAt": "2026-08-15T20:02:33.689Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/sync-event-sources-response.json b/schemas/cache/3.1/bundled/media-buy/sync-event-sources-response.json index 409c2824..4fc3a089 100644 --- a/schemas/cache/3.1/bundled/media-buy/sync-event-sources-response.json +++ b/schemas/cache/3.1/bundled/media-buy/sync-event-sources-response.json @@ -1098,7 +1098,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.069Z", + "generatedAt": "2026-08-15T20:02:33.690Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/update-media-buy-request.json b/schemas/cache/3.1/bundled/media-buy/update-media-buy-request.json index 095f2a4c..af5e5978 100644 --- a/schemas/cache/3.1/bundled/media-buy/update-media-buy-request.json +++ b/schemas/cache/3.1/bundled/media-buy/update-media-buy-request.json @@ -48818,7 +48818,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.114Z", + "generatedAt": "2026-08-15T20:02:33.744Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/media-buy/update-media-buy-response.json b/schemas/cache/3.1/bundled/media-buy/update-media-buy-response.json index 8a81ac16..82cdcafe 100644 --- a/schemas/cache/3.1/bundled/media-buy/update-media-buy-response.json +++ b/schemas/cache/3.1/bundled/media-buy/update-media-buy-response.json @@ -8068,7 +8068,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.137Z", + "generatedAt": "2026-08-15T20:02:33.768Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/create-property-list-request.json b/schemas/cache/3.1/bundled/property/create-property-list-request.json index 1bb35c9d..a4c43d64 100644 --- a/schemas/cache/3.1/bundled/property/create-property-list-request.json +++ b/schemas/cache/3.1/bundled/property/create-property-list-request.json @@ -1602,7 +1602,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.142Z", + "generatedAt": "2026-08-15T20:02:33.772Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/create-property-list-response.json b/schemas/cache/3.1/bundled/property/create-property-list-response.json index e5800108..750e8517 100644 --- a/schemas/cache/3.1/bundled/property/create-property-list-response.json +++ b/schemas/cache/3.1/bundled/property/create-property-list-response.json @@ -2322,7 +2322,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.145Z", + "generatedAt": "2026-08-15T20:02:33.775Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/delete-property-list-request.json b/schemas/cache/3.1/bundled/property/delete-property-list-request.json index 7fb1b47b..cffe2922 100644 --- a/schemas/cache/3.1/bundled/property/delete-property-list-request.json +++ b/schemas/cache/3.1/bundled/property/delete-property-list-request.json @@ -707,7 +707,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.146Z", + "generatedAt": "2026-08-15T20:02:33.777Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/delete-property-list-response.json b/schemas/cache/3.1/bundled/property/delete-property-list-response.json index b0994f29..8725e4cf 100644 --- a/schemas/cache/3.1/bundled/property/delete-property-list-response.json +++ b/schemas/cache/3.1/bundled/property/delete-property-list-response.json @@ -456,7 +456,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.147Z", + "generatedAt": "2026-08-15T20:02:33.777Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/get-property-list-request.json b/schemas/cache/3.1/bundled/property/get-property-list-request.json index 90de7d1b..3e82048d 100644 --- a/schemas/cache/3.1/bundled/property/get-property-list-request.json +++ b/schemas/cache/3.1/bundled/property/get-property-list-request.json @@ -721,7 +721,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.148Z", + "generatedAt": "2026-08-15T20:02:33.778Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/get-property-list-response.json b/schemas/cache/3.1/bundled/property/get-property-list-response.json index a0aa0638..073a14ca 100644 --- a/schemas/cache/3.1/bundled/property/get-property-list-response.json +++ b/schemas/cache/3.1/bundled/property/get-property-list-response.json @@ -2395,7 +2395,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.150Z", + "generatedAt": "2026-08-15T20:02:33.781Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/list-property-lists-request.json b/schemas/cache/3.1/bundled/property/list-property-lists-request.json index 1c2aa026..f2d8edd6 100644 --- a/schemas/cache/3.1/bundled/property/list-property-lists-request.json +++ b/schemas/cache/3.1/bundled/property/list-property-lists-request.json @@ -713,7 +713,7 @@ }, "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.151Z", + "generatedAt": "2026-08-15T20:02:33.782Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/list-property-lists-response.json b/schemas/cache/3.1/bundled/property/list-property-lists-response.json index fa0b11be..0c2bd561 100644 --- a/schemas/cache/3.1/bundled/property/list-property-lists-response.json +++ b/schemas/cache/3.1/bundled/property/list-property-lists-response.json @@ -2340,7 +2340,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.154Z", + "generatedAt": "2026-08-15T20:02:33.785Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/update-property-list-request.json b/schemas/cache/3.1/bundled/property/update-property-list-request.json index 2d608b25..9fed74eb 100644 --- a/schemas/cache/3.1/bundled/property/update-property-list-request.json +++ b/schemas/cache/3.1/bundled/property/update-property-list-request.json @@ -1611,7 +1611,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.156Z", + "generatedAt": "2026-08-15T20:02:33.788Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/update-property-list-response.json b/schemas/cache/3.1/bundled/property/update-property-list-response.json index 053a0bdb..be2dc850 100644 --- a/schemas/cache/3.1/bundled/property/update-property-list-response.json +++ b/schemas/cache/3.1/bundled/property/update-property-list-response.json @@ -2317,7 +2317,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.159Z", + "generatedAt": "2026-08-15T20:02:33.790Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/validate-property-delivery-request.json b/schemas/cache/3.1/bundled/property/validate-property-delivery-request.json index 1fd7c530..e5da4ab7 100644 --- a/schemas/cache/3.1/bundled/property/validate-property-delivery-request.json +++ b/schemas/cache/3.1/bundled/property/validate-property-delivery-request.json @@ -817,7 +817,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.161Z", + "generatedAt": "2026-08-15T20:02:33.792Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/property/validate-property-delivery-response.json b/schemas/cache/3.1/bundled/property/validate-property-delivery-response.json index 4307d83e..60ba12ab 100644 --- a/schemas/cache/3.1/bundled/property/validate-property-delivery-response.json +++ b/schemas/cache/3.1/bundled/property/validate-property-delivery-response.json @@ -830,7 +830,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.162Z", + "generatedAt": "2026-08-15T20:02:33.793Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-request.json b/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-request.json index a36d67f8..b606d0cd 100644 --- a/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-request.json +++ b/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-request.json @@ -60,7 +60,7 @@ }, "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.163Z", + "generatedAt": "2026-08-15T20:02:33.794Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-response.json b/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-response.json index d53602d4..ad376654 100644 --- a/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-response.json +++ b/schemas/cache/3.1/bundled/protocol/get-adcp-capabilities-response.json @@ -768,6 +768,8 @@ "type": "array", "description": "Surface types this seller supports via TMP.", "items": { + "title": "Property Type", + "description": "Types of addressable advertising properties with verifiable ownership. Property types are a subset of media channels - they represent inventory surfaces that can be validated via adagents.json.", "type": "string", "enum": [ "website", @@ -777,9 +779,22 @@ "dooh", "podcast", "radio", + "linear_tv", "streaming_audio", "ai_assistant" - ] + ], + "enumDescriptions": { + "website": "Web properties accessible via browser, identified by domain", + "mobile_app": "Native mobile applications, identified by app store IDs or bundle identifiers", + "ctv_app": "Connected TV applications, identified by platform-specific store IDs", + "desktop_app": "Desktop applications (Electron, native, Chromium wrappers), identified by application bundle IDs", + "dooh": "Digital out-of-home screen networks, identified by network/venue IDs", + "podcast": "Podcast feeds and episodes, identified by RSS feed URLs or podcast IDs", + "radio": "Radio station properties, identified by station ID or facility ID", + "linear_tv": "Linear television stations and networks, identified by station ID or facility ID", + "streaming_audio": "Digital audio streaming properties, identified by platform-specific IDs", + "ai_assistant": "AI-powered conversational interfaces including chatbots, AI assistants, and conversational AI platforms, identified by platform-specific IDs" + } } } } @@ -8554,20 +8569,23 @@ "supported_catalog_types": { "type": "array", "items": { + "title": "Catalog Type", + "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", "type": "string", "enum": [ + "offering", "product", + "inventory", "store", - "offering", + "promotion", "hotel", "flight", + "job", "vehicle", "real_estate", "education", "destination", - "app", - "job", - "inventory" + "app" ] }, "description": "Catalog types this product accepts." @@ -11750,7 +11768,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.172Z", + "generatedAt": "2026-08-15T20:02:33.803Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/protocol/get-task-status-request.json b/schemas/cache/3.1/bundled/protocol/get-task-status-request.json index 6cac12bb..c76d607a 100644 --- a/schemas/cache/3.1/bundled/protocol/get-task-status-request.json +++ b/schemas/cache/3.1/bundled/protocol/get-task-status-request.json @@ -737,7 +737,7 @@ } ], "_bundled": { - "generatedAt": "2026-08-11T10:05:19.177Z", + "generatedAt": "2026-08-15T20:02:33.808Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/protocol/get-task-status-response.json b/schemas/cache/3.1/bundled/protocol/get-task-status-response.json index 20f10540..ff223298 100644 --- a/schemas/cache/3.1/bundled/protocol/get-task-status-response.json +++ b/schemas/cache/3.1/bundled/protocol/get-task-status-response.json @@ -7667,21 +7667,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -16428,21 +16414,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -43057,21 +43029,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -51818,21 +51776,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "#/$defs/CatalogType" }, "description": "Catalog types this product accepts." }, @@ -156034,6 +155978,26 @@ "marketplace_listing": "Marketplace, catalog, directory, or store listing logo." } }, + "CatalogType": { + "title": "Catalog Type", + "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", + "type": "string", + "enum": [ + "offering", + "product", + "inventory", + "store", + "promotion", + "hotel", + "flight", + "job", + "vehicle", + "real_estate", + "education", + "destination", + "app" + ] + }, "VideoPlacementType": { "title": "Video Placement Type", "description": "Declared video placement classification for OLV and other video inventory, using the IAB Tech Lab/OpenRTB 2.6 video.plcmt definitions with AdCP-native value names. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.", @@ -156900,26 +156864,6 @@ "numeric": "Signal with continuous numeric values within a range (e.g., 'purchase_propensity' from 0.0 to 1.0)" } }, - "CatalogType": { - "title": "Catalog Type", - "description": "The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.", - "type": "string", - "enum": [ - "offering", - "product", - "inventory", - "store", - "promotion", - "hotel", - "flight", - "job", - "vehicle", - "real_estate", - "education", - "destination", - "app" - ] - }, "AssessmentStatus": { "title": "Assessment Status", "description": "Overall measurement readiness level for this product given the buyer's event setup. 'insufficient' means the product cannot optimize effectively with the current setup.", @@ -158095,7 +158039,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.341Z", + "generatedAt": "2026-08-15T20:02:33.946Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/protocol/list-tasks-request.json b/schemas/cache/3.1/bundled/protocol/list-tasks-request.json index b01e02f8..794605dd 100644 --- a/schemas/cache/3.1/bundled/protocol/list-tasks-request.json +++ b/schemas/cache/3.1/bundled/protocol/list-tasks-request.json @@ -993,7 +993,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.404Z", + "generatedAt": "2026-08-15T20:02:34.006Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/protocol/list-tasks-response.json b/schemas/cache/3.1/bundled/protocol/list-tasks-response.json index 55dd865d..66a58e4d 100644 --- a/schemas/cache/3.1/bundled/protocol/list-tasks-response.json +++ b/schemas/cache/3.1/bundled/protocol/list-tasks-response.json @@ -665,7 +665,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.405Z", + "generatedAt": "2026-08-15T20:02:34.007Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/signals/activate-signal-request.json b/schemas/cache/3.1/bundled/signals/activate-signal-request.json index 20a1a642..32b82998 100644 --- a/schemas/cache/3.1/bundled/signals/activate-signal-request.json +++ b/schemas/cache/3.1/bundled/signals/activate-signal-request.json @@ -788,7 +788,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.406Z", + "generatedAt": "2026-08-15T20:02:34.009Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/signals/activate-signal-response.json b/schemas/cache/3.1/bundled/signals/activate-signal-response.json index bcf7ba2e..c0c63756 100644 --- a/schemas/cache/3.1/bundled/signals/activate-signal-response.json +++ b/schemas/cache/3.1/bundled/signals/activate-signal-response.json @@ -816,7 +816,7 @@ ], "properties": {}, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.407Z", + "generatedAt": "2026-08-15T20:02:34.010Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/signals/get-signals-request.json b/schemas/cache/3.1/bundled/signals/get-signals-request.json index 4ca4c38b..e0204bb7 100644 --- a/schemas/cache/3.1/bundled/signals/get-signals-request.json +++ b/schemas/cache/3.1/bundled/signals/get-signals-request.json @@ -1286,7 +1286,7 @@ }, "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.409Z", + "generatedAt": "2026-08-15T20:02:34.012Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/signals/get-signals-response.json b/schemas/cache/3.1/bundled/signals/get-signals-response.json index 4424f26c..d083e631 100644 --- a/schemas/cache/3.1/bundled/signals/get-signals-response.json +++ b/schemas/cache/3.1/bundled/signals/get-signals-response.json @@ -5608,7 +5608,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.415Z", + "generatedAt": "2026-08-15T20:02:34.016Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-request.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-request.json index de7cbd34..883422f3 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-request.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-request.json @@ -70,7 +70,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.417Z", + "generatedAt": "2026-08-15T20:02:34.018Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-response.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-response.json index bdb75656..475c09e7 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-response.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-get-offering-response.json @@ -1477,7 +1477,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.418Z", + "generatedAt": "2026-08-15T20:02:34.020Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-request.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-request.json index 650f4591..555a11bf 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-request.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-request.json @@ -1400,7 +1400,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.420Z", + "generatedAt": "2026-08-15T20:02:34.022Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-response.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-response.json index 5595bb3a..81068253 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-response.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-initiate-session-response.json @@ -1859,7 +1859,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.422Z", + "generatedAt": "2026-08-15T20:02:34.024Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-request.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-request.json index baa2d389..40dfdc4c 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-request.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-request.json @@ -1159,7 +1159,7 @@ } }, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.424Z", + "generatedAt": "2026-08-15T20:02:34.026Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-response.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-response.json index 4b675813..5991ea79 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-response.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-send-message-response.json @@ -1830,7 +1830,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.426Z", + "generatedAt": "2026-08-15T20:02:34.028Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-request.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-request.json index 4cf9d6d6..7cf9fd9c 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-request.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-request.json @@ -100,7 +100,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.427Z", + "generatedAt": "2026-08-15T20:02:34.028Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-response.json b/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-response.json index 8e9bd5b8..0e8c6433 100644 --- a/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-response.json +++ b/schemas/cache/3.1/bundled/sponsored-intelligence/si-terminate-session-response.json @@ -642,7 +642,7 @@ ], "additionalProperties": true, "_bundled": { - "generatedAt": "2026-08-11T10:05:19.428Z", + "generatedAt": "2026-08-15T20:02:34.029Z", "note": "This is a bundled schema with all $ref resolved inline. For the modular version with references, use the parent directory." } } \ No newline at end of file diff --git a/schemas/cache/3.1/core/registry-event.json b/schemas/cache/3.1/core/registry-event.json index 3de84f7f..4c487461 100644 --- a/schemas/cache/3.1/core/registry-event.json +++ b/schemas/cache/3.1/core/registry-event.json @@ -795,15 +795,7 @@ "additionalProperties": true }, "badgeRole": { - "type": "string", - "enum": [ - "media-buy", - "creative", - "signals", - "governance", - "brand", - "sponsored-intelligence" - ] + "$ref": "../enums/adcp-protocol.json" }, "stringArray": { "type": "array", diff --git a/schemas/cache/3.1/creative/asset-types/index.json b/schemas/cache/3.1/creative/asset-types/index.json index a885569e..42572647 100644 --- a/schemas/cache/3.1/creative/asset-types/index.json +++ b/schemas/cache/3.1/creative/asset-types/index.json @@ -3,7 +3,7 @@ "title": "AdCP Asset Type Registry", "description": "Registry of asset types used in AdCP creative manifests. Each asset type defines the structure of actual content payloads (what you send), not requirements or constraints (which belong in format specifications).", "version": "1.0.0", - "lastUpdated": "2026-08-11", + "lastUpdated": "2026-08-15", "asset_types": { "image": { "description": "Static image asset (JPG, PNG, GIF, WebP, SVG)", @@ -139,9 +139,9 @@ "creative_manifests": "Creative manifests provide actual asset content, keyed by asset_id from the format. Each asset value carries an `asset_type` discriminator (one of the registry keys) so validators can select the matching asset schema and report errors against only that branch. The format specification also defines what asset_type each asset_id should have \u2014 payload and format should agree.", "example_flow": "Format says 'hero_image' must be type 'image' with width 1200, height 627. Manifest provides hero_image: {url: '...', width: 1200, height: 627}. The format spec tells us it's an image type." }, - "published_version": "3.1.13", - "adcp_version": "3.1.13", - "baseUrl": "/schemas/3.1.13", + "published_version": "3.1.14", + "adcp_version": "3.1.14", + "baseUrl": "/schemas/3.1.14", "protocol_layers": [ { "id": "negotiation", @@ -170,6 +170,6 @@ "prerelease": false, "deprecated": false, "versioning": { - "note": "AdCP uses build-time versioning. This directory contains schemas for AdCP 3.1.13. Full semantic versions are available at /schemas/{version}/ (e.g., /schemas/2.5.0/). Major version aliases point to the latest stable release in that major line; use /schemas/index.json or /schemas/latest.json for the canonical file-based pointer." + "note": "AdCP uses build-time versioning. This directory contains schemas for AdCP 3.1.14. Full semantic versions are available at /schemas/{version}/ (e.g., /schemas/2.5.0/). Major version aliases point to the latest stable release in that major line; use /schemas/index.json or /schemas/latest.json for the canonical file-based pointer." } } \ No newline at end of file diff --git a/schemas/cache/3.1/extensions/index.json b/schemas/cache/3.1/extensions/index.json index a6c86f2f..19619fd8 100644 --- a/schemas/cache/3.1/extensions/index.json +++ b/schemas/cache/3.1/extensions/index.json @@ -3,6 +3,6 @@ "title": "AdCP Extension Registry", "description": "Auto-generated registry of formal AdCP extensions. Extensions provide typed schemas for vendor-specific or domain-specific data within the ext field. Agents declare which extensions they support in their agent card.", "_generated": true, - "_generatedAt": "2026-08-11T10:05:17.902Z", + "_generatedAt": "2026-08-15T20:02:32.543Z", "extensions": {} } \ No newline at end of file diff --git a/schemas/cache/3.1/formats/canonical/sponsored_placement.json b/schemas/cache/3.1/formats/canonical/sponsored_placement.json index 8f018018..6aaddf61 100644 --- a/schemas/cache/3.1/formats/canonical/sponsored_placement.json +++ b/schemas/cache/3.1/formats/canonical/sponsored_placement.json @@ -38,21 +38,7 @@ "supported_catalog_types": { "type": "array", "items": { - "type": "string", - "enum": [ - "product", - "store", - "offering", - "hotel", - "flight", - "vehicle", - "real_estate", - "education", - "destination", - "app", - "job", - "inventory" - ] + "$ref": "../../enums/catalog-type.json" }, "description": "Catalog types this product accepts." }, diff --git a/schemas/cache/3.1/index.json b/schemas/cache/3.1/index.json index d95439da..839ac91d 100644 --- a/schemas/cache/3.1/index.json +++ b/schemas/cache/3.1/index.json @@ -3,12 +3,12 @@ "title": "AdCP Schema Registry", "version": "1.0.0", "description": "Registry of all AdCP JSON schemas for validation and discovery", - "adcp_version": "3.1.13", + "adcp_version": "3.1.14", "versioning": { - "note": "AdCP uses build-time versioning. This directory contains schemas for AdCP 3.1.13. Full semantic versions are available at /schemas/{version}/ (e.g., /schemas/2.5.0/). Major version aliases point to the latest stable release in that major line; use /schemas/index.json or /schemas/latest.json for the canonical file-based pointer." + "note": "AdCP uses build-time versioning. This directory contains schemas for AdCP 3.1.14. Full semantic versions are available at /schemas/{version}/ (e.g., /schemas/2.5.0/). Major version aliases point to the latest stable release in that major line; use /schemas/index.json or /schemas/latest.json for the canonical file-based pointer." }, - "lastUpdated": "2026-08-11", - "baseUrl": "/schemas/3.1.13", + "lastUpdated": "2026-08-15", + "baseUrl": "/schemas/3.1.14", "stability": "stable", "prerelease": false, "deprecated": false, @@ -2027,5 +2027,5 @@ "code": "// Use everit-org/json-schema or similar library" } ], - "published_version": "3.1.13" + "published_version": "3.1.14" } \ No newline at end of file diff --git a/schemas/cache/3.1/manifest.json b/schemas/cache/3.1/manifest.json index 076849b9..dc13cffe 100644 --- a/schemas/cache/3.1/manifest.json +++ b/schemas/cache/3.1/manifest.json @@ -1,7 +1,7 @@ { - "$schema": "/schemas/3.1.13/manifest.schema.json", - "adcp_version": "3.1.13", - "generated_at": "2026-08-11T10:05:18.070Z", + "$schema": "/schemas/3.1.14/manifest.schema.json", + "adcp_version": "3.1.14", + "generated_at": "2026-08-15T20:02:32.707Z", "tools": { "acquire_rights": { "protocol": "brand", diff --git a/schemas/cache/3.1/protocol/get-adcp-capabilities-response.json b/schemas/cache/3.1/protocol/get-adcp-capabilities-response.json index 1f227b6b..227a8580 100644 --- a/schemas/cache/3.1/protocol/get-adcp-capabilities-response.json +++ b/schemas/cache/3.1/protocol/get-adcp-capabilities-response.json @@ -291,18 +291,7 @@ "type": "array", "description": "Surface types this seller supports via TMP.", "items": { - "type": "string", - "enum": [ - "website", - "mobile_app", - "ctv_app", - "desktop_app", - "dooh", - "podcast", - "radio", - "streaming_audio", - "ai_assistant" - ] + "$ref": "../enums/property-type.json" } } } diff --git a/src/adcp/ADCP_VERSION b/src/adcp/ADCP_VERSION index 55f20a1a..2a399f7d 100644 --- a/src/adcp/ADCP_VERSION +++ b/src/adcp/ADCP_VERSION @@ -1 +1 @@ -3.1.13 +3.1.14 diff --git a/src/adcp/types/_generated.py b/src/adcp/types/_generated.py index 1cc1c44d..8a48f9aa 100644 --- a/src/adcp/types/_generated.py +++ b/src/adcp/types/_generated.py @@ -10,7 +10,7 @@ DO NOT EDIT MANUALLY. Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas -Generation date: 2026-08-13 14:02:28 UTC +Generation date: 2026-08-16 18:38:03 UTC """ # ruff: noqa: E501, I001 @@ -1577,7 +1577,6 @@ CanonicalFormatSponsoredPlacementRetailMediaCatalogDriven, FanoutMode, ItemProductionModel, - SupportedCatalogType, SupportedIdType, ) from adcp.types.generated_poc.formats.canonical.video_hosted import ( @@ -1938,7 +1937,6 @@ SupportedOptimizationMetric, SupportedProtocol, SupportedTarget1, - Surface, Targeting, Transport, Type9, @@ -3511,7 +3509,6 @@ "Structural", "SubjectType", "Summary", - "SupportedCatalogType", "SupportedFormat", "SupportedIdType", "SupportedIdentifierType", @@ -3525,7 +3522,6 @@ "SupportedTarget17", "SupportedVersion", "SupportedViewDuration", - "Surface", "SyncAccountsRequest", "SyncAccountsResponse", "SyncAccountsResponse1", diff --git a/src/adcp/types/generated_poc/adagents.py b/src/adcp/types/generated_poc/adagents.py index 236c04c7..eab50248 100644 --- a/src/adcp/types/generated_poc/adagents.py +++ b/src/adcp/types/generated_poc/adagents.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: adagents.json -# timestamp: 2026-08-13T14:01:34+00:00 +# timestamp: 2026-08-16T18:36:34+00:00 from __future__ import annotations @@ -1270,12 +1270,12 @@ class AdcpAgentsAuthorization2( description='Inline structure variant - contains full agent authorization data', examples=[ { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'authoritative_location': 'https://cdn.example.com/adagents/v2/adagents.json', 'last_updated': '2025-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'properties': [ { 'property_id': 'example_site', @@ -1332,7 +1332,7 @@ class AdcpAgentsAuthorization2( 'last_updated': '2025-01-10T12:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Meta Advertising Operations', 'email': 'adops@meta.com', @@ -1401,7 +1401,7 @@ class AdcpAgentsAuthorization2( 'last_updated': '2025-01-10T15:30:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': {'name': 'Tumblr Advertising'}, 'properties': [ { @@ -1429,7 +1429,7 @@ class AdcpAgentsAuthorization2( 'last_updated': '2025-01-10T16:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Example Third-Party Sales Agent', 'email': 'sales@agent.example', @@ -1486,7 +1486,7 @@ class AdcpAgentsAuthorization2( 'last_updated': '2025-01-10T17:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Premium News Publisher', 'email': 'adops@news.example.com', @@ -1544,7 +1544,7 @@ class AdcpAgentsAuthorization2( 'last_updated': '2025-01-10T18:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Polk Automotive Data', 'email': 'partnerships@polk.com', @@ -1629,12 +1629,12 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut description='Declaration of authorized agents for advertising inventory and data signals. Hosted at /.well-known/adagents.json on publisher domains (for properties) or data provider domains (for signals). Can either contain the full structure inline or reference an authoritative URL.', examples=[ { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'authoritative_location': 'https://cdn.example.com/adagents/v2/adagents.json', 'last_updated': '2025-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'properties': [ { 'property_id': 'example_site', @@ -1691,7 +1691,7 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut 'last_updated': '2025-01-10T12:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Meta Advertising Operations', 'email': 'adops@meta.com', @@ -1760,7 +1760,7 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut 'last_updated': '2025-01-10T15:30:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': {'name': 'Tumblr Advertising'}, 'properties': [ { @@ -1788,7 +1788,7 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut 'last_updated': '2025-01-10T16:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Example Third-Party Sales Agent', 'email': 'sales@agent.example', @@ -1845,7 +1845,7 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut 'last_updated': '2025-01-10T17:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Premium News Publisher', 'email': 'adops@news.example.com', @@ -1903,7 +1903,7 @@ class AdcpAgentsAuthorization(RootModel[AdcpAgentsAuthorization1 | AdcpAgentsAut 'last_updated': '2025-01-10T18:00:00Z', }, { - '$schema': '/schemas/3.1.13/adagents.json', + '$schema': '/schemas/3.1.14/adagents.json', 'contact': { 'name': 'Polk Automotive Data', 'email': 'partnerships@polk.com', diff --git a/src/adcp/types/generated_poc/brand/__init__.py b/src/adcp/types/generated_poc/brand/__init__.py index 83109e9d..5a8f7fb9 100644 --- a/src/adcp/types/generated_poc/brand/__init__.py +++ b/src/adcp/types/generated_poc/brand/__init__.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: brand.json -# timestamp: 2026-08-13T14:01:34+00:00 +# timestamp: 2026-08-16T18:36:34+00:00 from __future__ import annotations @@ -2021,23 +2021,23 @@ class BrandDiscovery( description='Brand identity and discovery file. Hosted at /.well-known/brand.json on house domains. Contains the full brand portfolio with identity, creative assets, and digital properties. Brands are identified by house + brand_id (like properties are identified by publisher + property_id). Supports variants: house portfolio (full brand data), brand agent (agent provides brand info via MCP), house redirect (pointer to house domain), or authoritative location redirect.', examples=[ { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'authoritative_location': 'https://adcontextprotocol.org/brand/abc123/brand.json', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'house': 'nikeinc.com', 'note': 'Redirect to house domain for full brand portfolio', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'agents': [ {'type': 'brand', 'url': 'https://agent.acme.com/mcp', 'id': 'acme_brand'} ], }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'house': { 'domain': 'pg.com', @@ -2273,7 +2273,7 @@ class BrandDiscovery( 'last_updated': '2026-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'house': { 'domain': 'nikeinc.com', @@ -2377,7 +2377,7 @@ class BrandDiscovery( 'last_updated': '2026-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'house': { 'domain': 'mediavine.com', @@ -2420,7 +2420,7 @@ class BrandDiscovery( 'last_updated': '2026-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'house': { 'domain': 'nikeinc.com', @@ -2444,7 +2444,7 @@ class BrandDiscovery( 'last_updated': '2026-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'house': {'domain': 'wpp.com', 'name': 'WPP plc'}, 'brand_refs': [ @@ -2463,7 +2463,7 @@ class BrandDiscovery( 'last_updated': '2026-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'id': 'converse', 'names': [{'en_US': 'Converse'}], @@ -2474,7 +2474,7 @@ class BrandDiscovery( 'last_updated': '2026-01-15T10:00:00Z', }, { - '$schema': '/schemas/3.1.13/brand.json', + '$schema': '/schemas/3.1.14/brand.json', 'version': '1.0', 'id': 'patagonia', 'names': [{'en_US': 'Patagonia'}], diff --git a/src/adcp/types/generated_poc/bundled/protocol/get_adcp_capabilities_response.py b/src/adcp/types/generated_poc/bundled/protocol/get_adcp_capabilities_response.py index 0d9a620f..36d51bea 100644 --- a/src/adcp/types/generated_poc/bundled/protocol/get_adcp_capabilities_response.py +++ b/src/adcp/types/generated_poc/bundled/protocol/get_adcp_capabilities_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: bundled/protocol/get_adcp_capabilities_response.json -# timestamp: 2026-07-29T02:07:25+00:00 +# timestamp: 2026-08-16T18:36:34+00:00 from __future__ import annotations @@ -426,6 +426,7 @@ class Surface(StrEnum): dooh = 'dooh' podcast = 'podcast' radio = 'radio' + linear_tv = 'linear_tv' streaming_audio = 'streaming_audio' ai_assistant = 'ai_assistant' @@ -1494,18 +1495,19 @@ class RequiredConnection8(RequiredConnection): class SupportedCatalogType(StrEnum): + offering = 'offering' product = 'product' + inventory = 'inventory' store = 'store' - offering = 'offering' + promotion = 'promotion' hotel = 'hotel' flight = 'flight' + job = 'job' vehicle = 'vehicle' real_estate = 'real_estate' education = 'education' destination = 'destination' app = 'app' - job = 'job' - inventory = 'inventory' class FanoutMode(StrEnum): diff --git a/src/adcp/types/generated_poc/core/registry_event.py b/src/adcp/types/generated_poc/core/registry_event.py index 000eef52..69bb9f34 100644 --- a/src/adcp/types/generated_poc/core/registry_event.py +++ b/src/adcp/types/generated_poc/core/registry_event.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: core/registry_event.json -# timestamp: 2026-06-18T11:28:05+00:00 +# timestamp: 2026-08-16T18:36:34+00:00 from __future__ import annotations @@ -11,7 +11,7 @@ from adcp.types.base import AdCPBaseModel from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, RootModel -from ..enums import collection_kind, distribution_identifier_type +from ..enums import adcp_protocol, collection_kind, distribution_identifier_type from . import agent_signing_key from . import collection as collection_1 from . import collection_selector, format_id, identifier @@ -281,13 +281,8 @@ class PublisherAdagentsPayload(AdCPBaseModel): source: str | None = None -class BadgeRole(StrEnum): - media_buy = 'media-buy' - creative = 'creative' - signals = 'signals' - governance = 'governance' - brand = 'brand' - sponsored_intelligence = 'sponsored-intelligence' +class BadgeRole(RootModel[adcp_protocol.AdcpProtocol]): + root: adcp_protocol.AdcpProtocol class StringArray(RootModel[list[str]]): diff --git a/src/adcp/types/generated_poc/formats/canonical/sponsored_placement.py b/src/adcp/types/generated_poc/formats/canonical/sponsored_placement.py index 60ea1ad3..5782848f 100644 --- a/src/adcp/types/generated_poc/formats/canonical/sponsored_placement.py +++ b/src/adcp/types/generated_poc/formats/canonical/sponsored_placement.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: formats/canonical/sponsored_placement.json -# timestamp: 2026-05-22T13:15:12+00:00 +# timestamp: 2026-08-16T18:36:34+00:00 from __future__ import annotations @@ -9,24 +9,10 @@ from pydantic import ConfigDict, Field +from ...enums import catalog_type from ._base import CanonicalFormatBase -class SupportedCatalogType(StrEnum): - product = 'product' - store = 'store' - offering = 'offering' - hotel = 'hotel' - flight = 'flight' - vehicle = 'vehicle' - real_estate = 'real_estate' - education = 'education' - destination = 'destination' - app = 'app' - job = 'job' - inventory = 'inventory' - - class FanoutMode(StrEnum): per_item = 'per_item' multi_item_in_creative = 'multi_item_in_creative' @@ -78,7 +64,8 @@ class CanonicalFormatSponsoredPlacementRetailMediaCatalogDriven(CanonicalFormatB {'asset_group_id': 'landing_page_url', 'required': False, 'asset_type': 'url'}, ] supported_catalog_types: Annotated[ - list[SupportedCatalogType] | None, Field(description='Catalog types this product accepts.') + list[catalog_type.CatalogType] | None, + Field(description='Catalog types this product accepts.'), ] = None min_items: Annotated[ int | None, Field(description='Minimum catalog item count buyer must supply.', ge=1) diff --git a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py index 6beff17b..3bd13410 100644 --- a/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +++ b/src/adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: protocol/get_adcp_capabilities_response.json -# timestamp: 2026-07-29T02:07:25+00:00 +# timestamp: 2026-08-16T18:36:34+00:00 from __future__ import annotations @@ -34,6 +34,7 @@ from ..enums import ( match_type, pricing_model, + property_type, reach_unit, right_type, right_use, @@ -200,24 +201,6 @@ class CreativeApprovalMode(StrEnum): require_human = 'require_human' -class Surface(StrEnum): - website = 'website' - mobile_app = 'mobile_app' - ctv_app = 'ctv_app' - desktop_app = 'desktop_app' - dooh = 'dooh' - podcast = 'podcast' - radio = 'radio' - streaming_audio = 'streaming_audio' - ai_assistant = 'ai_assistant' - - -class TrustedMatch(AdCPBaseModel): - surfaces: Annotated[ - list[Surface] | None, Field(description='Surface types this seller supports via TMP.') - ] = None - - class VastVersion(RootModel[str]): root: Annotated[str, Field(pattern='^[0-9]+\\.[0-9]+$')] @@ -908,6 +891,13 @@ class WholesaleFeedWebhooks(AdCPBaseModel): ] = None +class TrustedMatch(AdCPBaseModel): + surfaces: Annotated[ + list[property_type.PropertyType] | None, + Field(description='Surface types this seller supports via TMP.'), + ] = None + + class KeywordTargets(AdCPBaseModel): supported_match_types: Annotated[ list[match_type.MatchType], diff --git a/tests/conformance/signing/vector_manifest.json b/tests/conformance/signing/vector_manifest.json index 026da2f8..03192d78 100644 --- a/tests/conformance/signing/vector_manifest.json +++ b/tests/conformance/signing/vector_manifest.json @@ -1,7 +1,7 @@ { "$comment": "Completeness pin for the vendored AdCP request-signing conformance vectors. Generated by `python -m tests.conformance.signing.vectors --write`; do not hand-edit. Graded by tests/conformance/signing/test_vector_completeness.py.", - "spec_version": "3.1.13", - "source": "adcontextprotocol/adcp @ v3.1.13 -- dist/compliance/3.1.13/test-vectors/request-signing/", + "spec_version": "3.1.14", + "source": "adcontextprotocol/adcp @ v3.1.14 -- dist/compliance/3.1.14/test-vectors/request-signing/", "files": { "README.md": "74977dcb44eef69aee2b45e78e9fc111625e101d7e8646ed9f44b521aee396e8", "canonicalization.json": "83a15584bebb0ff006ffd99a4080f5a922ea56e9e590d516ee87becaaf15ad1b", diff --git a/tests/test_adcp_3_1_14_schema_backport.py b/tests/test_adcp_3_1_14_schema_backport.py new file mode 100644 index 00000000..39002e44 --- /dev/null +++ b/tests/test_adcp_3_1_14_schema_backport.py @@ -0,0 +1,29 @@ +"""Regression coverage for enum-reference fixes in AdCP 3.1.14.""" + +from adcp.types import AdcpProtocol, CatalogType, PropertyType +from adcp.types.generated_poc.core.registry_event import BadgeRole +from adcp.types.generated_poc.formats.canonical.sponsored_placement import ( + CanonicalFormatSponsoredPlacementRetailMediaCatalogDriven, +) +from adcp.types.generated_poc.protocol.get_adcp_capabilities_response import TrustedMatch + + +def test_registry_badge_role_uses_canonical_protocol_enum() -> None: + role = BadgeRole.model_validate("measurement") + + assert role.root is AdcpProtocol.measurement + assert role.model_dump(mode="json") == "measurement" + + +def test_sponsored_placement_accepts_promotion_catalog_type() -> None: + declaration = CanonicalFormatSponsoredPlacementRetailMediaCatalogDriven( + supported_catalog_types=["promotion"] + ) + + assert declaration.supported_catalog_types == [CatalogType.promotion] + + +def test_trusted_match_accepts_linear_tv_surface() -> None: + capability = TrustedMatch(surfaces=["linear_tv"]) + + assert capability.surfaces == [PropertyType.linear_tv]