adcp 2.18.0__py3-none-any.whl → 3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- adcp/ADCP_VERSION +1 -1
- adcp/__init__.py +6 -14
- adcp/__main__.py +94 -51
- adcp/adagents.py +91 -19
- adcp/client.py +865 -0
- adcp/protocols/a2a.py +84 -0
- adcp/protocols/base.py +101 -0
- adcp/protocols/mcp.py +87 -1
- adcp/server/__init__.py +49 -0
- adcp/server/base.py +368 -0
- adcp/server/content_standards.py +561 -0
- adcp/server/governance.py +491 -0
- adcp/server/mcp_tools.py +471 -0
- adcp/server/proposal.py +334 -0
- adcp/server/sponsored_intelligence.py +444 -0
- adcp/types/__init__.py +111 -23
- adcp/types/_ergonomic.py +35 -18
- adcp/types/_generated.py +419 -44
- adcp/types/aliases.py +13 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +103 -6
- adcp/types/generated_poc/content_standards/__init__.py +3 -0
- adcp/types/generated_poc/content_standards/artifact.py +208 -0
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
- adcp/types/generated_poc/content_standards/content_standards.py +66 -0
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
- adcp/types/generated_poc/core/activation_key.py +1 -1
- adcp/types/generated_poc/core/assets/audio_asset.py +1 -1
- adcp/types/generated_poc/core/assets/css_asset.py +1 -1
- adcp/types/generated_poc/core/assets/daast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/html_asset.py +1 -1
- adcp/types/generated_poc/core/assets/image_asset.py +1 -1
- adcp/types/generated_poc/core/assets/javascript_asset.py +1 -1
- adcp/types/generated_poc/core/assets/text_asset.py +1 -1
- adcp/types/generated_poc/core/assets/url_asset.py +1 -1
- adcp/types/generated_poc/core/assets/vast_asset.py +1 -1
- adcp/types/generated_poc/core/assets/video_asset.py +1 -1
- adcp/types/generated_poc/core/assets/webhook_asset.py +1 -1
- adcp/types/generated_poc/core/async_response_data.py +1 -1
- adcp/types/generated_poc/core/brand_manifest.py +68 -5
- adcp/types/generated_poc/core/brand_manifest_ref.py +1 -1
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +8 -7
- adcp/types/generated_poc/core/creative_assignment.py +1 -1
- adcp/types/generated_poc/core/creative_filters.py +4 -14
- adcp/types/generated_poc/core/creative_manifest.py +1 -1
- adcp/types/generated_poc/core/creative_policy.py +1 -1
- adcp/types/generated_poc/core/delivery_metrics.py +1 -1
- adcp/types/generated_poc/core/deployment.py +1 -1
- adcp/types/generated_poc/core/destination.py +1 -1
- adcp/types/generated_poc/core/error.py +1 -1
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +6 -5
- adcp/types/generated_poc/core/format_id.py +1 -1
- adcp/types/generated_poc/core/frequency_cap.py +1 -1
- adcp/types/generated_poc/core/identifier.py +27 -0
- adcp/types/generated_poc/core/mcp_webhook_payload.py +1 -1
- adcp/types/generated_poc/core/measurement.py +1 -1
- adcp/types/generated_poc/core/media_buy.py +1 -1
- adcp/types/generated_poc/core/media_buy_features.py +29 -0
- adcp/types/generated_poc/core/offering.py +80 -0
- adcp/types/generated_poc/core/package.py +1 -1
- adcp/types/generated_poc/core/performance_feedback.py +1 -1
- adcp/types/generated_poc/core/placement.py +1 -1
- adcp/types/generated_poc/core/pricing_option.py +8 -14
- adcp/types/generated_poc/core/product.py +1 -1
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +72 -7
- adcp/types/generated_poc/core/promoted_offerings.py +12 -21
- adcp/types/generated_poc/core/promoted_products.py +1 -1
- adcp/types/generated_poc/core/property.py +1 -1
- adcp/types/generated_poc/core/property_id.py +1 -1
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +1 -1
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +1 -1
- adcp/types/generated_poc/core/publisher_property_selector.py +1 -1
- adcp/types/generated_poc/core/push_notification_config.py +1 -1
- adcp/types/generated_poc/core/reporting_capabilities.py +1 -1
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +1 -1
- adcp/types/generated_poc/core/signal_filters.py +1 -1
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +1 -1
- adcp/types/generated_poc/core/targeting.py +55 -14
- adcp/types/generated_poc/creative/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/creative/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_request.py +1 -1
- adcp/types/generated_poc/creative/preview_creative_response.py +3 -2
- adcp/types/generated_poc/creative/preview_render.py +1 -1
- adcp/types/generated_poc/enums/adcp_domain.py +3 -1
- adcp/types/generated_poc/enums/asset_content_type.py +1 -1
- adcp/types/generated_poc/enums/auth_scheme.py +1 -1
- adcp/types/generated_poc/enums/available_metric.py +1 -1
- adcp/types/generated_poc/enums/channels.py +18 -8
- adcp/types/generated_poc/enums/co_branding_requirement.py +1 -1
- adcp/types/generated_poc/enums/creative_action.py +1 -1
- adcp/types/generated_poc/enums/creative_agent_capability.py +1 -1
- adcp/types/generated_poc/enums/creative_sort_field.py +1 -1
- adcp/types/generated_poc/enums/creative_status.py +2 -1
- adcp/types/generated_poc/enums/daast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/daast_version.py +1 -1
- adcp/types/generated_poc/enums/delivery_type.py +1 -1
- adcp/types/generated_poc/enums/dimension_unit.py +1 -1
- adcp/types/generated_poc/enums/feed_format.py +1 -1
- adcp/types/generated_poc/enums/feedback_source.py +1 -1
- adcp/types/generated_poc/enums/format_category.py +1 -1
- adcp/types/generated_poc/enums/format_id_parameter.py +1 -1
- adcp/types/generated_poc/enums/frequency_cap_scope.py +1 -1
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +1 -1
- adcp/types/generated_poc/enums/http_method.py +1 -1
- adcp/types/generated_poc/enums/identifier_types.py +1 -1
- adcp/types/generated_poc/enums/javascript_module_type.py +1 -1
- adcp/types/generated_poc/enums/landing_page_requirement.py +1 -1
- adcp/types/generated_poc/enums/markdown_flavor.py +1 -1
- adcp/types/generated_poc/enums/media_buy_status.py +1 -1
- adcp/types/generated_poc/enums/metric_type.py +1 -1
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +1 -1
- adcp/types/generated_poc/enums/pacing.py +1 -1
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +1 -1
- adcp/types/generated_poc/enums/pricing_model.py +1 -1
- adcp/types/generated_poc/enums/property_type.py +2 -1
- adcp/types/generated_poc/enums/publisher_identifier_types.py +1 -1
- adcp/types/generated_poc/enums/reporting_frequency.py +1 -1
- adcp/types/generated_poc/enums/signal_catalog_type.py +1 -1
- adcp/types/generated_poc/enums/sort_direction.py +1 -1
- adcp/types/generated_poc/enums/task_status.py +1 -1
- adcp/types/generated_poc/enums/task_type.py +7 -1
- adcp/types/generated_poc/enums/update_frequency.py +1 -1
- adcp/types/generated_poc/enums/url_asset_type.py +1 -1
- adcp/types/generated_poc/enums/validation_mode.py +1 -1
- adcp/types/generated_poc/enums/vast_tracking_event.py +1 -1
- adcp/types/generated_poc/enums/vast_version.py +1 -1
- adcp/types/generated_poc/enums/webhook_response_type.py +1 -1
- adcp/types/generated_poc/enums/webhook_security_method.py +1 -1
- adcp/types/generated_poc/extensions/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +58 -0
- adcp/types/generated_poc/media_buy/build_creative_request.py +1 -1
- adcp/types/generated_poc/media_buy/build_creative_response.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +54 -26
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +1 -1
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/get_products_request.py +18 -3
- adcp/types/generated_poc/media_buy/get_products_response.py +14 -2
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +1 -1
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +1 -1
- adcp/types/generated_poc/media_buy/list_creatives_request.py +2 -2
- adcp/types/generated_poc/media_buy/list_creatives_response.py +7 -10
- adcp/types/generated_poc/media_buy/package_request.py +15 -6
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +1 -1
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +20 -108
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +1 -1
- adcp/types/generated_poc/pricing_options/cpc_option.py +35 -10
- adcp/types/generated_poc/pricing_options/cpcv_option.py +35 -10
- adcp/types/generated_poc/pricing_options/{cpm_auction_option.py → cpm_option.py} +23 -19
- adcp/types/generated_poc/pricing_options/cpp_option.py +39 -16
- adcp/types/generated_poc/pricing_options/cpv_option.py +37 -18
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +45 -39
- adcp/types/generated_poc/pricing_options/{vcpm_auction_option.py → vcpm_option.py} +23 -14
- adcp/types/generated_poc/property/__init__.py +3 -0
- adcp/types/generated_poc/property/base_property_source.py +86 -0
- adcp/types/generated_poc/property/create_property_list_request.py +43 -0
- adcp/types/generated_poc/property/create_property_list_response.py +27 -0
- adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
- adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
- adcp/types/generated_poc/property/feature_requirement.py +42 -0
- adcp/types/generated_poc/property/get_property_list_request.py +34 -0
- adcp/types/generated_poc/property/get_property_list_response.py +61 -0
- adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
- adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
- adcp/types/generated_poc/property/property_error.py +33 -0
- adcp/types/generated_poc/property/property_feature.py +22 -0
- adcp/types/generated_poc/property/property_feature_definition.py +80 -0
- adcp/types/generated_poc/property/property_list.py +62 -0
- adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
- adcp/types/generated_poc/property/property_list_filters.py +47 -0
- adcp/types/generated_poc/property/update_property_list_request.py +46 -0
- adcp/types/generated_poc/property/update_property_list_response.py +21 -0
- adcp/types/generated_poc/protocol/__init__.py +3 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
- adcp/types/generated_poc/protocols/adcp_extension.py +18 -5
- adcp/types/generated_poc/signals/activate_signal_request.py +1 -1
- adcp/types/generated_poc/signals/activate_signal_response.py +1 -1
- adcp/types/generated_poc/signals/get_signals_request.py +1 -1
- adcp/types/generated_poc/signals/get_signals_response.py +1 -1
- adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
- adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
- adcp/utils/format_assets.py +5 -5
- adcp/utils/preview_cache.py +2 -2
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
- adcp-3.0.0.dist-info/RECORD +264 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
- adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/validate_content_delivery_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AwareDatetime, Field
|
|
11
|
+
|
|
12
|
+
from ..core import context as context_1
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from . import artifact as artifact_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class BrandContext(AdCPBaseModel):
|
|
18
|
+
brand_id: Annotated[str | None, Field(description='Brand identifier')] = None
|
|
19
|
+
sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Record(AdCPBaseModel):
|
|
23
|
+
artifact: Annotated[artifact_1.Artifact, Field(description='Artifact where ad was delivered')]
|
|
24
|
+
brand_context: Annotated[
|
|
25
|
+
BrandContext | None,
|
|
26
|
+
Field(
|
|
27
|
+
description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.'
|
|
28
|
+
),
|
|
29
|
+
] = None
|
|
30
|
+
channel: Annotated[
|
|
31
|
+
str | None, Field(description='Channel type (e.g., display, video, audio, social)')
|
|
32
|
+
] = None
|
|
33
|
+
country: Annotated[
|
|
34
|
+
str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred')
|
|
35
|
+
] = None
|
|
36
|
+
media_buy_id: Annotated[
|
|
37
|
+
str | None,
|
|
38
|
+
Field(description='Media buy this record belongs to (when batching across multiple buys)'),
|
|
39
|
+
] = None
|
|
40
|
+
record_id: Annotated[str, Field(description='Unique identifier for this delivery record')]
|
|
41
|
+
timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = (
|
|
42
|
+
None
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ValidateContentDeliveryRequest(AdCPBaseModel):
|
|
47
|
+
context: context_1.ContextObject | None = None
|
|
48
|
+
ext: ext_1.ExtensionObject | None = None
|
|
49
|
+
feature_ids: Annotated[
|
|
50
|
+
list[str] | None, Field(description='Specific features to evaluate (defaults to all)')
|
|
51
|
+
] = None
|
|
52
|
+
include_passed: Annotated[
|
|
53
|
+
bool | None, Field(description='Include passed records in results')
|
|
54
|
+
] = True
|
|
55
|
+
records: Annotated[
|
|
56
|
+
list[Record],
|
|
57
|
+
Field(description='Delivery records to validate (max 10,000)', max_length=10000),
|
|
58
|
+
]
|
|
59
|
+
standards_id: Annotated[str, Field(description='Standards configuration to validate against')]
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: content_standards/validate_content_delivery_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import Field, RootModel
|
|
12
|
+
|
|
13
|
+
from ..core import context as context_1
|
|
14
|
+
from ..core import error
|
|
15
|
+
from ..core import ext as ext_1
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Status(Enum):
|
|
19
|
+
passed = 'passed'
|
|
20
|
+
failed = 'failed'
|
|
21
|
+
warning = 'warning'
|
|
22
|
+
unevaluated = 'unevaluated'
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Feature(AdCPBaseModel):
|
|
26
|
+
feature_id: str
|
|
27
|
+
message: str | None = None
|
|
28
|
+
rule_id: Annotated[
|
|
29
|
+
str | None,
|
|
30
|
+
Field(
|
|
31
|
+
description='Which rule triggered this result (e.g., GARM category, Scope3 standard)'
|
|
32
|
+
),
|
|
33
|
+
] = None
|
|
34
|
+
status: Status
|
|
35
|
+
value: Any | None = None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class Verdict(Enum):
|
|
39
|
+
pass_ = 'pass'
|
|
40
|
+
fail = 'fail'
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class Result(AdCPBaseModel):
|
|
44
|
+
features: Annotated[
|
|
45
|
+
list[Feature] | None, Field(description='Optional feature-level breakdown')
|
|
46
|
+
] = None
|
|
47
|
+
record_id: Annotated[str, Field(description='Which delivery record was evaluated')]
|
|
48
|
+
verdict: Annotated[Verdict, Field(description='Overall pass/fail verdict for this record')]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class Summary(AdCPBaseModel):
|
|
52
|
+
failed_records: int
|
|
53
|
+
passed_records: int
|
|
54
|
+
total_records: int
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class ValidateContentDeliveryResponse1(AdCPBaseModel):
|
|
58
|
+
context: context_1.ContextObject | None = None
|
|
59
|
+
errors: Annotated[
|
|
60
|
+
Any | None, Field(description='Field must not be present in success response')
|
|
61
|
+
] = None
|
|
62
|
+
ext: ext_1.ExtensionObject | None = None
|
|
63
|
+
results: Annotated[list[Result], Field(description='Per-record evaluation results')]
|
|
64
|
+
summary: Annotated[Summary, Field(description='Summary counts across all records')]
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class ValidateContentDeliveryResponse2(AdCPBaseModel):
|
|
68
|
+
context: context_1.ContextObject | None = None
|
|
69
|
+
errors: list[error.Error]
|
|
70
|
+
ext: ext_1.ExtensionObject | None = None
|
|
71
|
+
summary: Annotated[
|
|
72
|
+
Any | None, Field(description='Field must not be present in error response')
|
|
73
|
+
] = None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class ValidateContentDeliveryResponse(
|
|
77
|
+
RootModel[ValidateContentDeliveryResponse1 | ValidateContentDeliveryResponse2]
|
|
78
|
+
):
|
|
79
|
+
root: Annotated[
|
|
80
|
+
ValidateContentDeliveryResponse1 | ValidateContentDeliveryResponse2,
|
|
81
|
+
Field(
|
|
82
|
+
description='Response payload with per-record verdicts and optional feature breakdown',
|
|
83
|
+
title='Validate Content Delivery Response',
|
|
84
|
+
),
|
|
85
|
+
]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/brand_manifest.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
from enum import Enum
|
|
8
|
-
from typing import Annotated, Any
|
|
8
|
+
from typing import Annotated, Any, Literal
|
|
9
9
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
11
|
from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field
|
|
@@ -47,6 +47,18 @@ class Asset(AdCPBaseModel):
|
|
|
47
47
|
width: Annotated[int | None, Field(description='Image/video width in pixels')] = None
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
class Avatar(AdCPBaseModel):
|
|
51
|
+
avatar_id: Annotated[str | None, Field(description='Provider-specific avatar identifier')] = (
|
|
52
|
+
None
|
|
53
|
+
)
|
|
54
|
+
provider: Annotated[
|
|
55
|
+
str | None, Field(description="Avatar provider (e.g., 'd-id', 'heygen', 'synthesia')")
|
|
56
|
+
] = None
|
|
57
|
+
settings: Annotated[
|
|
58
|
+
dict[str, Any] | None, Field(description='Provider-specific avatar settings')
|
|
59
|
+
] = None
|
|
60
|
+
|
|
61
|
+
|
|
50
62
|
class Colors(AdCPBaseModel):
|
|
51
63
|
accent: Annotated[
|
|
52
64
|
str | None, Field(description='Accent color (hex format)', pattern='^#[0-9A-Fa-f]{6}$')
|
|
@@ -115,9 +127,26 @@ class Metadata(AdCPBaseModel):
|
|
|
115
127
|
version: Annotated[str | None, Field(description='Brand card version number')] = None
|
|
116
128
|
|
|
117
129
|
|
|
130
|
+
class AgenticCheckout(AdCPBaseModel):
|
|
131
|
+
endpoint: Annotated[
|
|
132
|
+
AnyUrl,
|
|
133
|
+
Field(
|
|
134
|
+
description='Base URL for checkout session API (e.g., https://merchant.com/api/checkout_sessions)'
|
|
135
|
+
),
|
|
136
|
+
]
|
|
137
|
+
spec: Annotated[
|
|
138
|
+
Literal['openai_agentic_checkout_v1'],
|
|
139
|
+
Field(description='Checkout API specification implemented by the endpoint'),
|
|
140
|
+
]
|
|
141
|
+
supported_payment_providers: Annotated[
|
|
142
|
+
list[str] | None, Field(description='Payment providers supported by this checkout endpoint')
|
|
143
|
+
] = None
|
|
144
|
+
|
|
145
|
+
|
|
118
146
|
class FeedFormat(Enum):
|
|
119
147
|
google_merchant_center = 'google_merchant_center'
|
|
120
148
|
facebook_catalog = 'facebook_catalog'
|
|
149
|
+
openai_product_feed = 'openai_product_feed'
|
|
121
150
|
custom = 'custom'
|
|
122
151
|
|
|
123
152
|
|
|
@@ -132,13 +161,22 @@ class ProductCatalog(AdCPBaseModel):
|
|
|
132
161
|
model_config = ConfigDict(
|
|
133
162
|
extra='allow',
|
|
134
163
|
)
|
|
164
|
+
agentic_checkout: Annotated[
|
|
165
|
+
AgenticCheckout | None,
|
|
166
|
+
Field(
|
|
167
|
+
description='Agentic checkout endpoint configuration. Enables AI agents to complete purchases on behalf of users through a structured checkout API.'
|
|
168
|
+
),
|
|
169
|
+
] = None
|
|
135
170
|
categories: Annotated[
|
|
136
171
|
list[str] | None,
|
|
137
172
|
Field(description='Product categories available in the catalog (for filtering)'),
|
|
138
173
|
] = None
|
|
139
|
-
feed_format: Annotated[
|
|
140
|
-
FeedFormat
|
|
141
|
-
|
|
174
|
+
feed_format: Annotated[
|
|
175
|
+
FeedFormat | None,
|
|
176
|
+
Field(
|
|
177
|
+
description="Format of the product feed. Use 'openai_product_feed' for feeds conforming to the OpenAI Commerce Product Feed specification."
|
|
178
|
+
),
|
|
179
|
+
] = FeedFormat.google_merchant_center
|
|
142
180
|
feed_url: Annotated[AnyUrl, Field(description='URL to product catalog feed')]
|
|
143
181
|
last_updated: Annotated[
|
|
144
182
|
AwareDatetime | None, Field(description='When the product catalog was last updated')
|
|
@@ -148,6 +186,17 @@ class ProductCatalog(AdCPBaseModel):
|
|
|
148
186
|
] = None
|
|
149
187
|
|
|
150
188
|
|
|
189
|
+
class Voice(AdCPBaseModel):
|
|
190
|
+
provider: Annotated[
|
|
191
|
+
str | None, Field(description="TTS provider (e.g., 'elevenlabs', 'openai', 'amazon_polly')")
|
|
192
|
+
] = None
|
|
193
|
+
settings: Annotated[
|
|
194
|
+
dict[str, Any] | None,
|
|
195
|
+
Field(description='Provider-specific voice settings (speed, pitch, etc.)'),
|
|
196
|
+
] = None
|
|
197
|
+
voice_id: Annotated[str | None, Field(description='Provider-specific voice identifier')] = None
|
|
198
|
+
|
|
199
|
+
|
|
151
200
|
class BrandManifest(AdCPBaseModel):
|
|
152
201
|
model_config = ConfigDict(
|
|
153
202
|
extra='allow',
|
|
@@ -158,6 +207,10 @@ class BrandManifest(AdCPBaseModel):
|
|
|
158
207
|
description='Brand asset library with explicit assets and tags. Assets are referenced inline with URLs pointing to CDN-hosted files.'
|
|
159
208
|
),
|
|
160
209
|
] = None
|
|
210
|
+
avatar: Annotated[
|
|
211
|
+
Avatar | None,
|
|
212
|
+
Field(description='Brand avatar configuration for visual conversational experiences'),
|
|
213
|
+
] = None
|
|
161
214
|
colors: Annotated[Colors | None, Field(description='Brand color palette')] = None
|
|
162
215
|
contact: Annotated[Contact | None, Field(description='Brand contact information')] = None
|
|
163
216
|
disclaimers: Annotated[
|
|
@@ -177,6 +230,12 @@ class BrandManifest(AdCPBaseModel):
|
|
|
177
230
|
] = None
|
|
178
231
|
metadata: Annotated[Metadata | None, Field(description='Additional brand metadata')] = None
|
|
179
232
|
name: Annotated[str, Field(description='Brand or business name')]
|
|
233
|
+
privacy_policy_url: Annotated[
|
|
234
|
+
AnyUrl | None,
|
|
235
|
+
Field(
|
|
236
|
+
description="URL to the brand's privacy policy. Used for consumer consent flows when personal data may be shared with the advertiser. AI platforms can use this to present explicit privacy choices to users before data handoff."
|
|
237
|
+
),
|
|
238
|
+
] = None
|
|
180
239
|
product_catalog: Annotated[
|
|
181
240
|
ProductCatalog | None,
|
|
182
241
|
Field(
|
|
@@ -199,3 +258,7 @@ class BrandManifest(AdCPBaseModel):
|
|
|
199
258
|
description='Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL.'
|
|
200
259
|
),
|
|
201
260
|
] = None
|
|
261
|
+
voice: Annotated[
|
|
262
|
+
Voice | None,
|
|
263
|
+
Field(description='Brand voice configuration for audio/conversational experiences'),
|
|
264
|
+
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/creative_asset.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,6 +9,7 @@ from typing import Annotated
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import ConfigDict, Field
|
|
11
11
|
|
|
12
|
+
from ..enums import creative_status
|
|
12
13
|
from . import format_id as format_id_1
|
|
13
14
|
from . import promoted_offerings
|
|
14
15
|
from .assets import (
|
|
@@ -43,12 +44,6 @@ class CreativeAsset(AdCPBaseModel):
|
|
|
43
44
|
model_config = ConfigDict(
|
|
44
45
|
extra='allow',
|
|
45
46
|
)
|
|
46
|
-
approved: Annotated[
|
|
47
|
-
bool | None,
|
|
48
|
-
Field(
|
|
49
|
-
description='For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives.'
|
|
50
|
-
),
|
|
51
|
-
] = None
|
|
52
47
|
assets: Annotated[
|
|
53
48
|
dict[
|
|
54
49
|
str,
|
|
@@ -87,6 +82,12 @@ class CreativeAsset(AdCPBaseModel):
|
|
|
87
82
|
min_length=1,
|
|
88
83
|
),
|
|
89
84
|
] = None
|
|
85
|
+
status: Annotated[
|
|
86
|
+
creative_status.CreativeStatus | None,
|
|
87
|
+
Field(
|
|
88
|
+
description="For generative creatives: set to 'approved' to finalize, 'rejected' to request regeneration with updated assets/message. Omit for non-generative creatives (system will set based on processing state)."
|
|
89
|
+
),
|
|
90
|
+
] = None
|
|
90
91
|
tags: Annotated[
|
|
91
92
|
list[str] | None, Field(description='User-defined tags for organization and searchability')
|
|
92
93
|
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/creative_filters.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -16,9 +16,6 @@ class CreativeFilters(AdCPBaseModel):
|
|
|
16
16
|
model_config = ConfigDict(
|
|
17
17
|
extra='allow',
|
|
18
18
|
)
|
|
19
|
-
assigned_to_package: Annotated[
|
|
20
|
-
str | None, Field(description='Filter creatives assigned to this specific package')
|
|
21
|
-
] = None
|
|
22
19
|
assigned_to_packages: Annotated[
|
|
23
20
|
list[str] | None, Field(description='Filter creatives assigned to any of these packages')
|
|
24
21
|
] = None
|
|
@@ -39,12 +36,9 @@ class CreativeFilters(AdCPBaseModel):
|
|
|
39
36
|
creative_ids: Annotated[
|
|
40
37
|
list[str] | None, Field(description='Filter by specific creative IDs', max_length=100)
|
|
41
38
|
] = None
|
|
42
|
-
format: Annotated[
|
|
43
|
-
str | None,
|
|
44
|
-
Field(description='Filter by creative format type (e.g., video, audio, display)'),
|
|
45
|
-
] = None
|
|
46
39
|
formats: Annotated[
|
|
47
|
-
list[str] | None,
|
|
40
|
+
list[str] | None,
|
|
41
|
+
Field(description='Filter by creative format types (e.g., video, audio, display)'),
|
|
48
42
|
] = None
|
|
49
43
|
has_performance_data: Annotated[
|
|
50
44
|
bool | None, Field(description='Filter creatives that have performance data when true')
|
|
@@ -56,13 +50,9 @@ class CreativeFilters(AdCPBaseModel):
|
|
|
56
50
|
str | None,
|
|
57
51
|
Field(description='Filter by creative names containing this text (case-insensitive)'),
|
|
58
52
|
] = None
|
|
59
|
-
status: Annotated[
|
|
60
|
-
creative_status.CreativeStatus | None,
|
|
61
|
-
Field(description='Filter by creative approval status'),
|
|
62
|
-
] = None
|
|
63
53
|
statuses: Annotated[
|
|
64
54
|
list[creative_status.CreativeStatus] | None,
|
|
65
|
-
Field(description='Filter by
|
|
55
|
+
Field(description='Filter by creative approval statuses'),
|
|
66
56
|
] = None
|
|
67
57
|
tags: Annotated[
|
|
68
58
|
list[str] | None, Field(description='Filter by creative tags (all tags must match)')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/format.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -66,7 +66,7 @@ class Asset(AdCPBaseModel):
|
|
|
66
66
|
] = None
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
class
|
|
69
|
+
class Assets5(AdCPBaseModel):
|
|
70
70
|
asset_group_id: Annotated[
|
|
71
71
|
str, Field(description="Identifier for this asset group (e.g., 'product', 'slide', 'card')")
|
|
72
72
|
]
|
|
@@ -203,7 +203,8 @@ class Renders(AdCPBaseModel):
|
|
|
203
203
|
]
|
|
204
204
|
|
|
205
205
|
|
|
206
|
-
Dimensions1
|
|
206
|
+
class Dimensions1(Dimensions):
|
|
207
|
+
pass
|
|
207
208
|
|
|
208
209
|
|
|
209
210
|
class Renders1(AdCPBaseModel):
|
|
@@ -269,7 +270,7 @@ class Format(AdCPBaseModel):
|
|
|
269
270
|
),
|
|
270
271
|
] = None
|
|
271
272
|
assets: Annotated[
|
|
272
|
-
list[Assets |
|
|
273
|
+
list[Assets | Assets5] | None,
|
|
273
274
|
Field(
|
|
274
275
|
description="Array of all assets supported for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Use the 'required' boolean on each asset to indicate whether it's mandatory. This field replaces the deprecated 'assets_required' and enables full asset discovery for buyers and AI agents."
|
|
275
276
|
),
|
|
@@ -278,7 +279,7 @@ class Format(AdCPBaseModel):
|
|
|
278
279
|
list[AssetsRequired | AssetsRequired1] | None,
|
|
279
280
|
Field(
|
|
280
281
|
deprecated=True,
|
|
281
|
-
description="DEPRECATED: Use 'assets' instead. Array of required assets or asset groups for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Can contain individual assets or repeatable asset sequences (e.g., carousel products, slideshow frames). This field is maintained for backward compatibility; new implementations should use 'assets' with the 'required' boolean on each asset."
|
|
282
|
+
description="DEPRECATED: Use 'assets' instead. Array of required assets or asset groups for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Can contain individual assets or repeatable asset sequences (e.g., carousel products, slideshow frames). This field is maintained for backward compatibility; new implementations should use 'assets' with the 'required' boolean on each asset.",
|
|
282
283
|
),
|
|
283
284
|
] = None
|
|
284
285
|
delivery: Annotated[
|