diff --git a/MIGRATION_v6_to_v7.md b/MIGRATION_v6_to_v7.md index 8e09b8b77..e22ea87f8 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.14, 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 c360e1ab1..abc87df72 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 @@ -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 diff --git a/SCHEMA_DELTAS.md b/SCHEMA_DELTAS.md index 0f0db1c28..715f945de 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 d016bdc3b..fb8a21150 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 57e4efaca..7a9cab9af 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 2430e2544..1b1b22ed0 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 753198a44..916e8a1cd 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 af638f923..20efbb3b5 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 dce532473..d8580b8b9 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 0b678aca3..d461f173c 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 ac8d08b1d..d1ef07c54 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 84a7124c9..6f46f8d10 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 e684cfa13..b23653e16 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 ac288a621..bd8085b96 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 b5832758f..3fa208288 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 984f2cc08..c7fae4426 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 ff4f58494..9edb443f6 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 0764ee06a..43a4f79e2 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 5dea2958b..5fceacf35 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 fc6f35e6d..73f24abe3 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 bbdd1a009..aeec7e94c 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 929741bc0..4dfd66e26 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 84aa1460c..0925579a1 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 8f12e79e0..1b6d69d50 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 7013b623e..515c5d5b4 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 f21ced248..5d0375322 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 0ddcc93cf..0fde044c5 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 cff287cb9..9ae9da3da 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 a9219e73d..7d4bbe114 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 a7f390fd4..4ab814dd7 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 fc1dcfcbf..5d1126aa9 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 1d9f88c31..34bef723d 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 bf6880742..b7b054bfe 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 c8fc12802..ee06eea0f 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 c7fb557c1..add0a9fa8 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 fef7d04b0..4c5403e22 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 ba0326326..69b08710a 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 2e11fde56..7ac9379f5 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 6cdfdd0a5..f466497a7 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 08dd531ea..87f1ad364 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 59af6b5f4..4662a58ec 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 5ab38565f..f86d56351 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 ec408854f..cb9697a7b 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 6967ee753..0e8ecdbf4 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 b1ac5990f..0498f45cb 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 7610ac763..fa41b3874 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 00164c86e..ca1a854ac 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 df339e09a..9ca486ae1 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 98561a2fd..b462fcedd 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 2ba5d5dcb..01b0d2e4e 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 1c1be5760..187658de5 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 01089c322..9a25264dc 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 b9ed4205b..c0037f831 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 8695b2967..7c5da3325 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 f2722dc1b..80a1aa9dc 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 e5631dd3b..e8115bce9 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 012b5afdb..18aaf7f07 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 4d370b15e..300a03433 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 b45e6e37c..948504b69 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 1d23ece62..078c9f4ee 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 619f048a4..e86b148bc 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 409c28241..4fc3a0891 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 095f2a4c6..af5e5978d 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 8a81ac16c..82cdcafe1 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 1bb35c9dd..a4c43d64b 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 e58001084..750e8517e 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 7fb1b47ba..cffe2922a 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 b0994f29e..8725e4cfc 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 90de7d1b0..3e82048d7 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 a0aa0638c..073a14ca6 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 1c2aa0266..f2d8edd63 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 fa0b11be2..0c2bd561e 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 2d608b25e..9fed74eb1 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 053a0bdb5..be2dc8500 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 1fd7c530b..e5da4ab79 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 4307d83eb..60ba12abb 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 a36d67f89..b606d0cdb 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 d53602d43..ad3766545 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 6cac12bb7..c76d607a4 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 20f10540c..ff223298c 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 b01e02f8d..794605dd6 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 55dd865d5..66a58e4de 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 20a1a6421..32b829980 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 bcf7ba2ea..c0c63756e 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 4ca4c38bb..e0204bb72 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 4424f26c9..d083e631e 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 de7cbd34a..883422f3f 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 bdb756563..475c09e75 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 650f45917..555a11bff 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 5595bb3ab..810682538 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 baa2d389c..40dfdc4c5 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 4b6758130..5991ea799 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 4cf9d6d6a..7cf9fd9ca 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 8e9bd5b8d..0e8c64334 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 3de84f7fb..4c4874619 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 a885569e4..42572647e 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 a6c86f2fa..19619fd8b 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 8f0180183..6aaddf613 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 d95439da8..839ac91d7 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 076849b98..dc13cffe4 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 1f227b6b6..227a8580b 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 55f20a1a9..2a399f7d1 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 1cc1c44d5..8a48f9aa4 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 236c04c7b..eab502482 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 83109e9d9..5a8f7fb9a 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 0d9a620f8..36d51beab 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 000eef52b..69bb9f349 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 60ea1ad37..5782848f1 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 6beff17ba..3bd13410a 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 026da2f89..03192d78d 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 000000000..39002e44a --- /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]