adcp 2.18.0__py3-none-any.whl → 2.19.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/__init__.py +1 -1
- adcp/protocols/mcp.py +3 -1
- adcp/types/_ergonomic.py +0 -4
- adcp/types/_generated.py +85 -4
- adcp/types/generated_poc/adagents.py +239 -149
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +5 -5
- 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 +7 -7
- 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 +55 -55
- 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 +13 -13
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +19 -19
- adcp/types/generated_poc/core/creative_manifest.py +2 -2
- 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 +67 -66
- 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 +27 -0
- 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 +7 -7
- 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 +2 -2
- adcp/types/generated_poc/core/product.py +20 -20
- adcp/types/generated_poc/core/product_filters.py +18 -18
- adcp/types/generated_poc/core/promoted_offerings.py +20 -20
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +9 -9
- adcp/types/generated_poc/core/property_id.py +4 -4
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +4 -4
- 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/response.py +4 -4
- adcp/types/generated_poc/core/signal_filters.py +5 -5
- adcp/types/generated_poc/core/start_timing.py +5 -5
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +8 -8
- 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 +31 -30
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +5 -3
- 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 +9 -9
- 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 +4 -4
- 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/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/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- 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 +7 -7
- 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/standard_format_ids.py +35 -35
- adcp/types/generated_poc/enums/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +12 -6
- 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/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +50 -0
- 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 +25 -25
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +7 -7
- 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 +10 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +3 -3
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +7 -7
- 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 +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +52 -52
- adcp/types/generated_poc/media_buy/package_request.py +16 -7
- 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 +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +15 -15
- 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 +37 -29
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpcv_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpp_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpv_option.py +12 -12
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +15 -15
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +8 -8
- 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_features_request.py +25 -0
- adcp/types/generated_poc/property/list_property_features_response.py +24 -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/protocols/adcp_extension.py +26 -10
- 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-2.18.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
- adcp-2.19.0.dist-info/RECORD +220 -0
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
|
@@ -15,21 +15,21 @@ class BrandManifestReference(RootModel[brand_manifest.BrandManifest | AnyUrl]):
|
|
|
15
15
|
root: Annotated[
|
|
16
16
|
brand_manifest.BrandManifest | AnyUrl,
|
|
17
17
|
Field(
|
|
18
|
-
description=
|
|
18
|
+
description="Brand manifest provided either as an inline object or a URL string pointing to a hosted manifest",
|
|
19
19
|
examples=[
|
|
20
20
|
{
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
"data": {
|
|
22
|
+
"colors": {"primary": "#FF6B35"},
|
|
23
|
+
"name": "ACME Corporation",
|
|
24
|
+
"url": "https://acmecorp.com",
|
|
25
25
|
},
|
|
26
|
-
|
|
26
|
+
"description": "Inline brand manifest",
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
"data": "https://cdn.acmecorp.com/brand-manifest.json",
|
|
30
|
+
"description": "URL string reference to hosted manifest",
|
|
31
31
|
},
|
|
32
32
|
],
|
|
33
|
-
title=
|
|
33
|
+
title="Brand Manifest Reference",
|
|
34
34
|
),
|
|
35
35
|
]
|
|
@@ -27,26 +27,26 @@ from .assets import (
|
|
|
27
27
|
|
|
28
28
|
class Input(AdCPBaseModel):
|
|
29
29
|
model_config = ConfigDict(
|
|
30
|
-
extra=
|
|
30
|
+
extra="allow",
|
|
31
31
|
)
|
|
32
32
|
context_description: Annotated[
|
|
33
33
|
str | None,
|
|
34
|
-
Field(description=
|
|
34
|
+
Field(description="Natural language description of the context for AI-generated content"),
|
|
35
35
|
] = None
|
|
36
36
|
macros: Annotated[
|
|
37
|
-
dict[str, str] | None, Field(description=
|
|
37
|
+
dict[str, str] | None, Field(description="Macro values to apply for this preview")
|
|
38
38
|
] = None
|
|
39
|
-
name: Annotated[str, Field(description=
|
|
39
|
+
name: Annotated[str, Field(description="Human-readable name for this preview variant")]
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
class CreativeAsset(AdCPBaseModel):
|
|
43
43
|
model_config = ConfigDict(
|
|
44
|
-
extra=
|
|
44
|
+
extra="allow",
|
|
45
45
|
)
|
|
46
46
|
approved: Annotated[
|
|
47
47
|
bool | None,
|
|
48
48
|
Field(
|
|
49
|
-
description=
|
|
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
50
|
),
|
|
51
51
|
] = None
|
|
52
52
|
assets: Annotated[
|
|
@@ -64,22 +64,22 @@ class CreativeAsset(AdCPBaseModel):
|
|
|
64
64
|
| promoted_offerings.PromotedOfferings
|
|
65
65
|
| url_asset.UrlAsset,
|
|
66
66
|
],
|
|
67
|
-
Field(description=
|
|
67
|
+
Field(description="Assets required by the format, keyed by asset_role"),
|
|
68
68
|
]
|
|
69
|
-
creative_id: Annotated[str, Field(description=
|
|
69
|
+
creative_id: Annotated[str, Field(description="Unique identifier for the creative")]
|
|
70
70
|
format_id: Annotated[
|
|
71
71
|
format_id_1.FormatId,
|
|
72
72
|
Field(
|
|
73
|
-
description=
|
|
73
|
+
description="Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats."
|
|
74
74
|
),
|
|
75
75
|
]
|
|
76
76
|
inputs: Annotated[
|
|
77
77
|
list[Input] | None,
|
|
78
78
|
Field(
|
|
79
|
-
description=
|
|
79
|
+
description="Preview contexts for generative formats - defines what scenarios to generate previews for"
|
|
80
80
|
),
|
|
81
81
|
] = None
|
|
82
|
-
name: Annotated[str, Field(description=
|
|
82
|
+
name: Annotated[str, Field(description="Human-readable creative name")]
|
|
83
83
|
placement_ids: Annotated[
|
|
84
84
|
list[str] | None,
|
|
85
85
|
Field(
|
|
@@ -88,12 +88,12 @@ class CreativeAsset(AdCPBaseModel):
|
|
|
88
88
|
),
|
|
89
89
|
] = None
|
|
90
90
|
tags: Annotated[
|
|
91
|
-
list[str] | None, Field(description=
|
|
91
|
+
list[str] | None, Field(description="User-defined tags for organization and searchability")
|
|
92
92
|
] = None
|
|
93
93
|
weight: Annotated[
|
|
94
94
|
float | None,
|
|
95
95
|
Field(
|
|
96
|
-
description=
|
|
96
|
+
description="Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.",
|
|
97
97
|
ge=0.0,
|
|
98
98
|
le=100.0,
|
|
99
99
|
),
|
|
@@ -12,9 +12,9 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class CreativeAssignment(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
creative_id: Annotated[str, Field(description=
|
|
17
|
+
creative_id: Annotated[str, Field(description="Unique identifier for the creative")]
|
|
18
18
|
placement_ids: Annotated[
|
|
19
19
|
list[str] | None,
|
|
20
20
|
Field(
|
|
@@ -23,5 +23,5 @@ class CreativeAssignment(AdCPBaseModel):
|
|
|
23
23
|
),
|
|
24
24
|
] = None
|
|
25
25
|
weight: Annotated[
|
|
26
|
-
float | None, Field(description=
|
|
26
|
+
float | None, Field(description="Delivery weight for this creative", ge=0.0, le=100.0)
|
|
27
27
|
] = None
|
|
@@ -14,73 +14,73 @@ from ..enums import creative_status
|
|
|
14
14
|
|
|
15
15
|
class CreativeFilters(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
assigned_to_package: Annotated[
|
|
20
|
-
str | None, Field(description=
|
|
20
|
+
str | None, Field(description="Filter creatives assigned to this specific package")
|
|
21
21
|
] = None
|
|
22
22
|
assigned_to_packages: Annotated[
|
|
23
|
-
list[str] | None, Field(description=
|
|
23
|
+
list[str] | None, Field(description="Filter creatives assigned to any of these packages")
|
|
24
24
|
] = None
|
|
25
25
|
buyer_refs: Annotated[
|
|
26
26
|
list[str] | None,
|
|
27
27
|
Field(
|
|
28
|
-
description=
|
|
28
|
+
description="Filter creatives assigned to media buys with any of these buyer references"
|
|
29
29
|
),
|
|
30
30
|
] = None
|
|
31
31
|
created_after: Annotated[
|
|
32
32
|
AwareDatetime | None,
|
|
33
|
-
Field(description=
|
|
33
|
+
Field(description="Filter creatives created after this date (ISO 8601)"),
|
|
34
34
|
] = None
|
|
35
35
|
created_before: Annotated[
|
|
36
36
|
AwareDatetime | None,
|
|
37
|
-
Field(description=
|
|
37
|
+
Field(description="Filter creatives created before this date (ISO 8601)"),
|
|
38
38
|
] = None
|
|
39
39
|
creative_ids: Annotated[
|
|
40
|
-
list[str] | None, Field(description=
|
|
40
|
+
list[str] | None, Field(description="Filter by specific creative IDs", max_length=100)
|
|
41
41
|
] = None
|
|
42
42
|
format: Annotated[
|
|
43
43
|
str | None,
|
|
44
|
-
Field(description=
|
|
44
|
+
Field(description="Filter by creative format type (e.g., video, audio, display)"),
|
|
45
45
|
] = None
|
|
46
46
|
formats: Annotated[
|
|
47
|
-
list[str] | None, Field(description=
|
|
47
|
+
list[str] | None, Field(description="Filter by multiple creative format types")
|
|
48
48
|
] = None
|
|
49
49
|
has_performance_data: Annotated[
|
|
50
|
-
bool | None, Field(description=
|
|
50
|
+
bool | None, Field(description="Filter creatives that have performance data when true")
|
|
51
51
|
] = None
|
|
52
52
|
media_buy_ids: Annotated[
|
|
53
|
-
list[str] | None, Field(description=
|
|
53
|
+
list[str] | None, Field(description="Filter creatives assigned to any of these media buys")
|
|
54
54
|
] = None
|
|
55
55
|
name_contains: Annotated[
|
|
56
56
|
str | None,
|
|
57
|
-
Field(description=
|
|
57
|
+
Field(description="Filter by creative names containing this text (case-insensitive)"),
|
|
58
58
|
] = None
|
|
59
59
|
status: Annotated[
|
|
60
60
|
creative_status.CreativeStatus | None,
|
|
61
|
-
Field(description=
|
|
61
|
+
Field(description="Filter by creative approval status"),
|
|
62
62
|
] = None
|
|
63
63
|
statuses: Annotated[
|
|
64
64
|
list[creative_status.CreativeStatus] | None,
|
|
65
|
-
Field(description=
|
|
65
|
+
Field(description="Filter by multiple creative statuses"),
|
|
66
66
|
] = None
|
|
67
67
|
tags: Annotated[
|
|
68
|
-
list[str] | None, Field(description=
|
|
68
|
+
list[str] | None, Field(description="Filter by creative tags (all tags must match)")
|
|
69
69
|
] = None
|
|
70
70
|
tags_any: Annotated[
|
|
71
|
-
list[str] | None, Field(description=
|
|
71
|
+
list[str] | None, Field(description="Filter by creative tags (any tag must match)")
|
|
72
72
|
] = None
|
|
73
73
|
unassigned: Annotated[
|
|
74
74
|
bool | None,
|
|
75
75
|
Field(
|
|
76
|
-
description=
|
|
76
|
+
description="Filter for unassigned creatives when true, assigned creatives when false"
|
|
77
77
|
),
|
|
78
78
|
] = None
|
|
79
79
|
updated_after: Annotated[
|
|
80
80
|
AwareDatetime | None,
|
|
81
|
-
Field(description=
|
|
81
|
+
Field(description="Filter creatives last updated after this date (ISO 8601)"),
|
|
82
82
|
] = None
|
|
83
83
|
updated_before: Annotated[
|
|
84
84
|
AwareDatetime | None,
|
|
85
|
-
Field(description=
|
|
85
|
+
Field(description="Filter creatives last updated before this date (ISO 8601)"),
|
|
86
86
|
] = None
|
|
@@ -29,7 +29,7 @@ from .assets import (
|
|
|
29
29
|
|
|
30
30
|
class CreativeManifest(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
assets: Annotated[
|
|
35
35
|
dict[
|
|
@@ -61,6 +61,6 @@ class CreativeManifest(AdCPBaseModel):
|
|
|
61
61
|
promoted_offering: Annotated[
|
|
62
62
|
str | None,
|
|
63
63
|
Field(
|
|
64
|
-
description=
|
|
64
|
+
description="Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted."
|
|
65
65
|
),
|
|
66
66
|
] = None
|
|
@@ -14,15 +14,15 @@ from ..enums import co_branding_requirement, landing_page_requirement
|
|
|
14
14
|
|
|
15
15
|
class CreativePolicy(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
co_branding: Annotated[
|
|
20
|
-
co_branding_requirement.CoBrandingRequirement, Field(description=
|
|
20
|
+
co_branding_requirement.CoBrandingRequirement, Field(description="Co-branding requirement")
|
|
21
21
|
]
|
|
22
22
|
landing_page: Annotated[
|
|
23
23
|
landing_page_requirement.LandingPageRequirement,
|
|
24
|
-
Field(description=
|
|
24
|
+
Field(description="Landing page requirements"),
|
|
25
25
|
]
|
|
26
26
|
templates_available: Annotated[
|
|
27
|
-
bool, Field(description=
|
|
27
|
+
bool, Field(description="Whether creative templates are provided")
|
|
28
28
|
]
|
|
@@ -12,15 +12,15 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class VenueBreakdownItem(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
impressions: Annotated[int, Field(description=
|
|
18
|
-
loop_plays: Annotated[int | None, Field(description=
|
|
17
|
+
impressions: Annotated[int, Field(description="Impressions delivered at this venue", ge=0)]
|
|
18
|
+
loop_plays: Annotated[int | None, Field(description="Loop plays at this venue", ge=0)] = None
|
|
19
19
|
screens_used: Annotated[
|
|
20
|
-
int | None, Field(description=
|
|
20
|
+
int | None, Field(description="Number of screens used at this venue", ge=0)
|
|
21
21
|
] = None
|
|
22
|
-
venue_id: Annotated[str, Field(description=
|
|
23
|
-
venue_name: Annotated[str | None, Field(description=
|
|
22
|
+
venue_id: Annotated[str, Field(description="Venue identifier")]
|
|
23
|
+
venue_name: Annotated[str | None, Field(description="Human-readable venue name")] = None
|
|
24
24
|
venue_type: Annotated[
|
|
25
25
|
str | None,
|
|
26
26
|
Field(description="Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')"),
|
|
@@ -29,83 +29,83 @@ class VenueBreakdownItem(AdCPBaseModel):
|
|
|
29
29
|
|
|
30
30
|
class DoohMetrics(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
calculation_notes: Annotated[
|
|
35
|
-
str | None, Field(description=
|
|
35
|
+
str | None, Field(description="Explanation of how DOOH impressions were calculated")
|
|
36
36
|
] = None
|
|
37
37
|
loop_plays: Annotated[
|
|
38
|
-
int | None, Field(description=
|
|
38
|
+
int | None, Field(description="Number of times ad played in rotation", ge=0)
|
|
39
39
|
] = None
|
|
40
40
|
screen_time_seconds: Annotated[
|
|
41
|
-
int | None, Field(description=
|
|
41
|
+
int | None, Field(description="Total display time in seconds", ge=0)
|
|
42
42
|
] = None
|
|
43
43
|
screens_used: Annotated[
|
|
44
|
-
int | None, Field(description=
|
|
44
|
+
int | None, Field(description="Number of unique screens displaying the ad", ge=0)
|
|
45
45
|
] = None
|
|
46
46
|
sov_achieved: Annotated[
|
|
47
47
|
float | None,
|
|
48
|
-
Field(description=
|
|
48
|
+
Field(description="Actual share of voice delivered (0.0 to 1.0)", ge=0.0, le=1.0),
|
|
49
49
|
] = None
|
|
50
50
|
venue_breakdown: Annotated[
|
|
51
|
-
list[VenueBreakdownItem] | None, Field(description=
|
|
51
|
+
list[VenueBreakdownItem] | None, Field(description="Per-venue performance breakdown")
|
|
52
52
|
] = None
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class QuartileData(AdCPBaseModel):
|
|
56
|
-
q1_views: Annotated[float | None, Field(description=
|
|
57
|
-
q2_views: Annotated[float | None, Field(description=
|
|
58
|
-
q3_views: Annotated[float | None, Field(description=
|
|
59
|
-
q4_views: Annotated[float | None, Field(description=
|
|
56
|
+
q1_views: Annotated[float | None, Field(description="25% completion views", ge=0.0)] = None
|
|
57
|
+
q2_views: Annotated[float | None, Field(description="50% completion views", ge=0.0)] = None
|
|
58
|
+
q3_views: Annotated[float | None, Field(description="75% completion views", ge=0.0)] = None
|
|
59
|
+
q4_views: Annotated[float | None, Field(description="100% completion views", ge=0.0)] = None
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
class DeliveryMetrics(AdCPBaseModel):
|
|
63
63
|
model_config = ConfigDict(
|
|
64
|
-
extra=
|
|
64
|
+
extra="allow",
|
|
65
65
|
)
|
|
66
|
-
clicks: Annotated[float | None, Field(description=
|
|
66
|
+
clicks: Annotated[float | None, Field(description="Total clicks", ge=0.0)] = None
|
|
67
67
|
completed_views: Annotated[
|
|
68
|
-
float | None, Field(description=
|
|
68
|
+
float | None, Field(description="100% completions (for CPCV)", ge=0.0)
|
|
69
69
|
] = None
|
|
70
70
|
completion_rate: Annotated[
|
|
71
71
|
float | None,
|
|
72
|
-
Field(description=
|
|
72
|
+
Field(description="Completion rate (completed_views/impressions)", ge=0.0, le=1.0),
|
|
73
73
|
] = None
|
|
74
74
|
conversions: Annotated[
|
|
75
75
|
float | None,
|
|
76
|
-
Field(description=
|
|
76
|
+
Field(description="Conversions (reserved for future CPA pricing support)", ge=0.0),
|
|
77
77
|
] = None
|
|
78
78
|
ctr: Annotated[
|
|
79
|
-
float | None, Field(description=
|
|
79
|
+
float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0)
|
|
80
80
|
] = None
|
|
81
81
|
dooh_metrics: Annotated[
|
|
82
82
|
DoohMetrics | None,
|
|
83
|
-
Field(description=
|
|
83
|
+
Field(description="DOOH-specific metrics (only included for DOOH campaigns)"),
|
|
84
84
|
] = None
|
|
85
85
|
frequency: Annotated[
|
|
86
86
|
float | None,
|
|
87
87
|
Field(
|
|
88
|
-
description=
|
|
88
|
+
description="Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)",
|
|
89
89
|
ge=0.0,
|
|
90
90
|
),
|
|
91
91
|
] = None
|
|
92
92
|
grps: Annotated[
|
|
93
|
-
float | None, Field(description=
|
|
93
|
+
float | None, Field(description="Gross Rating Points delivered (for CPP)", ge=0.0)
|
|
94
94
|
] = None
|
|
95
|
-
impressions: Annotated[float | None, Field(description=
|
|
95
|
+
impressions: Annotated[float | None, Field(description="Impressions delivered", ge=0.0)] = None
|
|
96
96
|
leads: Annotated[
|
|
97
97
|
float | None,
|
|
98
|
-
Field(description=
|
|
98
|
+
Field(description="Leads generated (reserved for future CPL pricing support)", ge=0.0),
|
|
99
99
|
] = None
|
|
100
100
|
quartile_data: Annotated[
|
|
101
|
-
QuartileData | None, Field(description=
|
|
101
|
+
QuartileData | None, Field(description="Video quartile completion data")
|
|
102
102
|
] = None
|
|
103
103
|
reach: Annotated[
|
|
104
104
|
float | None,
|
|
105
105
|
Field(
|
|
106
|
-
description=
|
|
106
|
+
description="Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.",
|
|
107
107
|
ge=0.0,
|
|
108
108
|
),
|
|
109
109
|
] = None
|
|
110
|
-
spend: Annotated[float | None, Field(description=
|
|
111
|
-
views: Annotated[float | None, Field(description=
|
|
110
|
+
spend: Annotated[float | None, Field(description="Amount spent", ge=0.0)] = None
|
|
111
|
+
views: Annotated[float | None, Field(description="Views at threshold (for CPV)", ge=0.0)] = None
|
|
@@ -14,65 +14,65 @@ from . import activation_key as activation_key_1
|
|
|
14
14
|
|
|
15
15
|
class Deployment1(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
|
-
account: Annotated[str | None, Field(description=
|
|
19
|
+
account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
|
|
20
20
|
activation_key: Annotated[
|
|
21
21
|
activation_key_1.ActivationKey | None,
|
|
22
22
|
Field(
|
|
23
|
-
description=
|
|
23
|
+
description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
|
|
24
24
|
),
|
|
25
25
|
] = None
|
|
26
26
|
deployed_at: Annotated[
|
|
27
27
|
AwareDatetime | None,
|
|
28
|
-
Field(description=
|
|
28
|
+
Field(description="Timestamp when activation completed (if is_live=true)"),
|
|
29
29
|
] = None
|
|
30
30
|
estimated_activation_duration_minutes: Annotated[
|
|
31
31
|
float | None,
|
|
32
32
|
Field(
|
|
33
|
-
description=
|
|
33
|
+
description="Estimated time to activate if not live, or to complete activation if in progress",
|
|
34
34
|
ge=0.0,
|
|
35
35
|
),
|
|
36
36
|
] = None
|
|
37
37
|
is_live: Annotated[
|
|
38
|
-
bool, Field(description=
|
|
38
|
+
bool, Field(description="Whether signal is currently active on this deployment")
|
|
39
39
|
]
|
|
40
|
-
platform: Annotated[str, Field(description=
|
|
40
|
+
platform: Annotated[str, Field(description="Platform identifier for DSPs")]
|
|
41
41
|
type: Annotated[
|
|
42
|
-
Literal[
|
|
43
|
-
Field(description=
|
|
42
|
+
Literal["platform"],
|
|
43
|
+
Field(description="Discriminator indicating this is a platform-based deployment"),
|
|
44
44
|
]
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class Deployment2(AdCPBaseModel):
|
|
48
48
|
model_config = ConfigDict(
|
|
49
|
-
extra=
|
|
49
|
+
extra="allow",
|
|
50
50
|
)
|
|
51
|
-
account: Annotated[str | None, Field(description=
|
|
51
|
+
account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
|
|
52
52
|
activation_key: Annotated[
|
|
53
53
|
activation_key_1.ActivationKey | None,
|
|
54
54
|
Field(
|
|
55
|
-
description=
|
|
55
|
+
description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
|
|
56
56
|
),
|
|
57
57
|
] = None
|
|
58
|
-
agent_url: Annotated[AnyUrl, Field(description=
|
|
58
|
+
agent_url: Annotated[AnyUrl, Field(description="URL identifying the deployment agent")]
|
|
59
59
|
deployed_at: Annotated[
|
|
60
60
|
AwareDatetime | None,
|
|
61
|
-
Field(description=
|
|
61
|
+
Field(description="Timestamp when activation completed (if is_live=true)"),
|
|
62
62
|
] = None
|
|
63
63
|
estimated_activation_duration_minutes: Annotated[
|
|
64
64
|
float | None,
|
|
65
65
|
Field(
|
|
66
|
-
description=
|
|
66
|
+
description="Estimated time to activate if not live, or to complete activation if in progress",
|
|
67
67
|
ge=0.0,
|
|
68
68
|
),
|
|
69
69
|
] = None
|
|
70
70
|
is_live: Annotated[
|
|
71
|
-
bool, Field(description=
|
|
71
|
+
bool, Field(description="Whether signal is currently active on this deployment")
|
|
72
72
|
]
|
|
73
73
|
type: Annotated[
|
|
74
|
-
Literal[
|
|
75
|
-
Field(description=
|
|
74
|
+
Literal["agent"],
|
|
75
|
+
Field(description="Discriminator indicating this is an agent URL-based deployment"),
|
|
76
76
|
]
|
|
77
77
|
|
|
78
78
|
|
|
@@ -80,7 +80,7 @@ class Deployment(RootModel[Deployment1 | Deployment2]):
|
|
|
80
80
|
root: Annotated[
|
|
81
81
|
Deployment1 | Deployment2,
|
|
82
82
|
Field(
|
|
83
|
-
description=
|
|
84
|
-
title=
|
|
83
|
+
description="A signal deployment to a specific deployment target with activation status and key",
|
|
84
|
+
title="Deployment",
|
|
85
85
|
),
|
|
86
86
|
]
|
|
@@ -12,34 +12,34 @@ from pydantic import AnyUrl, ConfigDict, Field, RootModel
|
|
|
12
12
|
|
|
13
13
|
class Destination1(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
account: Annotated[
|
|
18
|
-
str | None, Field(description=
|
|
18
|
+
str | None, Field(description="Optional account identifier on the platform")
|
|
19
19
|
] = None
|
|
20
20
|
platform: Annotated[
|
|
21
21
|
str,
|
|
22
22
|
Field(description="Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')"),
|
|
23
23
|
]
|
|
24
24
|
type: Annotated[
|
|
25
|
-
Literal[
|
|
26
|
-
Field(description=
|
|
25
|
+
Literal["platform"],
|
|
26
|
+
Field(description="Discriminator indicating this is a platform-based deployment"),
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Destination2(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra="allow",
|
|
33
33
|
)
|
|
34
34
|
account: Annotated[
|
|
35
|
-
str | None, Field(description=
|
|
35
|
+
str | None, Field(description="Optional account identifier on the agent")
|
|
36
36
|
] = None
|
|
37
37
|
agent_url: Annotated[
|
|
38
|
-
AnyUrl, Field(description=
|
|
38
|
+
AnyUrl, Field(description="URL identifying the deployment agent (for sales agents, etc.)")
|
|
39
39
|
]
|
|
40
40
|
type: Annotated[
|
|
41
|
-
Literal[
|
|
42
|
-
Field(description=
|
|
41
|
+
Literal["agent"],
|
|
42
|
+
Field(description="Discriminator indicating this is an agent URL-based deployment"),
|
|
43
43
|
]
|
|
44
44
|
|
|
45
45
|
|
|
@@ -47,7 +47,7 @@ class Destination(RootModel[Destination1 | Destination2]):
|
|
|
47
47
|
root: Annotated[
|
|
48
48
|
Destination1 | Destination2,
|
|
49
49
|
Field(
|
|
50
|
-
description=
|
|
51
|
-
title=
|
|
50
|
+
description="A deployment target where signals can be activated (DSP, sales agent, etc.)",
|
|
51
|
+
title="Destination",
|
|
52
52
|
),
|
|
53
53
|
]
|
|
@@ -12,18 +12,18 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class Error(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
code: Annotated[str, Field(description=
|
|
17
|
+
code: Annotated[str, Field(description="Error code for programmatic handling")]
|
|
18
18
|
details: Annotated[
|
|
19
|
-
dict[str, Any] | None, Field(description=
|
|
19
|
+
dict[str, Any] | None, Field(description="Additional task-specific error details")
|
|
20
20
|
] = None
|
|
21
21
|
field: Annotated[
|
|
22
22
|
str | None,
|
|
23
23
|
Field(description="Field path associated with the error (e.g., 'packages[0].targeting')"),
|
|
24
24
|
] = None
|
|
25
|
-
message: Annotated[str, Field(description=
|
|
25
|
+
message: Annotated[str, Field(description="Human-readable error message")]
|
|
26
26
|
retry_after: Annotated[
|
|
27
|
-
float | None, Field(description=
|
|
27
|
+
float | None, Field(description="Seconds to wait before retrying the operation", ge=0.0)
|
|
28
28
|
] = None
|
|
29
|
-
suggestion: Annotated[str | None, Field(description=
|
|
29
|
+
suggestion: Annotated[str | None, Field(description="Suggested fix for the error")] = None
|