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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: enums/property_type.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -11,6 +11,7 @@ class PropertyType(Enum):
|
|
|
11
11
|
website = 'website'
|
|
12
12
|
mobile_app = 'mobile_app'
|
|
13
13
|
ctv_app = 'ctv_app'
|
|
14
|
+
desktop_app = 'desktop_app'
|
|
14
15
|
dooh = 'dooh'
|
|
15
16
|
podcast = 'podcast'
|
|
16
17
|
radio = 'radio'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: enums/task_type.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -13,3 +13,9 @@ class TaskType(Enum):
|
|
|
13
13
|
sync_creatives = 'sync_creatives'
|
|
14
14
|
activate_signal = 'activate_signal'
|
|
15
15
|
get_signals = 'get_signals'
|
|
16
|
+
list_property_features = 'list_property_features'
|
|
17
|
+
create_property_list = 'create_property_list'
|
|
18
|
+
update_property_list = 'update_property_list'
|
|
19
|
+
get_property_list = 'get_property_list'
|
|
20
|
+
list_property_lists = 'list_property_lists'
|
|
21
|
+
delete_property_list = 'delete_property_list'
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: extensions/extension_meta.json
|
|
3
|
+
# timestamp: 2026-01-26T11:59:53+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Any, Literal
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AnyUrl, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AdcpExtensionFileSchema(AdCPBaseModel):
|
|
14
|
+
field_id: Annotated[
|
|
15
|
+
str,
|
|
16
|
+
Field(
|
|
17
|
+
alias='$id',
|
|
18
|
+
description='Extension ID following pattern /schemas/extensions/{namespace}.json',
|
|
19
|
+
pattern='^/schemas/extensions/[a-z][a-z0-9_]*\\.json$',
|
|
20
|
+
),
|
|
21
|
+
]
|
|
22
|
+
field_schema: Annotated[
|
|
23
|
+
Literal['http://json-schema.org/draft-07/schema#'], Field(alias='$schema')
|
|
24
|
+
]
|
|
25
|
+
additionalProperties: Annotated[
|
|
26
|
+
Any | None,
|
|
27
|
+
Field(description='Whether additional properties are allowed in the extension data'),
|
|
28
|
+
] = None
|
|
29
|
+
description: Annotated[str, Field(description='Description of what this extension provides')]
|
|
30
|
+
docs_url: Annotated[
|
|
31
|
+
AnyUrl | None, Field(description='URL to documentation for implementors of this extension')
|
|
32
|
+
] = None
|
|
33
|
+
properties: Annotated[
|
|
34
|
+
dict[str, Any],
|
|
35
|
+
Field(description='Schema properties defining the structure of ext.{namespace} data'),
|
|
36
|
+
]
|
|
37
|
+
required: Annotated[
|
|
38
|
+
list[str] | None, Field(description='Required properties within the extension data')
|
|
39
|
+
] = None
|
|
40
|
+
title: Annotated[str, Field(description='Human-readable title for the extension')]
|
|
41
|
+
type: Annotated[
|
|
42
|
+
Literal['object'],
|
|
43
|
+
Field(description='Extensions must be objects (data within ext.{namespace})'),
|
|
44
|
+
]
|
|
45
|
+
valid_from: Annotated[
|
|
46
|
+
str,
|
|
47
|
+
Field(
|
|
48
|
+
description="Minimum AdCP version this extension is compatible with (e.g., '2.5'). Extension will be included in all versioned schema builds >= this version.",
|
|
49
|
+
pattern='^\\d+\\.\\d+$',
|
|
50
|
+
),
|
|
51
|
+
]
|
|
52
|
+
valid_until: Annotated[
|
|
53
|
+
str | None,
|
|
54
|
+
Field(
|
|
55
|
+
description="Last AdCP version this extension is compatible with (e.g., '3.0'). Omit if extension is still valid for current and future versions.",
|
|
56
|
+
pattern='^\\d+\\.\\d+$',
|
|
57
|
+
),
|
|
58
|
+
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/create_media_buy_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -13,6 +13,7 @@ from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field
|
|
|
13
13
|
from ..core import brand_manifest_ref
|
|
14
14
|
from ..core import context as context_1
|
|
15
15
|
from ..core import ext as ext_1
|
|
16
|
+
from ..core import reporting_webhook as reporting_webhook_1
|
|
16
17
|
from ..core import start_timing
|
|
17
18
|
from ..enums import auth_scheme
|
|
18
19
|
from . import package_request
|
|
@@ -39,25 +40,17 @@ class Authentication(AdCPBaseModel):
|
|
|
39
40
|
]
|
|
40
41
|
|
|
41
42
|
|
|
42
|
-
class
|
|
43
|
+
class BatchFrequency(Enum):
|
|
43
44
|
hourly = 'hourly'
|
|
44
45
|
daily = 'daily'
|
|
45
|
-
monthly = 'monthly'
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
class
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
clicks = 'clicks'
|
|
52
|
-
ctr = 'ctr'
|
|
53
|
-
video_completions = 'video_completions'
|
|
54
|
-
completion_rate = 'completion_rate'
|
|
55
|
-
conversions = 'conversions'
|
|
56
|
-
viewability = 'viewability'
|
|
57
|
-
engagement_rate = 'engagement_rate'
|
|
48
|
+
class DeliveryMode(Enum):
|
|
49
|
+
realtime = 'realtime'
|
|
50
|
+
batched = 'batched'
|
|
58
51
|
|
|
59
52
|
|
|
60
|
-
class
|
|
53
|
+
class ArtifactWebhook(AdCPBaseModel):
|
|
61
54
|
model_config = ConfigDict(
|
|
62
55
|
extra='allow',
|
|
63
56
|
)
|
|
@@ -65,16 +58,24 @@ class ReportingWebhook(AdCPBaseModel):
|
|
|
65
58
|
Authentication,
|
|
66
59
|
Field(description='Authentication configuration for webhook delivery (A2A-compatible)'),
|
|
67
60
|
]
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
batch_frequency: Annotated[
|
|
62
|
+
BatchFrequency | None,
|
|
70
63
|
Field(
|
|
71
|
-
description=
|
|
64
|
+
description="For batched delivery, how often to push artifacts. Required when delivery_mode is 'batched'."
|
|
65
|
+
),
|
|
66
|
+
] = None
|
|
67
|
+
delivery_mode: Annotated[
|
|
68
|
+
DeliveryMode,
|
|
69
|
+
Field(
|
|
70
|
+
description="How artifacts are delivered. 'realtime' pushes artifacts as impressions occur. 'batched' aggregates artifacts and pushes periodically (see batch_frequency)."
|
|
72
71
|
),
|
|
73
72
|
]
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
sampling_rate: Annotated[
|
|
74
|
+
float | None,
|
|
76
75
|
Field(
|
|
77
|
-
description=
|
|
76
|
+
description='Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0',
|
|
77
|
+
ge=0.0,
|
|
78
|
+
le=1.0,
|
|
78
79
|
),
|
|
79
80
|
] = None
|
|
80
81
|
token: Annotated[
|
|
@@ -84,13 +85,27 @@ class ReportingWebhook(AdCPBaseModel):
|
|
|
84
85
|
min_length=16,
|
|
85
86
|
),
|
|
86
87
|
] = None
|
|
87
|
-
url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for
|
|
88
|
+
url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for artifact delivery')]
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class TotalBudget(AdCPBaseModel):
|
|
92
|
+
model_config = ConfigDict(
|
|
93
|
+
extra='forbid',
|
|
94
|
+
)
|
|
95
|
+
amount: Annotated[float, Field(description='Total budget amount', ge=0.0)]
|
|
96
|
+
currency: Annotated[str, Field(description='ISO 4217 currency code')]
|
|
88
97
|
|
|
89
98
|
|
|
90
99
|
class CreateMediaBuyRequest(AdCPBaseModel):
|
|
91
100
|
model_config = ConfigDict(
|
|
92
101
|
extra='allow',
|
|
93
102
|
)
|
|
103
|
+
artifact_webhook: Annotated[
|
|
104
|
+
ArtifactWebhook | None,
|
|
105
|
+
Field(
|
|
106
|
+
description='Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation.'
|
|
107
|
+
),
|
|
108
|
+
] = None
|
|
94
109
|
brand_manifest: Annotated[
|
|
95
110
|
brand_manifest_ref.BrandManifestReference,
|
|
96
111
|
Field(
|
|
@@ -104,13 +119,26 @@ class CreateMediaBuyRequest(AdCPBaseModel):
|
|
|
104
119
|
]
|
|
105
120
|
ext: ext_1.ExtensionObject | None = None
|
|
106
121
|
packages: Annotated[
|
|
107
|
-
list[package_request.PackageRequest]
|
|
108
|
-
|
|
122
|
+
list[package_request.PackageRequest] | None,
|
|
123
|
+
Field(
|
|
124
|
+
description="Array of package configurations. Required when not using proposal_id. When executing a proposal, this can be omitted and packages will be derived from the proposal's allocations."
|
|
125
|
+
),
|
|
126
|
+
] = None
|
|
109
127
|
po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None
|
|
110
|
-
|
|
111
|
-
|
|
128
|
+
proposal_id: Annotated[
|
|
129
|
+
str | None,
|
|
112
130
|
Field(
|
|
113
|
-
description=
|
|
131
|
+
description="ID of a proposal from get_products to execute. When provided with total_budget, the publisher converts the proposal's allocation percentages into packages automatically. Alternative to providing packages array."
|
|
114
132
|
),
|
|
115
133
|
] = None
|
|
134
|
+
reporting_webhook: Annotated[
|
|
135
|
+
reporting_webhook_1.ReportingWebhook | None,
|
|
136
|
+
Field(description='Optional webhook configuration for automated reporting delivery'),
|
|
137
|
+
] = None
|
|
116
138
|
start_time: start_timing.StartTiming
|
|
139
|
+
total_budget: Annotated[
|
|
140
|
+
TotalBudget | None,
|
|
141
|
+
Field(
|
|
142
|
+
description="Total budget for the media buy when executing a proposal. The publisher applies the proposal's allocation percentages to this amount to derive package budgets."
|
|
143
|
+
),
|
|
144
|
+
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
from ..core import brand_manifest_ref
|
|
13
13
|
from ..core import context as context_1
|
|
14
14
|
from ..core import ext as ext_1
|
|
15
|
-
from ..core import product_filters
|
|
15
|
+
from ..core import product_filters, property_list_ref
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class GetProductsRequest(AdCPBaseModel):
|
|
@@ -26,8 +26,23 @@ class GetProductsRequest(AdCPBaseModel):
|
|
|
26
26
|
),
|
|
27
27
|
] = None
|
|
28
28
|
brief: Annotated[
|
|
29
|
-
str | None,
|
|
29
|
+
str | None,
|
|
30
|
+
Field(
|
|
31
|
+
description="Natural language description of campaign requirements. When refining a proposal, can include instructions like 'focus more on German speakers' or 'increase mobile allocation'."
|
|
32
|
+
),
|
|
30
33
|
] = None
|
|
31
34
|
context: context_1.ContextObject | None = None
|
|
32
35
|
ext: ext_1.ExtensionObject | None = None
|
|
33
36
|
filters: product_filters.ProductFilters | None = None
|
|
37
|
+
property_list: Annotated[
|
|
38
|
+
property_list_ref.PropertyListReference | None,
|
|
39
|
+
Field(
|
|
40
|
+
description='[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list.'
|
|
41
|
+
),
|
|
42
|
+
] = None
|
|
43
|
+
proposal_id: Annotated[
|
|
44
|
+
str | None,
|
|
45
|
+
Field(
|
|
46
|
+
description='Optional proposal ID to refine. When provided with a brief, the publisher will use the brief as refinement instructions for the specified proposal and return an updated version.'
|
|
47
|
+
),
|
|
48
|
+
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_response.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
from ..core import context as context_1
|
|
13
13
|
from ..core import error
|
|
14
14
|
from ..core import ext as ext_1
|
|
15
|
-
from ..core import product
|
|
15
|
+
from ..core import product, proposal
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class GetProductsResponse(AdCPBaseModel):
|
|
@@ -26,3 +26,15 @@ class GetProductsResponse(AdCPBaseModel):
|
|
|
26
26
|
] = None
|
|
27
27
|
ext: ext_1.ExtensionObject | None = None
|
|
28
28
|
products: Annotated[list[product.Product], Field(description='Array of matching products')]
|
|
29
|
+
property_list_applied: Annotated[
|
|
30
|
+
bool | None,
|
|
31
|
+
Field(
|
|
32
|
+
description='[AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent.'
|
|
33
|
+
),
|
|
34
|
+
] = None
|
|
35
|
+
proposals: Annotated[
|
|
36
|
+
list[proposal.Proposal] | None,
|
|
37
|
+
Field(
|
|
38
|
+
description='Optional array of proposed media plans with budget allocations across products. Publishers include proposals when they can provide strategic guidance based on the brief. Proposals are actionable - buyers can refine them via subsequent get_products calls or execute them directly via create_media_buy.'
|
|
39
|
+
),
|
|
40
|
+
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_authorized_properties_response.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -62,7 +62,7 @@ class ListAuthorizedPropertiesResponse(AdCPBaseModel):
|
|
|
62
62
|
),
|
|
63
63
|
] = None
|
|
64
64
|
primary_channels: Annotated[
|
|
65
|
-
list[channels.
|
|
65
|
+
list[channels.MediaChannel] | None,
|
|
66
66
|
Field(
|
|
67
67
|
description='Primary advertising channels represented in this property portfolio. Helps buying agents quickly filter relevance.',
|
|
68
68
|
min_length=1,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_creatives_request.json
|
|
3
|
-
# timestamp: 2026-01-
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -19,7 +19,7 @@ from ..enums import creative_sort_field, sort_direction
|
|
|
19
19
|
class FieldModel(Enum):
|
|
20
20
|
creative_id = 'creative_id'
|
|
21
21
|
name = 'name'
|
|
22
|
-
|
|
22
|
+
format_ = 'format'
|
|
23
23
|
status = 'status'
|
|
24
24
|
created_date = 'created_date'
|
|
25
25
|
updated_date = 'updated_date'
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_creatives_response.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
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
@@ -29,20 +28,15 @@ from ..core.assets import (
|
|
|
29
28
|
from ..enums import creative_status, sort_direction
|
|
30
29
|
|
|
31
30
|
|
|
32
|
-
class Status(Enum):
|
|
33
|
-
active = 'active'
|
|
34
|
-
paused = 'paused'
|
|
35
|
-
ended = 'ended'
|
|
36
|
-
|
|
37
|
-
|
|
38
31
|
class AssignedPackage(AdCPBaseModel):
|
|
39
32
|
model_config = ConfigDict(
|
|
40
33
|
extra='allow',
|
|
41
34
|
)
|
|
42
35
|
assigned_date: Annotated[AwareDatetime, Field(description='When this assignment was created')]
|
|
36
|
+
buyer_ref: Annotated[
|
|
37
|
+
str | None, Field(description="Buyer's reference identifier for this package")
|
|
38
|
+
] = None
|
|
43
39
|
package_id: Annotated[str, Field(description='Package identifier')]
|
|
44
|
-
package_name: Annotated[str | None, Field(description='Human-readable package name')] = None
|
|
45
|
-
status: Annotated[Status, Field(description='Status of this specific assignment')]
|
|
46
40
|
|
|
47
41
|
|
|
48
42
|
class Assignments(AdCPBaseModel):
|
|
@@ -106,6 +100,9 @@ class StatusSummary(AdCPBaseModel):
|
|
|
106
100
|
pending_review: Annotated[
|
|
107
101
|
int | None, Field(description='Number of creatives pending review', ge=0)
|
|
108
102
|
] = None
|
|
103
|
+
processing: Annotated[
|
|
104
|
+
int | None, Field(description='Number of creatives being processed', ge=0)
|
|
105
|
+
] = None
|
|
109
106
|
rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
|
|
110
107
|
|
|
111
108
|
|