Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
658 changes: 329 additions & 329 deletions schemas/cache/.hashes.json

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions schemas/cache/adagents.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
"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/latest/adagents.json",
"$schema": "/schemas/3.0.0-rc.1/adagents.json",
"authoritative_location": "https://cdn.example.com/adagents/v2/adagents.json",
"last_updated": "2025-01-15T10:00:00Z"
},
{
"$schema": "/schemas/latest/adagents.json",
"$schema": "/schemas/3.0.0-rc.1/adagents.json",
"authorized_agents": [
{
"authorization_type": "property_tags",
Expand Down Expand Up @@ -41,7 +41,7 @@
}
},
{
"$schema": "/schemas/latest/adagents.json",
"$schema": "/schemas/3.0.0-rc.1/adagents.json",
"authorized_agents": [
{
"authorization_type": "property_tags",
Expand Down Expand Up @@ -150,7 +150,7 @@
}
},
{
"$schema": "/schemas/latest/adagents.json",
"$schema": "/schemas/3.0.0-rc.1/adagents.json",
"authorized_agents": [
{
"authorization_type": "property_tags",
Expand Down Expand Up @@ -189,7 +189,7 @@
}
},
{
"$schema": "/schemas/latest/adagents.json",
"$schema": "/schemas/3.0.0-rc.1/adagents.json",
"authorized_agents": [
{
"authorization_type": "publisher_properties",
Expand Down Expand Up @@ -235,7 +235,7 @@
"last_updated": "2025-01-10T17:00:00Z"
},
{
"$schema": "/schemas/latest/adagents.json",
"$schema": "/schemas/3.0.0-rc.1/adagents.json",
"authorized_agents": [
{
"authorization_type": "property_tags",
Expand Down Expand Up @@ -310,7 +310,7 @@
}
},
{
"$schema": "/schemas/latest/adagents.json",
"$schema": "/schemas/3.0.0-rc.1/adagents.json",
"authorized_agents": [
{
"authorization_type": "signal_tags",
Expand Down
10 changes: 5 additions & 5 deletions schemas/cache/brand.json
Original file line number Diff line number Diff line change
Expand Up @@ -668,24 +668,24 @@
"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/latest/brand.json",
"$schema": "/schemas/3.0.0-rc.1/brand.json",
"authoritative_location": "https://adcontextprotocol.org/brand/abc123/brand.json"
},
{
"$schema": "/schemas/latest/brand.json",
"$schema": "/schemas/3.0.0-rc.1/brand.json",
"house": "nikeinc.com",
"note": "Redirect to house domain for full brand portfolio"
},
{
"$schema": "/schemas/latest/brand.json",
"$schema": "/schemas/3.0.0-rc.1/brand.json",
"brand_agent": {
"id": "acme_brand_agent",
"url": "https://agent.acme.com/mcp"
},
"version": "1.0"
},
{
"$schema": "/schemas/latest/brand.json",
"$schema": "/schemas/3.0.0-rc.1/brand.json",
"brands": [
{
"colors": {
Expand Down Expand Up @@ -799,7 +799,7 @@
"version": "1.0"
},
{
"$schema": "/schemas/latest/brand.json",
"$schema": "/schemas/3.0.0-rc.1/brand.json",
"authorized_operators": [
{
"brands": [
Expand Down
2 changes: 1 addition & 1 deletion schemas/cache/core/media-buy.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"type": "string"
},
"buyer_ref": {
"description": "Buyer's reference identifier for this media buy",
"description": "Buyer's reference identifier for this media buy. Sellers SHOULD deduplicate requests with the same buyer_ref and account, returning the existing media buy rather than creating a duplicate.",
"type": "string"
},
"created_at": {
Expand Down
2 changes: 1 addition & 1 deletion schemas/cache/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"type": "number"
},
"buyer_ref": {
"description": "Buyer's reference identifier for this package",
"description": "Buyer's reference identifier for this package. Sellers SHOULD deduplicate requests with the same buyer_ref within a media buy, returning the existing package rather than creating a duplicate.",
"type": "string"
},
"catalogs": {
Expand Down
2 changes: 1 addition & 1 deletion schemas/cache/core/provenance.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"type": "string"
},
"version": {
"description": "Version identifier for the AI tool",
"description": "Version identifier for the AI tool or model (e.g., '25.1', '0125', '2.1'). For generative models, use the model version rather than the API version.",
"type": "string"
}
},
Expand Down
8 changes: 4 additions & 4 deletions schemas/cache/creative/asset-types/index.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"adcp_version": "latest",
"adcp_version": "3.0.0-rc.1",
"architecture": {
"format_aware_validation": {
"description": "Creative manifests are validated in the context of their format specification",
Expand Down Expand Up @@ -94,9 +94,9 @@
"typical_use": "DCO (Dynamic Creative Optimization), real-time personalization, server-side rendering"
}
},
"baseUrl": "/schemas/latest",
"baseUrl": "/schemas/3.0.0-rc.1",
"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).",
"lastUpdated": "2026-02-28",
"lastUpdated": "2026-03-01",
"title": "AdCP Asset Type Registry",
"usage_notes": {
"creative_manifests": "Creative manifests provide actual asset content, keyed by asset_id from the format. Asset type is determined by the format specification, not declared in the payload.",
Expand All @@ -105,6 +105,6 @@
},
"version": "1.0.0",
"versioning": {
"note": "AdCP uses build-time versioning. This directory contains schemas for AdCP latest. Full semantic versions are available at /schemas/{version}/ (e.g., /schemas/2.5.0/). Major version aliases point to the latest release: /schemas/vlatest/ \u2192 /schemas/latest/."
"note": "AdCP uses build-time versioning. This directory contains schemas for AdCP 3.0.0-rc.1. Full semantic versions are available at /schemas/{version}/ (e.g., /schemas/2.5.0/). Major version aliases point to the latest release: /schemas/v3/ \u2192 /schemas/3.0.0-rc.1/."
}
}
2 changes: 1 addition & 1 deletion schemas/cache/extensions/index.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"_generated": true,
"_generatedAt": "2026-02-28T16:57:35.611Z",
"_generatedAt": "2026-03-01T12:28:36.553Z",
"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.",
"extensions": {},
"title": "AdCP Extension Registry"
Expand Down
2 changes: 1 addition & 1 deletion schemas/cache/media-buy/create-media-buy-request.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@
"type": "string"
},
"buyer_ref": {
"description": "Buyer's reference identifier for this media buy. Also serves as an idempotency key: sellers SHOULD deduplicate requests with the same buyer_ref and account, returning the existing media buy rather than creating a duplicate.",
"description": "Buyer's reference identifier for this media buy. Sellers SHOULD deduplicate requests with the same buyer_ref and account, returning the existing media buy rather than creating a duplicate.",
"type": "string"
},
"context": {
Expand Down
5 changes: 1 addition & 4 deletions schemas/cache/media-buy/get-media-buys-request.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"properties": {
"account": {
"$ref": "../core/account-ref.json",
"description": "Account to retrieve media buys for."
"description": "Account to retrieve media buys for. When omitted, returns data across all accessible accounts."
},
"buyer_refs": {
"description": "Array of buyer reference IDs to retrieve",
Expand Down Expand Up @@ -54,9 +54,6 @@
]
}
},
"required": [
"account"
],
"title": "Get Media Buys Request",
"type": "object"
}
2 changes: 1 addition & 1 deletion schemas/cache/media-buy/get-products-request.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"type": "string"
},
"buying_mode": {
"description": "Declares buyer intent for this request. 'brief': publisher curates product recommendations from the provided brief. 'wholesale': buyer requests raw inventory to apply their own audiences \u2014 brief must not be provided, and proposals are omitted. 'refine': iterate on products and proposals from a previous get_products response using the refine array of change requests.",
"description": "Declares buyer intent for this request. 'brief': publisher curates product recommendations from the provided brief. 'wholesale': buyer requests raw inventory to apply their own audiences \u2014 brief must not be provided, and proposals are omitted. 'refine': iterate on products and proposals from a previous get_products response using the refine array of change requests. v3 clients MUST include buying_mode. Sellers receiving requests from pre-v3 clients without buying_mode SHOULD default to 'brief'.",
"enum": [
"brief",
"wholesale",
Expand Down
2 changes: 1 addition & 1 deletion schemas/cache/media-buy/package-request.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"type": "number"
},
"buyer_ref": {
"description": "Buyer's reference identifier for this package",
"description": "Buyer's reference identifier for this package. Sellers SHOULD deduplicate requests with the same buyer_ref within a media buy, returning the existing package rather than creating a duplicate.",
"type": "string"
},
"catalogs": {
Expand Down
22 changes: 17 additions & 5 deletions scripts/generate_ergonomic_coercion.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
REQUEST_TYPES_TO_ANALYZE = [
"ListCreativeFormatsRequest",
"ListCreativesRequest",
"GetProductsRequest",
"PackageRequest",
"CreateMediaBuyRequest",
]
Expand All @@ -48,6 +47,9 @@
# Nested types that also need coercion
NESTED_TYPES_TO_ANALYZE = [
("Sort", "media_buy.list_creatives_request"),
("GetProductsRequest1", "media_buy.get_products_request"),
("GetProductsRequest2", "media_buy.get_products_request"),
("GetProductsRequest3", "media_buy.get_products_request"),
("PackageUpdate1", "media_buy.package_update"),
("PackageUpdate2", "media_buy.package_update"),
]
Expand Down Expand Up @@ -215,7 +217,11 @@ def generate_code() -> str:
from adcp.types.generated_poc.media_buy.get_media_buy_delivery_response import (
GetMediaBuyDeliveryResponse,
)
from adcp.types.generated_poc.media_buy.get_products_request import GetProductsRequest
from adcp.types.generated_poc.media_buy.get_products_request import (
GetProductsRequest1,
GetProductsRequest2,
GetProductsRequest3,
)

# Response types
from adcp.types.generated_poc.media_buy.get_products_response import GetProductsResponse
Expand All @@ -234,7 +240,6 @@ def generate_code() -> str:
request_classes = {
"ListCreativeFormatsRequest": ListCreativeFormatsRequest,
"ListCreativesRequest": ListCreativesRequest,
"GetProductsRequest": GetProductsRequest,
"PackageRequest": PackageRequest,
"CreateMediaBuyRequest": CreateMediaBuyRequest,
}
Expand All @@ -249,6 +254,9 @@ def generate_code() -> str:

nested_classes = {
"Sort": Sort,
"GetProductsRequest1": GetProductsRequest1,
"GetProductsRequest2": GetProductsRequest2,
"GetProductsRequest3": GetProductsRequest3,
"PackageUpdate1": PackageUpdate1,
"PackageUpdate2": PackageUpdate2,
}
Expand Down Expand Up @@ -356,7 +364,9 @@ def generate_code() -> str:
lines.append(")")
lines.append("from adcp.types.generated_poc.media_buy.get_products_request import (")
lines.append(" FieldModel,")
lines.append(" GetProductsRequest,")
lines.append(" GetProductsRequest1,")
lines.append(" GetProductsRequest2,")
lines.append(" GetProductsRequest3,")
lines.append(")")
lines.append("from adcp.types.generated_poc.media_buy.list_creative_formats_request import (")
lines.append(" ListCreativeFormatsRequest,")
Expand Down Expand Up @@ -409,7 +419,9 @@ def generate_code() -> str:
"ListCreativeFormatsRequest",
"ListCreativesRequest",
"Sort",
"GetProductsRequest",
"GetProductsRequest1",
"GetProductsRequest2",
"GetProductsRequest3",
"PackageRequest",
"CreateMediaBuyRequest",
"PackageUpdate1",
Expand Down
2 changes: 1 addition & 1 deletion src/adcp/ADCP_VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
latest
3.0.0-rc.1
78 changes: 78 additions & 0 deletions src/adcp/types/_ergonomic.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@
from adcp.types.generated_poc.media_buy.create_media_buy_request import (
CreateMediaBuyRequest,
)
from adcp.types.generated_poc.media_buy.get_products_request import (
FieldModel,
GetProductsRequest1,
GetProductsRequest2,
GetProductsRequest3,
)
from adcp.types.generated_poc.media_buy.list_creative_formats_request import (
ListCreativeFormatsRequest,
)
Expand Down Expand Up @@ -182,6 +188,78 @@ def _apply_coercion() -> None:
)
Sort.model_rebuild(force=True)

# Apply coercion to GetProductsRequest1
# - context: ContextObject | dict | None
# - ext: ExtensionObject | dict | None
# - fields: list[FieldModel | str] | None
_patch_field_annotation(
GetProductsRequest1,
"context",
Annotated[ContextObject | None, BeforeValidator(coerce_to_model(ContextObject))],
)
_patch_field_annotation(
GetProductsRequest1,
"ext",
Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
)
_patch_field_annotation(
GetProductsRequest1,
"fields",
Annotated[
list[FieldModel] | None,
BeforeValidator(coerce_to_enum_list(FieldModel)),
],
)
GetProductsRequest1.model_rebuild(force=True)

# Apply coercion to GetProductsRequest2
# - context: ContextObject | dict | None
# - ext: ExtensionObject | dict | None
# - fields: list[FieldModel | str] | None
_patch_field_annotation(
GetProductsRequest2,
"context",
Annotated[ContextObject | None, BeforeValidator(coerce_to_model(ContextObject))],
)
_patch_field_annotation(
GetProductsRequest2,
"ext",
Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
)
_patch_field_annotation(
GetProductsRequest2,
"fields",
Annotated[
list[FieldModel] | None,
BeforeValidator(coerce_to_enum_list(FieldModel)),
],
)
GetProductsRequest2.model_rebuild(force=True)

# Apply coercion to GetProductsRequest3
# - context: ContextObject | dict | None
# - ext: ExtensionObject | dict | None
# - fields: list[FieldModel | str] | None
_patch_field_annotation(
GetProductsRequest3,
"context",
Annotated[ContextObject | None, BeforeValidator(coerce_to_model(ContextObject))],
)
_patch_field_annotation(
GetProductsRequest3,
"ext",
Annotated[ExtensionObject | None, BeforeValidator(coerce_to_model(ExtensionObject))],
)
_patch_field_annotation(
GetProductsRequest3,
"fields",
Annotated[
list[FieldModel] | None,
BeforeValidator(coerce_to_enum_list(FieldModel)),
],
)
GetProductsRequest3.model_rebuild(force=True)

# Apply coercion to PackageRequest
# - creative_assignments: list[CreativeAssignment] (accepts subclass instances)
# - creatives: list[CreativeAsset] (accepts subclass instances)
Expand Down
2 changes: 1 addition & 1 deletion src/adcp/types/_generated.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
DO NOT EDIT MANUALLY.

Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas
Generation date: 2026-02-28 18:37:35 UTC
Generation date: 2026-03-01 12:48:30 UTC
"""

# ruff: noqa: E501, I001
Expand Down
Loading