adcp 3.0.0__py3-none-any.whl → 3.2.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 +13 -5
- adcp/__main__.py +4 -4
- adcp/adagents.py +5 -9
- adcp/client.py +14 -12
- adcp/protocols/a2a.py +3 -3
- adcp/protocols/base.py +2 -2
- adcp/protocols/mcp.py +3 -3
- adcp/server/base.py +6 -10
- adcp/server/content_standards.py +17 -49
- adcp/server/governance.py +20 -59
- adcp/server/mcp_tools.py +8 -4
- adcp/server/proposal.py +1 -3
- adcp/server/sponsored_intelligence.py +10 -28
- adcp/simple.py +10 -10
- adcp/types/__init__.py +14 -6
- adcp/types/_generated.py +44 -27
- adcp/types/aliases.py +55 -0
- adcp/types/base.py +7 -7
- adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
- adcp/types/generated_poc/a2ui/component.py +24 -0
- adcp/types/generated_poc/a2ui/surface.py +33 -0
- adcp/types/generated_poc/account/__init__.py +3 -0
- adcp/types/generated_poc/account/list_accounts_request.py +30 -0
- adcp/types/generated_poc/account/list_accounts_response.py +30 -0
- adcp/types/generated_poc/adagents.py +192 -195
- adcp/types/generated_poc/content_standards/artifact.py +69 -69
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
- adcp/types/generated_poc/content_standards/content_standards.py +8 -8
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
- adcp/types/generated_poc/core/account.py +54 -0
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
- adcp/types/generated_poc/core/assets/css_asset.py +2 -2
- adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/html_asset.py +2 -2
- adcp/types/generated_poc/core/assets/image_asset.py +6 -6
- adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
- adcp/types/generated_poc/core/assets/text_asset.py +2 -2
- adcp/types/generated_poc/core/assets/url_asset.py +3 -3
- adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/video_asset.py +126 -10
- adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
- adcp/types/generated_poc/core/async_response_data.py +2 -2
- adcp/types/generated_poc/core/brand_manifest.py +66 -66
- adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +12 -12
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +23 -17
- adcp/types/generated_poc/core/creative_manifest.py +4 -4
- adcp/types/generated_poc/core/creative_policy.py +4 -4
- adcp/types/generated_poc/core/delivery_metrics.py +32 -32
- adcp/types/generated_poc/core/deployment.py +20 -20
- adcp/types/generated_poc/core/destination.py +11 -11
- adcp/types/generated_poc/core/error.py +6 -6
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +49 -124
- adcp/types/generated_poc/core/format_id.py +5 -5
- adcp/types/generated_poc/core/frequency_cap.py +2 -2
- adcp/types/generated_poc/core/identifier.py +2 -2
- adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
- adcp/types/generated_poc/core/measurement.py +8 -8
- adcp/types/generated_poc/core/media_buy.py +12 -8
- adcp/types/generated_poc/core/media_buy_features.py +3 -3
- adcp/types/generated_poc/core/offering.py +9 -9
- adcp/types/generated_poc/core/package.py +8 -8
- adcp/types/generated_poc/core/performance_feedback.py +18 -18
- adcp/types/generated_poc/core/placement.py +4 -4
- adcp/types/generated_poc/core/pricing_option.py +1 -1
- adcp/types/generated_poc/core/product.py +27 -21
- adcp/types/generated_poc/core/product_allocation.py +5 -5
- adcp/types/generated_poc/core/product_filters.py +27 -27
- adcp/types/generated_poc/core/promoted_offerings.py +18 -18
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +10 -10
- adcp/types/generated_poc/core/property_id.py +4 -4
- adcp/types/generated_poc/core/property_list_ref.py +4 -4
- adcp/types/generated_poc/core/property_tag.py +4 -4
- adcp/types/generated_poc/core/proposal.py +13 -13
- adcp/types/generated_poc/core/protocol_envelope.py +8 -8
- adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
- adcp/types/generated_poc/core/push_notification_config.py +5 -5
- adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
- adcp/types/generated_poc/core/reporting_webhook.py +10 -10
- adcp/types/generated_poc/core/response.py +4 -4
- adcp/types/generated_poc/core/signal_filters.py +5 -5
- adcp/types/generated_poc/core/start_timing.py +3 -3
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +17 -10
- adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
- adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
- adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +4 -4
- adcp/types/generated_poc/enums/asset_content_type.py +13 -13
- adcp/types/generated_poc/enums/auth_scheme.py +2 -2
- adcp/types/generated_poc/enums/available_metric.py +9 -9
- adcp/types/generated_poc/enums/channels.py +19 -19
- adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
- adcp/types/generated_poc/enums/creative_action.py +5 -5
- adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
- adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
- adcp/types/generated_poc/enums/creative_status.py +5 -5
- adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
- adcp/types/generated_poc/enums/daast_version.py +2 -2
- adcp/types/generated_poc/enums/delivery_type.py +2 -2
- adcp/types/generated_poc/enums/dimension_unit.py +4 -4
- adcp/types/generated_poc/enums/feed_format.py +3 -3
- adcp/types/generated_poc/enums/feedback_source.py +4 -4
- adcp/types/generated_poc/enums/format_category.py +7 -7
- adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
- adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
- adcp/types/generated_poc/enums/geo_level.py +4 -4
- adcp/types/generated_poc/enums/history_entry_type.py +2 -2
- adcp/types/generated_poc/enums/http_method.py +2 -2
- adcp/types/generated_poc/enums/identifier_types.py +19 -19
- adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
- adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
- adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
- adcp/types/generated_poc/enums/media_buy_status.py +4 -4
- adcp/types/generated_poc/enums/metric_type.py +8 -8
- adcp/types/generated_poc/enums/metro_system.py +5 -5
- adcp/types/generated_poc/enums/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- adcp/types/generated_poc/enums/postal_system.py +9 -9
- adcp/types/generated_poc/enums/preview_output_format.py +2 -2
- adcp/types/generated_poc/enums/pricing_model.py +7 -7
- adcp/types/generated_poc/enums/property_type.py +8 -8
- adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
- adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
- adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
- adcp/types/generated_poc/enums/sort_direction.py +2 -2
- adcp/types/generated_poc/enums/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +11 -12
- adcp/types/generated_poc/enums/update_frequency.py +4 -4
- adcp/types/generated_poc/enums/url_asset_type.py +3 -3
- adcp/types/generated_poc/enums/validation_mode.py +2 -2
- adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
- adcp/types/generated_poc/enums/vast_version.py +5 -5
- adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
- adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
- adcp/types/generated_poc/extensions/extension_meta.py +14 -14
- adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
- adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
- 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 +5 -5
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
- adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
- adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
- adcp/types/generated_poc/media_buy/package_request.py +8 -8
- adcp/types/generated_poc/media_buy/package_update.py +16 -16
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
- 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 +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
- 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 +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
- adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
- adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
- adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
- adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
- adcp/types/generated_poc/property/base_property_source.py +15 -15
- adcp/types/generated_poc/property/create_property_list_request.py +4 -4
- adcp/types/generated_poc/property/create_property_list_response.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
- adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +5 -5
- adcp/types/generated_poc/property/get_property_list_response.py +11 -11
- adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
- adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
- adcp/types/generated_poc/property/property_error.py +10 -10
- adcp/types/generated_poc/property/property_feature.py +4 -4
- adcp/types/generated_poc/property/property_feature_definition.py +18 -18
- adcp/types/generated_poc/property/property_list.py +11 -11
- adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
- adcp/types/generated_poc/property/property_list_filters.py +7 -7
- adcp/types/generated_poc/property/update_property_list_request.py +8 -8
- adcp/types/generated_poc/property/update_property_list_response.py +2 -2
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
- adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
- adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
- adcp/types/generated_poc/signals/get_signals_request.py +8 -8
- adcp/types/generated_poc/signals/get_signals_response.py +15 -15
- adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
- adcp/utils/format_assets.py +32 -32
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
- adcp-3.2.0.dist-info/RECORD +268 -0
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
- adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
- adcp-3.0.0.dist-info/RECORD +0 -264
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/format.json
|
|
3
|
-
# timestamp: 2026-
|
|
3
|
+
# timestamp: 2026-02-02T17:45:21+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ class Assets(AdCPBaseModel):
|
|
|
17
17
|
asset_id: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description=
|
|
20
|
+
description="Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object."
|
|
21
21
|
),
|
|
22
22
|
]
|
|
23
23
|
asset_role: Annotated[
|
|
@@ -26,42 +26,42 @@ class Assets(AdCPBaseModel):
|
|
|
26
26
|
description="Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo', 'third_party_tracking'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
|
|
27
27
|
),
|
|
28
28
|
] = None
|
|
29
|
-
asset_type: Annotated[asset_content_type.AssetContentType, Field(description=
|
|
29
|
+
asset_type: Annotated[asset_content_type.AssetContentType, Field(description="Type of asset")]
|
|
30
30
|
item_type: Annotated[
|
|
31
|
-
Literal[
|
|
32
|
-
Field(description=
|
|
31
|
+
Literal["individual"],
|
|
32
|
+
Field(description="Discriminator indicating this is an individual asset"),
|
|
33
33
|
]
|
|
34
34
|
required: Annotated[
|
|
35
35
|
bool,
|
|
36
36
|
Field(
|
|
37
|
-
description=
|
|
37
|
+
description="Whether this asset is required (true) or optional (false). Required assets must be provided for a valid creative. Optional assets enhance the creative but are not mandatory."
|
|
38
38
|
),
|
|
39
39
|
]
|
|
40
40
|
requirements: Annotated[
|
|
41
41
|
dict[str, Any] | None,
|
|
42
42
|
Field(
|
|
43
|
-
description=
|
|
43
|
+
description="Technical requirements for this asset (dimensions, file size, duration, etc.). For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms)."
|
|
44
44
|
),
|
|
45
45
|
] = None
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class Asset(AdCPBaseModel):
|
|
49
|
-
asset_id: Annotated[str, Field(description=
|
|
49
|
+
asset_id: Annotated[str, Field(description="Identifier for this asset within the group")]
|
|
50
50
|
asset_role: Annotated[
|
|
51
51
|
str | None,
|
|
52
52
|
Field(
|
|
53
53
|
description="Optional descriptive label for this asset's purpose. Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
|
|
54
54
|
),
|
|
55
55
|
] = None
|
|
56
|
-
asset_type: Annotated[asset_content_type.AssetContentType, Field(description=
|
|
56
|
+
asset_type: Annotated[asset_content_type.AssetContentType, Field(description="Type of asset")]
|
|
57
57
|
required: Annotated[
|
|
58
58
|
bool,
|
|
59
|
-
Field(description=
|
|
59
|
+
Field(description="Whether this asset is required within each repetition of the group"),
|
|
60
60
|
]
|
|
61
61
|
requirements: Annotated[
|
|
62
62
|
dict[str, Any] | None,
|
|
63
63
|
Field(
|
|
64
|
-
description=
|
|
64
|
+
description="Technical requirements for this asset. For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms)."
|
|
65
65
|
),
|
|
66
66
|
] = None
|
|
67
67
|
|
|
@@ -70,89 +70,27 @@ 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
|
]
|
|
73
|
-
assets: Annotated[list[Asset], Field(description=
|
|
73
|
+
assets: Annotated[list[Asset], Field(description="Assets within each repetition of this group")]
|
|
74
74
|
item_type: Annotated[
|
|
75
|
-
Literal[
|
|
76
|
-
Field(description=
|
|
75
|
+
Literal["repeatable_group"],
|
|
76
|
+
Field(description="Discriminator indicating this is a repeatable asset group"),
|
|
77
77
|
]
|
|
78
|
-
max_count: Annotated[int, Field(description=
|
|
78
|
+
max_count: Annotated[int, Field(description="Maximum number of repetitions allowed", ge=1)]
|
|
79
79
|
min_count: Annotated[
|
|
80
80
|
int,
|
|
81
81
|
Field(
|
|
82
|
-
description=
|
|
82
|
+
description="Minimum number of repetitions required (if group is required) or allowed (if optional)",
|
|
83
83
|
ge=0,
|
|
84
84
|
),
|
|
85
85
|
]
|
|
86
86
|
required: Annotated[
|
|
87
87
|
bool,
|
|
88
88
|
Field(
|
|
89
|
-
description=
|
|
89
|
+
description="Whether this asset group is required. If true, at least min_count repetitions must be provided."
|
|
90
90
|
),
|
|
91
91
|
]
|
|
92
92
|
|
|
93
93
|
|
|
94
|
-
class AssetsRequired(AdCPBaseModel):
|
|
95
|
-
asset_id: Annotated[
|
|
96
|
-
str,
|
|
97
|
-
Field(
|
|
98
|
-
description='Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.'
|
|
99
|
-
),
|
|
100
|
-
]
|
|
101
|
-
asset_role: Annotated[
|
|
102
|
-
str | None,
|
|
103
|
-
Field(
|
|
104
|
-
description="Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
|
|
105
|
-
),
|
|
106
|
-
] = None
|
|
107
|
-
asset_type: Annotated[asset_content_type.AssetContentType, Field(description='Type of asset')]
|
|
108
|
-
item_type: Annotated[
|
|
109
|
-
Literal['individual'],
|
|
110
|
-
Field(description='Discriminator indicating this is an individual asset requirement'),
|
|
111
|
-
]
|
|
112
|
-
required: Annotated[bool | None, Field(description='Whether this asset is required')] = None
|
|
113
|
-
requirements: Annotated[
|
|
114
|
-
dict[str, Any] | None,
|
|
115
|
-
Field(
|
|
116
|
-
description='Technical requirements for this asset (dimensions, file size, duration, etc.). For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).'
|
|
117
|
-
),
|
|
118
|
-
] = None
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
class Asset2(AdCPBaseModel):
|
|
122
|
-
asset_id: Annotated[str, Field(description='Identifier for this asset within the group')]
|
|
123
|
-
asset_role: Annotated[
|
|
124
|
-
str | None,
|
|
125
|
-
Field(
|
|
126
|
-
description="Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
|
|
127
|
-
),
|
|
128
|
-
] = None
|
|
129
|
-
asset_type: Annotated[asset_content_type.AssetContentType, Field(description='Type of asset')]
|
|
130
|
-
required: Annotated[
|
|
131
|
-
bool | None, Field(description='Whether this asset is required in each repetition')
|
|
132
|
-
] = None
|
|
133
|
-
requirements: Annotated[
|
|
134
|
-
dict[str, Any] | None,
|
|
135
|
-
Field(
|
|
136
|
-
description='Technical requirements for this asset. For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).'
|
|
137
|
-
),
|
|
138
|
-
] = None
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
class AssetsRequired1(AdCPBaseModel):
|
|
142
|
-
asset_group_id: Annotated[
|
|
143
|
-
str, Field(description="Identifier for this asset group (e.g., 'product', 'slide', 'card')")
|
|
144
|
-
]
|
|
145
|
-
assets: Annotated[
|
|
146
|
-
list[Asset2], Field(description='Assets within each repetition of this group')
|
|
147
|
-
]
|
|
148
|
-
item_type: Annotated[
|
|
149
|
-
Literal['repeatable_group'],
|
|
150
|
-
Field(description='Discriminator indicating this is a repeatable asset group'),
|
|
151
|
-
]
|
|
152
|
-
max_count: Annotated[int, Field(description='Maximum number of repetitions allowed', ge=1)]
|
|
153
|
-
min_count: Annotated[int, Field(description='Minimum number of repetitions required', ge=1)]
|
|
154
|
-
|
|
155
|
-
|
|
156
94
|
class Responsive(AdCPBaseModel):
|
|
157
95
|
height: bool
|
|
158
96
|
width: bool
|
|
@@ -163,36 +101,36 @@ class Dimensions(AdCPBaseModel):
|
|
|
163
101
|
str | None,
|
|
164
102
|
Field(
|
|
165
103
|
description="Fixed aspect ratio constraint (e.g., '16:9', '4:3', '1:1')",
|
|
166
|
-
pattern=
|
|
104
|
+
pattern="^\\d+:\\d+$",
|
|
167
105
|
),
|
|
168
106
|
] = None
|
|
169
|
-
height: Annotated[int | None, Field(description=
|
|
107
|
+
height: Annotated[int | None, Field(description="Fixed height in pixels", ge=1)] = None
|
|
170
108
|
max_height: Annotated[
|
|
171
|
-
int | None, Field(description=
|
|
109
|
+
int | None, Field(description="Maximum height in pixels for responsive renders", ge=1)
|
|
172
110
|
] = None
|
|
173
111
|
max_width: Annotated[
|
|
174
|
-
int | None, Field(description=
|
|
112
|
+
int | None, Field(description="Maximum width in pixels for responsive renders", ge=1)
|
|
175
113
|
] = None
|
|
176
114
|
min_height: Annotated[
|
|
177
|
-
int | None, Field(description=
|
|
115
|
+
int | None, Field(description="Minimum height in pixels for responsive renders", ge=1)
|
|
178
116
|
] = None
|
|
179
117
|
min_width: Annotated[
|
|
180
|
-
int | None, Field(description=
|
|
118
|
+
int | None, Field(description="Minimum width in pixels for responsive renders", ge=1)
|
|
181
119
|
] = None
|
|
182
120
|
responsive: Annotated[
|
|
183
|
-
Responsive | None, Field(description=
|
|
121
|
+
Responsive | None, Field(description="Indicates which dimensions are responsive/fluid")
|
|
184
122
|
] = None
|
|
185
|
-
width: Annotated[int | None, Field(description=
|
|
123
|
+
width: Annotated[int | None, Field(description="Fixed width in pixels", ge=1)] = None
|
|
186
124
|
|
|
187
125
|
|
|
188
126
|
class Renders(AdCPBaseModel):
|
|
189
127
|
dimensions: Annotated[
|
|
190
|
-
Dimensions, Field(description=
|
|
128
|
+
Dimensions, Field(description="Dimensions for this rendered piece (in pixels)")
|
|
191
129
|
]
|
|
192
130
|
parameters_from_format_id: Annotated[
|
|
193
131
|
bool | None,
|
|
194
132
|
Field(
|
|
195
|
-
description=
|
|
133
|
+
description="When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly."
|
|
196
134
|
),
|
|
197
135
|
] = None
|
|
198
136
|
role: Annotated[
|
|
@@ -209,12 +147,12 @@ class Dimensions1(Dimensions):
|
|
|
209
147
|
|
|
210
148
|
class Renders1(AdCPBaseModel):
|
|
211
149
|
dimensions: Annotated[
|
|
212
|
-
Dimensions1 | None, Field(description=
|
|
150
|
+
Dimensions1 | None, Field(description="Dimensions for this rendered piece (in pixels)")
|
|
213
151
|
] = None
|
|
214
152
|
parameters_from_format_id: Annotated[
|
|
215
153
|
Literal[True],
|
|
216
154
|
Field(
|
|
217
|
-
description=
|
|
155
|
+
description="When true, parameters for this render (dimensions and/or duration) are specified in the format_id. Used for template formats that accept parameters. Mutually exclusive with specifying dimensions object explicitly."
|
|
218
156
|
),
|
|
219
157
|
]
|
|
220
158
|
role: Annotated[
|
|
@@ -227,122 +165,109 @@ class Renders1(AdCPBaseModel):
|
|
|
227
165
|
|
|
228
166
|
class FormatCard(AdCPBaseModel):
|
|
229
167
|
model_config = ConfigDict(
|
|
230
|
-
extra=
|
|
168
|
+
extra="allow",
|
|
231
169
|
)
|
|
232
170
|
format_id: Annotated[
|
|
233
171
|
format_id_1.FormatId,
|
|
234
172
|
Field(
|
|
235
|
-
description=
|
|
173
|
+
description="Creative format defining the card layout (typically format_card_standard)"
|
|
236
174
|
),
|
|
237
175
|
]
|
|
238
176
|
manifest: Annotated[
|
|
239
177
|
dict[str, Any],
|
|
240
|
-
Field(description=
|
|
178
|
+
Field(description="Asset manifest for rendering the card, structure defined by the format"),
|
|
241
179
|
]
|
|
242
180
|
|
|
243
181
|
|
|
244
182
|
class FormatCardDetailed(AdCPBaseModel):
|
|
245
183
|
model_config = ConfigDict(
|
|
246
|
-
extra=
|
|
184
|
+
extra="allow",
|
|
247
185
|
)
|
|
248
186
|
format_id: Annotated[
|
|
249
187
|
format_id_1.FormatId,
|
|
250
188
|
Field(
|
|
251
|
-
description=
|
|
189
|
+
description="Creative format defining the detailed card layout (typically format_card_detailed)"
|
|
252
190
|
),
|
|
253
191
|
]
|
|
254
192
|
manifest: Annotated[
|
|
255
193
|
dict[str, Any],
|
|
256
194
|
Field(
|
|
257
|
-
description=
|
|
195
|
+
description="Asset manifest for rendering the detailed card, structure defined by the format"
|
|
258
196
|
),
|
|
259
197
|
]
|
|
260
198
|
|
|
261
199
|
|
|
262
200
|
class Format(AdCPBaseModel):
|
|
263
201
|
model_config = ConfigDict(
|
|
264
|
-
extra=
|
|
202
|
+
extra="allow",
|
|
265
203
|
)
|
|
266
204
|
accepts_parameters: Annotated[
|
|
267
205
|
list[format_id_parameter.FormatIdParameter] | None,
|
|
268
206
|
Field(
|
|
269
|
-
description=
|
|
207
|
+
description="List of parameters this format accepts in format_id. Template formats define which parameters (dimensions, duration, etc.) can be specified when instantiating the format. Empty or omitted means this is a concrete format with fixed parameters."
|
|
270
208
|
),
|
|
271
209
|
] = None
|
|
272
210
|
assets: Annotated[
|
|
273
211
|
list[Assets | Assets5] | None,
|
|
274
212
|
Field(
|
|
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.
|
|
276
|
-
),
|
|
277
|
-
] = None
|
|
278
|
-
assets_required: Annotated[
|
|
279
|
-
list[AssetsRequired | AssetsRequired1] | None,
|
|
280
|
-
Field(
|
|
281
|
-
deprecated=True,
|
|
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.",
|
|
213
|
+
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."
|
|
283
214
|
),
|
|
284
215
|
] = None
|
|
285
216
|
delivery: Annotated[
|
|
286
217
|
dict[str, Any] | None,
|
|
287
|
-
Field(description=
|
|
218
|
+
Field(description="Delivery method specifications (e.g., hosted, VAST, third-party tags)"),
|
|
288
219
|
] = None
|
|
289
220
|
description: Annotated[
|
|
290
221
|
str | None,
|
|
291
222
|
Field(
|
|
292
|
-
description=
|
|
223
|
+
description="Plain text explanation of what this format does and what assets it requires"
|
|
293
224
|
),
|
|
294
225
|
] = None
|
|
295
226
|
example_url: Annotated[
|
|
296
227
|
AnyUrl | None,
|
|
297
228
|
Field(
|
|
298
|
-
description=
|
|
229
|
+
description="Optional URL to showcase page with examples and interactive demos of this format"
|
|
299
230
|
),
|
|
300
231
|
] = None
|
|
301
232
|
format_card: Annotated[
|
|
302
233
|
FormatCard | None,
|
|
303
234
|
Field(
|
|
304
|
-
description=
|
|
235
|
+
description="Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated."
|
|
305
236
|
),
|
|
306
237
|
] = None
|
|
307
238
|
format_card_detailed: Annotated[
|
|
308
239
|
FormatCardDetailed | None,
|
|
309
240
|
Field(
|
|
310
|
-
description=
|
|
241
|
+
description="Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages."
|
|
311
242
|
),
|
|
312
243
|
] = None
|
|
313
244
|
format_id: Annotated[
|
|
314
245
|
format_id_1.FormatId,
|
|
315
|
-
Field(description=
|
|
246
|
+
Field(description="Structured format identifier with agent URL and format name"),
|
|
316
247
|
]
|
|
317
|
-
name: Annotated[str, Field(description=
|
|
248
|
+
name: Annotated[str, Field(description="Human-readable format name")]
|
|
318
249
|
output_format_ids: Annotated[
|
|
319
250
|
list[format_id_1.FormatId] | None,
|
|
320
251
|
Field(
|
|
321
|
-
description=
|
|
322
|
-
),
|
|
323
|
-
] = None
|
|
324
|
-
preview_image: Annotated[
|
|
325
|
-
AnyUrl | None,
|
|
326
|
-
Field(
|
|
327
|
-
description='DEPRECATED: Use format_card instead. Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers. This field is maintained for backward compatibility but format_card provides a more flexible, structured approach.'
|
|
252
|
+
description="For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand_manifest and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats)."
|
|
328
253
|
),
|
|
329
254
|
] = None
|
|
330
255
|
renders: Annotated[
|
|
331
256
|
list[Renders | Renders1] | None,
|
|
332
257
|
Field(
|
|
333
|
-
description=
|
|
258
|
+
description="Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.",
|
|
334
259
|
min_length=1,
|
|
335
260
|
),
|
|
336
261
|
] = None
|
|
337
262
|
supported_macros: Annotated[
|
|
338
263
|
list[str] | None,
|
|
339
264
|
Field(
|
|
340
|
-
description=
|
|
265
|
+
description="List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling."
|
|
341
266
|
),
|
|
342
267
|
] = None
|
|
343
268
|
type: Annotated[
|
|
344
269
|
format_category.FormatCategory,
|
|
345
270
|
Field(
|
|
346
|
-
description=
|
|
271
|
+
description="Media type of this format - determines rendering method and asset requirements"
|
|
347
272
|
),
|
|
348
273
|
]
|
|
@@ -12,7 +12,7 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class FormatId(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
agent_url: Annotated[
|
|
18
18
|
AnyUrl,
|
|
@@ -23,14 +23,14 @@ class FormatId(AdCPBaseModel):
|
|
|
23
23
|
duration_ms: Annotated[
|
|
24
24
|
float | None,
|
|
25
25
|
Field(
|
|
26
|
-
description=
|
|
26
|
+
description="Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.",
|
|
27
27
|
ge=1.0,
|
|
28
28
|
),
|
|
29
29
|
] = None
|
|
30
30
|
height: Annotated[
|
|
31
31
|
int | None,
|
|
32
32
|
Field(
|
|
33
|
-
description=
|
|
33
|
+
description="Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.",
|
|
34
34
|
ge=1,
|
|
35
35
|
),
|
|
36
36
|
] = None
|
|
@@ -38,13 +38,13 @@ class FormatId(AdCPBaseModel):
|
|
|
38
38
|
str,
|
|
39
39
|
Field(
|
|
40
40
|
description="Format identifier within the agent's namespace (e.g., 'display_static', 'video_hosted', 'audio_standard'). When used alone, references a template format. When combined with dimension/duration fields, creates a parameterized format ID for a specific variant.",
|
|
41
|
-
pattern=
|
|
41
|
+
pattern="^[a-zA-Z0-9_-]+$",
|
|
42
42
|
),
|
|
43
43
|
]
|
|
44
44
|
width: Annotated[
|
|
45
45
|
int | None,
|
|
46
46
|
Field(
|
|
47
|
-
description=
|
|
47
|
+
description="Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.",
|
|
48
48
|
ge=1,
|
|
49
49
|
),
|
|
50
50
|
] = None
|
|
@@ -12,8 +12,8 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class FrequencyCap(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
suppress_minutes: Annotated[
|
|
18
|
-
float, Field(description=
|
|
18
|
+
float, Field(description="Minutes to suppress after impression", ge=0.0)
|
|
19
19
|
]
|
|
@@ -14,10 +14,10 @@ from ..enums import identifier_types
|
|
|
14
14
|
|
|
15
15
|
class Identifier(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="forbid",
|
|
18
18
|
)
|
|
19
19
|
type: Annotated[
|
|
20
|
-
identifier_types.PropertyIdentifierTypes, Field(description=
|
|
20
|
+
identifier_types.PropertyIdentifierTypes, Field(description="Type of identifier")
|
|
21
21
|
]
|
|
22
22
|
value: Annotated[
|
|
23
23
|
str,
|
|
@@ -16,56 +16,56 @@ from . import async_response_data
|
|
|
16
16
|
|
|
17
17
|
class McpWebhookPayload(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra="allow",
|
|
20
20
|
)
|
|
21
21
|
context_id: Annotated[
|
|
22
22
|
str | None,
|
|
23
23
|
Field(
|
|
24
|
-
description=
|
|
24
|
+
description="Session/conversation identifier. Use this to continue the conversation if input-required status needs clarification or additional parameters."
|
|
25
25
|
),
|
|
26
26
|
] = None
|
|
27
27
|
domain: Annotated[
|
|
28
28
|
adcp_domain.AdcpDomain | None,
|
|
29
29
|
Field(
|
|
30
|
-
description=
|
|
30
|
+
description="AdCP domain this task belongs to. Helps classify the operation type at a high level."
|
|
31
31
|
),
|
|
32
32
|
] = None
|
|
33
33
|
message: Annotated[
|
|
34
34
|
str | None,
|
|
35
35
|
Field(
|
|
36
|
-
description=
|
|
36
|
+
description="Human-readable summary of the current task state. Provides context about what happened and what action may be needed."
|
|
37
37
|
),
|
|
38
38
|
] = None
|
|
39
39
|
operation_id: Annotated[
|
|
40
40
|
str | None,
|
|
41
41
|
Field(
|
|
42
|
-
description=
|
|
42
|
+
description="Publisher-defined operation identifier correlating a sequence of task updates across webhooks."
|
|
43
43
|
),
|
|
44
44
|
] = None
|
|
45
45
|
result: Annotated[
|
|
46
46
|
async_response_data.AdcpAsyncResponseData | None,
|
|
47
47
|
Field(
|
|
48
|
-
description=
|
|
48
|
+
description="Task-specific payload matching the status. For completed/failed, contains the full task response. For working/input-required/submitted, contains status-specific data. This is the data layer that AdCP specs - same structure used in A2A status.message.parts[].data."
|
|
49
49
|
),
|
|
50
50
|
] = None
|
|
51
51
|
status: Annotated[
|
|
52
52
|
task_status.TaskStatus,
|
|
53
53
|
Field(
|
|
54
|
-
description=
|
|
54
|
+
description="Current task status. Webhooks are triggered for status changes after initial submission."
|
|
55
55
|
),
|
|
56
56
|
]
|
|
57
57
|
task_id: Annotated[
|
|
58
58
|
str,
|
|
59
59
|
Field(
|
|
60
|
-
description=
|
|
60
|
+
description="Unique identifier for this task. Use this to correlate webhook notifications with the original task submission."
|
|
61
61
|
),
|
|
62
62
|
]
|
|
63
63
|
task_type: Annotated[
|
|
64
64
|
task_type_1.TaskType,
|
|
65
65
|
Field(
|
|
66
|
-
description=
|
|
66
|
+
description="Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic."
|
|
67
67
|
),
|
|
68
68
|
]
|
|
69
69
|
timestamp: Annotated[
|
|
70
|
-
AwareDatetime, Field(description=
|
|
70
|
+
AwareDatetime, Field(description="ISO 8601 timestamp when this webhook was generated.")
|
|
71
71
|
]
|
|
@@ -12,29 +12,29 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class Measurement(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
attribution: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description=
|
|
21
|
-
examples=[
|
|
20
|
+
description="Attribution methodology",
|
|
21
|
+
examples=["deterministic_purchase", "probabilistic"],
|
|
22
22
|
),
|
|
23
23
|
]
|
|
24
24
|
reporting: Annotated[
|
|
25
25
|
str,
|
|
26
26
|
Field(
|
|
27
|
-
description=
|
|
28
|
-
examples=[
|
|
27
|
+
description="Reporting frequency and format",
|
|
28
|
+
examples=["weekly_dashboard", "real_time_api"],
|
|
29
29
|
),
|
|
30
30
|
]
|
|
31
31
|
type: Annotated[
|
|
32
32
|
str,
|
|
33
33
|
Field(
|
|
34
|
-
description=
|
|
35
|
-
examples=[
|
|
34
|
+
description="Type of measurement",
|
|
35
|
+
examples=["incremental_sales_lift", "brand_lift", "foot_traffic"],
|
|
36
36
|
),
|
|
37
37
|
]
|
|
38
38
|
window: Annotated[
|
|
39
|
-
str | None, Field(description=
|
|
39
|
+
str | None, Field(description="Attribution window", examples=["30_days", "7_days"])
|
|
40
40
|
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/media_buy.json
|
|
3
|
-
# timestamp: 2026-
|
|
3
|
+
# timestamp: 2026-02-02T17:45:21+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -10,31 +10,35 @@ from adcp.types.base import AdCPBaseModel
|
|
|
10
10
|
from pydantic import AwareDatetime, ConfigDict, Field
|
|
11
11
|
|
|
12
12
|
from ..enums import media_buy_status
|
|
13
|
+
from . import account as account_1
|
|
13
14
|
from . import ext as ext_1
|
|
14
15
|
from . import package
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
class MediaBuy(AdCPBaseModel):
|
|
18
19
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
20
|
+
extra="allow",
|
|
20
21
|
)
|
|
22
|
+
account: Annotated[
|
|
23
|
+
account_1.Account | None, Field(description="Account billed for this media buy")
|
|
24
|
+
] = None
|
|
21
25
|
buyer_ref: Annotated[
|
|
22
26
|
str | None, Field(description="Buyer's reference identifier for this media buy")
|
|
23
27
|
] = None
|
|
24
|
-
created_at: Annotated[AwareDatetime | None, Field(description=
|
|
28
|
+
created_at: Annotated[AwareDatetime | None, Field(description="Creation timestamp")] = None
|
|
25
29
|
creative_deadline: Annotated[
|
|
26
|
-
AwareDatetime | None, Field(description=
|
|
30
|
+
AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline")
|
|
27
31
|
] = None
|
|
28
32
|
ext: ext_1.ExtensionObject | None = None
|
|
29
33
|
media_buy_id: Annotated[
|
|
30
34
|
str, Field(description="Publisher's unique identifier for the media buy")
|
|
31
35
|
]
|
|
32
36
|
packages: Annotated[
|
|
33
|
-
list[package.Package], Field(description=
|
|
37
|
+
list[package.Package], Field(description="Array of packages within this media buy")
|
|
34
38
|
]
|
|
35
39
|
promoted_offering: Annotated[
|
|
36
|
-
str, Field(description=
|
|
40
|
+
str, Field(description="Description of advertiser and what is being promoted")
|
|
37
41
|
]
|
|
38
42
|
status: media_buy_status.MediaBuyStatus
|
|
39
|
-
total_budget: Annotated[float, Field(description=
|
|
40
|
-
updated_at: Annotated[AwareDatetime | None, Field(description=
|
|
43
|
+
total_budget: Annotated[float, Field(description="Total budget amount", ge=0.0)]
|
|
44
|
+
updated_at: Annotated[AwareDatetime | None, Field(description="Last update timestamp")] = None
|
|
@@ -14,16 +14,16 @@ class MediaBuyFeatures(AdCPBaseModel):
|
|
|
14
14
|
content_standards: Annotated[
|
|
15
15
|
bool | None,
|
|
16
16
|
Field(
|
|
17
|
-
description=
|
|
17
|
+
description="Full support for content_standards configuration including sampling rates and category filtering"
|
|
18
18
|
),
|
|
19
19
|
] = None
|
|
20
20
|
inline_creative_management: Annotated[
|
|
21
21
|
bool | None,
|
|
22
|
-
Field(description=
|
|
22
|
+
Field(description="Supports creatives provided inline in create_media_buy requests"),
|
|
23
23
|
] = None
|
|
24
24
|
property_list_filtering: Annotated[
|
|
25
25
|
bool | None,
|
|
26
26
|
Field(
|
|
27
|
-
description=
|
|
27
|
+
description="Honors property_list parameter in get_products to filter results to buyer-approved properties"
|
|
28
28
|
),
|
|
29
29
|
] = None
|