adcp 2.16.0__py3-none-any.whl → 2.18.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 +22 -1
- adcp/__main__.py +72 -0
- adcp/types/_generated.py +7 -1
- adcp/types/generated_poc/adagents.py +14 -14
- adcp/types/generated_poc/core/activation_key.py +3 -3
- adcp/types/generated_poc/core/assets/audio_asset.py +2 -2
- adcp/types/generated_poc/core/assets/css_asset.py +2 -2
- adcp/types/generated_poc/core/assets/daast_asset.py +3 -3
- adcp/types/generated_poc/core/assets/html_asset.py +2 -2
- adcp/types/generated_poc/core/assets/image_asset.py +2 -2
- adcp/types/generated_poc/core/assets/javascript_asset.py +2 -2
- adcp/types/generated_poc/core/assets/text_asset.py +2 -2
- adcp/types/generated_poc/core/assets/url_asset.py +2 -2
- adcp/types/generated_poc/core/assets/vast_asset.py +3 -3
- adcp/types/generated_poc/core/assets/video_asset.py +2 -2
- adcp/types/generated_poc/core/assets/webhook_asset.py +2 -2
- adcp/types/generated_poc/core/brand_manifest.py +4 -4
- adcp/types/generated_poc/core/context.py +1 -2
- adcp/types/generated_poc/core/creative_asset.py +3 -3
- adcp/types/generated_poc/core/creative_assignment.py +2 -2
- adcp/types/generated_poc/core/creative_filters.py +2 -2
- adcp/types/generated_poc/core/creative_manifest.py +2 -2
- adcp/types/generated_poc/core/creative_policy.py +2 -2
- adcp/types/generated_poc/core/delivery_metrics.py +3 -3
- adcp/types/generated_poc/core/deployment.py +3 -3
- adcp/types/generated_poc/core/destination.py +3 -3
- adcp/types/generated_poc/core/error.py +5 -5
- adcp/types/generated_poc/core/ext.py +1 -2
- adcp/types/generated_poc/core/format.py +94 -7
- adcp/types/generated_poc/core/format_id.py +2 -2
- adcp/types/generated_poc/core/frequency_cap.py +2 -2
- adcp/types/generated_poc/core/measurement.py +2 -2
- adcp/types/generated_poc/core/media_buy.py +2 -2
- adcp/types/generated_poc/core/package.py +2 -2
- adcp/types/generated_poc/core/performance_feedback.py +3 -3
- adcp/types/generated_poc/core/placement.py +2 -2
- adcp/types/generated_poc/core/product.py +4 -4
- adcp/types/generated_poc/core/product_filters.py +4 -4
- adcp/types/generated_poc/core/promoted_offerings.py +4 -4
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +3 -3
- adcp/types/generated_poc/core/protocol_envelope.py +2 -2
- adcp/types/generated_poc/core/publisher_property_selector.py +4 -4
- adcp/types/generated_poc/core/reporting_capabilities.py +2 -2
- adcp/types/generated_poc/core/response.py +2 -2
- adcp/types/generated_poc/core/signal_filters.py +2 -2
- adcp/types/generated_poc/core/sub_asset.py +3 -3
- adcp/types/generated_poc/core/targeting.py +2 -2
- adcp/types/generated_poc/creative/list_creative_formats_request.py +2 -2
- adcp/types/generated_poc/creative/list_creative_formats_response.py +2 -2
- adcp/types/generated_poc/creative/preview_creative_request.py +7 -7
- adcp/types/generated_poc/creative/preview_creative_response.py +3 -3
- adcp/types/generated_poc/creative/preview_render.py +4 -4
- adcp/types/generated_poc/media_buy/build_creative_request.py +2 -2
- adcp/types/generated_poc/media_buy/build_creative_response.py +3 -3
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +2 -2
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +2 -2
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +47 -6
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +3 -3
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +2 -2
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +6 -6
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +2 -2
- 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 +2 -2
- adcp/types/generated_poc/media_buy/get_products_request.py +2 -2
- adcp/types/generated_poc/media_buy/get_products_response.py +2 -2
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +2 -2
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +2 -2
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +2 -2
- adcp/types/generated_poc/media_buy/list_creatives_request.py +4 -4
- adcp/types/generated_poc/media_buy/list_creatives_response.py +9 -9
- adcp/types/generated_poc/media_buy/package_request.py +2 -2
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +4 -4
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +3 -3
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +4 -4
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +2 -2
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +2 -2
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +3 -3
- adcp/types/generated_poc/pricing_options/cpc_option.py +2 -2
- adcp/types/generated_poc/pricing_options/cpcv_option.py +2 -2
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +2 -2
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +2 -2
- adcp/types/generated_poc/pricing_options/cpp_option.py +3 -3
- adcp/types/generated_poc/pricing_options/cpv_option.py +4 -4
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +3 -3
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +2 -2
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +2 -2
- adcp/types/generated_poc/protocols/adcp_extension.py +2 -2
- adcp/types/generated_poc/signals/activate_signal_request.py +2 -2
- adcp/types/generated_poc/signals/activate_signal_response.py +3 -3
- adcp/types/generated_poc/signals/get_signals_request.py +3 -3
- adcp/types/generated_poc/signals/get_signals_response.py +4 -4
- adcp/utils/__init__.py +24 -1
- adcp/utils/format_assets.py +224 -0
- adcp/utils/preview_cache.py +29 -7
- adcp/utils/response_parser.py +81 -6
- {adcp-2.16.0.dist-info → adcp-2.18.0.dist-info}/METADATA +1 -1
- {adcp-2.16.0.dist-info → adcp-2.18.0.dist-info}/RECORD +111 -110
- {adcp-2.16.0.dist-info → adcp-2.18.0.dist-info}/WHEEL +0 -0
- {adcp-2.16.0.dist-info → adcp-2.18.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.16.0.dist-info → adcp-2.18.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.16.0.dist-info → adcp-2.18.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/sub_asset.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ from pydantic import AnyUrl, ConfigDict, Field, RootModel
|
|
|
12
12
|
|
|
13
13
|
class SubAsset1(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra='
|
|
15
|
+
extra='allow',
|
|
16
16
|
)
|
|
17
17
|
asset_id: Annotated[
|
|
18
18
|
str, Field(description='Unique identifier for the asset within the creative')
|
|
@@ -32,7 +32,7 @@ class SubAsset1(AdCPBaseModel):
|
|
|
32
32
|
|
|
33
33
|
class SubAsset2(AdCPBaseModel):
|
|
34
34
|
model_config = ConfigDict(
|
|
35
|
-
extra='
|
|
35
|
+
extra='allow',
|
|
36
36
|
)
|
|
37
37
|
asset_id: Annotated[
|
|
38
38
|
str, Field(description='Unique identifier for the asset within the creative')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/targeting.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ class GeoCountryAnyOfItem(RootModel[str]):
|
|
|
18
18
|
|
|
19
19
|
class TargetingOverlay(AdCPBaseModel):
|
|
20
20
|
model_config = ConfigDict(
|
|
21
|
-
extra='
|
|
21
|
+
extra='allow',
|
|
22
22
|
)
|
|
23
23
|
axe_exclude_segment: Annotated[
|
|
24
24
|
str | None, Field(description='AXE segment ID to exclude from targeting')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: creative/list_creative_formats_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -34,7 +34,7 @@ class Type(Enum):
|
|
|
34
34
|
|
|
35
35
|
class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel):
|
|
36
36
|
model_config = ConfigDict(
|
|
37
|
-
extra='
|
|
37
|
+
extra='allow',
|
|
38
38
|
)
|
|
39
39
|
asset_types: Annotated[
|
|
40
40
|
list[AssetType] | None,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: creative/list_creative_formats_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -34,7 +34,7 @@ class CreativeAgent(AdCPBaseModel):
|
|
|
34
34
|
|
|
35
35
|
class ListCreativeFormatsResponseCreativeAgent(AdCPBaseModel):
|
|
36
36
|
model_config = ConfigDict(
|
|
37
|
-
extra='
|
|
37
|
+
extra='allow',
|
|
38
38
|
)
|
|
39
39
|
context: context_1.ContextObject | None = None
|
|
40
40
|
creative_agents: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: creative/preview_creative_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ from ..enums import preview_output_format
|
|
|
18
18
|
|
|
19
19
|
class Input(AdCPBaseModel):
|
|
20
20
|
model_config = ConfigDict(
|
|
21
|
-
extra='
|
|
21
|
+
extra='allow',
|
|
22
22
|
)
|
|
23
23
|
context_description: Annotated[
|
|
24
24
|
str | None,
|
|
@@ -29,7 +29,7 @@ class Input(AdCPBaseModel):
|
|
|
29
29
|
macros: Annotated[
|
|
30
30
|
dict[str, str] | None,
|
|
31
31
|
Field(
|
|
32
|
-
description="Macro values to use for this preview. Supports all universal macros from the format's supported_macros list. See docs/
|
|
32
|
+
description="Macro values to use for this preview. Supports all universal macros from the format's supported_macros list. See docs/creative/universal-macros.md for available macros."
|
|
33
33
|
),
|
|
34
34
|
] = None
|
|
35
35
|
name: Annotated[
|
|
@@ -42,7 +42,7 @@ class Input(AdCPBaseModel):
|
|
|
42
42
|
|
|
43
43
|
class Input2(AdCPBaseModel):
|
|
44
44
|
model_config = ConfigDict(
|
|
45
|
-
extra='
|
|
45
|
+
extra='allow',
|
|
46
46
|
)
|
|
47
47
|
context_description: Annotated[
|
|
48
48
|
str | None,
|
|
@@ -56,7 +56,7 @@ class Input2(AdCPBaseModel):
|
|
|
56
56
|
|
|
57
57
|
class PreviewCreativeRequest1(AdCPBaseModel):
|
|
58
58
|
model_config = ConfigDict(
|
|
59
|
-
extra='
|
|
59
|
+
extra='allow',
|
|
60
60
|
)
|
|
61
61
|
context: context_1.ContextObject | None = None
|
|
62
62
|
creative_manifest: Annotated[
|
|
@@ -92,7 +92,7 @@ class PreviewCreativeRequest1(AdCPBaseModel):
|
|
|
92
92
|
|
|
93
93
|
class Request(AdCPBaseModel):
|
|
94
94
|
model_config = ConfigDict(
|
|
95
|
-
extra='
|
|
95
|
+
extra='allow',
|
|
96
96
|
)
|
|
97
97
|
creative_manifest: Annotated[
|
|
98
98
|
creative_manifest_1.CreativeManifest,
|
|
@@ -118,7 +118,7 @@ class Request(AdCPBaseModel):
|
|
|
118
118
|
|
|
119
119
|
class PreviewCreativeRequest2(AdCPBaseModel):
|
|
120
120
|
model_config = ConfigDict(
|
|
121
|
-
extra='
|
|
121
|
+
extra='allow',
|
|
122
122
|
)
|
|
123
123
|
context: context_1.ContextObject | None = None
|
|
124
124
|
ext: ext_1.ExtensionObject | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: creative/preview_creative_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -60,7 +60,7 @@ class Preview(AdCPBaseModel):
|
|
|
60
60
|
|
|
61
61
|
class PreviewCreativeResponse1(AdCPBaseModel):
|
|
62
62
|
model_config = ConfigDict(
|
|
63
|
-
extra='
|
|
63
|
+
extra='allow',
|
|
64
64
|
)
|
|
65
65
|
context: context_1.ContextObject | None = None
|
|
66
66
|
expires_at: Annotated[
|
|
@@ -131,7 +131,7 @@ class Results1(AdCPBaseModel):
|
|
|
131
131
|
|
|
132
132
|
class PreviewCreativeResponse2(AdCPBaseModel):
|
|
133
133
|
model_config = ConfigDict(
|
|
134
|
-
extra='
|
|
134
|
+
extra='allow',
|
|
135
135
|
)
|
|
136
136
|
context: context_1.ContextObject | None = None
|
|
137
137
|
ext: ext_1.ExtensionObject | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: creative/preview_render.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -35,7 +35,7 @@ class Embedding(AdCPBaseModel):
|
|
|
35
35
|
|
|
36
36
|
class PreviewRender1(AdCPBaseModel):
|
|
37
37
|
model_config = ConfigDict(
|
|
38
|
-
extra='
|
|
38
|
+
extra='allow',
|
|
39
39
|
)
|
|
40
40
|
dimensions: Annotated[
|
|
41
41
|
Dimensions | None, Field(description='Dimensions for this rendered piece')
|
|
@@ -66,7 +66,7 @@ class PreviewRender1(AdCPBaseModel):
|
|
|
66
66
|
|
|
67
67
|
class PreviewRender2(AdCPBaseModel):
|
|
68
68
|
model_config = ConfigDict(
|
|
69
|
-
extra='
|
|
69
|
+
extra='allow',
|
|
70
70
|
)
|
|
71
71
|
dimensions: Annotated[
|
|
72
72
|
Dimensions | None, Field(description='Dimensions for this rendered piece')
|
|
@@ -96,7 +96,7 @@ class PreviewRender2(AdCPBaseModel):
|
|
|
96
96
|
|
|
97
97
|
class PreviewRender3(AdCPBaseModel):
|
|
98
98
|
model_config = ConfigDict(
|
|
99
|
-
extra='
|
|
99
|
+
extra='allow',
|
|
100
100
|
)
|
|
101
101
|
dimensions: Annotated[
|
|
102
102
|
Dimensions | None, Field(description='Dimensions for this rendered piece')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/build_creative_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ from ..core import format_id
|
|
|
17
17
|
|
|
18
18
|
class BuildCreativeRequest(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra='
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
context: context_1.ContextObject | None = None
|
|
23
23
|
creative_manifest: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/build_creative_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ from ..core import ext as ext_1
|
|
|
17
17
|
|
|
18
18
|
class BuildCreativeResponse2(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra='
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
context: context_1.ContextObject | None = None
|
|
23
23
|
errors: Annotated[
|
|
@@ -31,7 +31,7 @@ class BuildCreativeResponse2(AdCPBaseModel):
|
|
|
31
31
|
|
|
32
32
|
class BuildCreativeResponse1(AdCPBaseModel):
|
|
33
33
|
model_config = ConfigDict(
|
|
34
|
-
extra='
|
|
34
|
+
extra='allow',
|
|
35
35
|
)
|
|
36
36
|
context: context_1.ContextObject | None = None
|
|
37
37
|
creative_manifest: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/create_media_buy_async_response_input_required.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@ class Reason(Enum):
|
|
|
22
22
|
|
|
23
23
|
class CreateMediaBuyInputRequired(AdCPBaseModel):
|
|
24
24
|
model_config = ConfigDict(
|
|
25
|
-
extra='
|
|
25
|
+
extra='allow',
|
|
26
26
|
)
|
|
27
27
|
context: context_1.ContextObject | None = None
|
|
28
28
|
errors: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/create_media_buy_async_response_submitted.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@ from ..core import ext as ext_1
|
|
|
13
13
|
|
|
14
14
|
class CreateMediaBuySubmitted(AdCPBaseModel):
|
|
15
15
|
model_config = ConfigDict(
|
|
16
|
-
extra='
|
|
16
|
+
extra='allow',
|
|
17
17
|
)
|
|
18
18
|
context: context_1.ContextObject | None = None
|
|
19
19
|
ext: ext_1.ExtensionObject | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/create_media_buy_async_response_working.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,7 +15,7 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
class CreateMediaBuyWorking(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra='
|
|
18
|
+
extra='allow',
|
|
19
19
|
)
|
|
20
20
|
context: context_1.ContextObject | None = None
|
|
21
21
|
current_step: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/create_media_buy_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -8,16 +8,37 @@ from enum import Enum
|
|
|
8
8
|
from typing import Annotated
|
|
9
9
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
|
-
from pydantic import AwareDatetime, ConfigDict, Field
|
|
11
|
+
from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field
|
|
12
12
|
|
|
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
16
|
from ..core import start_timing
|
|
17
|
-
from ..
|
|
17
|
+
from ..enums import auth_scheme
|
|
18
18
|
from . import package_request
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
class Authentication(AdCPBaseModel):
|
|
22
|
+
model_config = ConfigDict(
|
|
23
|
+
extra='forbid',
|
|
24
|
+
)
|
|
25
|
+
credentials: Annotated[
|
|
26
|
+
str,
|
|
27
|
+
Field(
|
|
28
|
+
description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.',
|
|
29
|
+
min_length=32,
|
|
30
|
+
),
|
|
31
|
+
]
|
|
32
|
+
schemes: Annotated[
|
|
33
|
+
list[auth_scheme.AuthenticationScheme],
|
|
34
|
+
Field(
|
|
35
|
+
description="Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)",
|
|
36
|
+
max_length=1,
|
|
37
|
+
min_length=1,
|
|
38
|
+
),
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
|
|
21
42
|
class ReportingFrequency(Enum):
|
|
22
43
|
hourly = 'hourly'
|
|
23
44
|
daily = 'daily'
|
|
@@ -36,7 +57,14 @@ class RequestedMetric(Enum):
|
|
|
36
57
|
engagement_rate = 'engagement_rate'
|
|
37
58
|
|
|
38
59
|
|
|
39
|
-
class ReportingWebhook(
|
|
60
|
+
class ReportingWebhook(AdCPBaseModel):
|
|
61
|
+
model_config = ConfigDict(
|
|
62
|
+
extra='allow',
|
|
63
|
+
)
|
|
64
|
+
authentication: Annotated[
|
|
65
|
+
Authentication,
|
|
66
|
+
Field(description='Authentication configuration for webhook delivery (A2A-compatible)'),
|
|
67
|
+
]
|
|
40
68
|
reporting_frequency: Annotated[
|
|
41
69
|
ReportingFrequency,
|
|
42
70
|
Field(
|
|
@@ -49,11 +77,19 @@ class ReportingWebhook(PushNotificationConfig):
|
|
|
49
77
|
description="Optional list of metrics to include in webhook notifications. If omitted, all available metrics are included. Must be subset of product's available_metrics."
|
|
50
78
|
),
|
|
51
79
|
] = None
|
|
80
|
+
token: Annotated[
|
|
81
|
+
str | None,
|
|
82
|
+
Field(
|
|
83
|
+
description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.',
|
|
84
|
+
min_length=16,
|
|
85
|
+
),
|
|
86
|
+
] = None
|
|
87
|
+
url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for reporting notifications')]
|
|
52
88
|
|
|
53
89
|
|
|
54
90
|
class CreateMediaBuyRequest(AdCPBaseModel):
|
|
55
91
|
model_config = ConfigDict(
|
|
56
|
-
extra='
|
|
92
|
+
extra='allow',
|
|
57
93
|
)
|
|
58
94
|
brand_manifest: Annotated[
|
|
59
95
|
brand_manifest_ref.BrandManifestReference,
|
|
@@ -71,5 +107,10 @@ class CreateMediaBuyRequest(AdCPBaseModel):
|
|
|
71
107
|
list[package_request.PackageRequest], Field(description='Array of package configurations')
|
|
72
108
|
]
|
|
73
109
|
po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None
|
|
74
|
-
reporting_webhook:
|
|
110
|
+
reporting_webhook: Annotated[
|
|
111
|
+
ReportingWebhook | None,
|
|
112
|
+
Field(
|
|
113
|
+
description='Optional webhook configuration for automated reporting delivery. Combines push_notification_config structure with reporting-specific fields.'
|
|
114
|
+
),
|
|
115
|
+
] = None
|
|
75
116
|
start_time: start_timing.StartTiming
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/create_media_buy_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ from ..core import package
|
|
|
17
17
|
|
|
18
18
|
class CreateMediaBuyResponse2(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra='
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
context: context_1.ContextObject | None = None
|
|
23
23
|
errors: Annotated[
|
|
@@ -29,7 +29,7 @@ class CreateMediaBuyResponse2(AdCPBaseModel):
|
|
|
29
29
|
|
|
30
30
|
class CreateMediaBuyResponse1(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra='
|
|
32
|
+
extra='allow',
|
|
33
33
|
)
|
|
34
34
|
buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")]
|
|
35
35
|
context: context_1.ContextObject | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_media_buy_delivery_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ from ..enums import media_buy_status
|
|
|
16
16
|
|
|
17
17
|
class GetMediaBuyDeliveryRequest(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra='
|
|
19
|
+
extra='allow',
|
|
20
20
|
)
|
|
21
21
|
buyer_refs: Annotated[
|
|
22
22
|
list[str] | None, Field(description='Array of buyer reference IDs to get delivery data for')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_media_buy_delivery_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -19,7 +19,7 @@ from ..enums import pricing_model as pricing_model_1
|
|
|
19
19
|
|
|
20
20
|
class AggregatedTotals(AdCPBaseModel):
|
|
21
21
|
model_config = ConfigDict(
|
|
22
|
-
extra='
|
|
22
|
+
extra='allow',
|
|
23
23
|
)
|
|
24
24
|
clicks: Annotated[
|
|
25
25
|
float | None,
|
|
@@ -48,7 +48,7 @@ class DeliveryStatus(Enum):
|
|
|
48
48
|
|
|
49
49
|
class DailyBreakdownItem(AdCPBaseModel):
|
|
50
50
|
model_config = ConfigDict(
|
|
51
|
-
extra='
|
|
51
|
+
extra='allow',
|
|
52
52
|
)
|
|
53
53
|
date: Annotated[str, Field(description='Date (YYYY-MM-DD)', pattern='^\\d{4}-\\d{2}-\\d{2}$')]
|
|
54
54
|
impressions: Annotated[float, Field(description='Daily impressions', ge=0.0)]
|
|
@@ -84,7 +84,7 @@ class NotificationType(Enum):
|
|
|
84
84
|
|
|
85
85
|
class ReportingPeriod(AdCPBaseModel):
|
|
86
86
|
model_config = ConfigDict(
|
|
87
|
-
extra='
|
|
87
|
+
extra='allow',
|
|
88
88
|
)
|
|
89
89
|
end: Annotated[
|
|
90
90
|
AwareDatetime,
|
|
@@ -139,7 +139,7 @@ class ByPackageItem(DeliveryMetrics):
|
|
|
139
139
|
|
|
140
140
|
class MediaBuyDelivery(AdCPBaseModel):
|
|
141
141
|
model_config = ConfigDict(
|
|
142
|
-
extra='
|
|
142
|
+
extra='allow',
|
|
143
143
|
)
|
|
144
144
|
buyer_ref: Annotated[
|
|
145
145
|
str | None, Field(description="Buyer's reference identifier for this media buy")
|
|
@@ -176,7 +176,7 @@ class MediaBuyDelivery(AdCPBaseModel):
|
|
|
176
176
|
|
|
177
177
|
class GetMediaBuyDeliveryResponse(AdCPBaseModel):
|
|
178
178
|
model_config = ConfigDict(
|
|
179
|
-
extra='
|
|
179
|
+
extra='allow',
|
|
180
180
|
)
|
|
181
181
|
aggregated_totals: Annotated[
|
|
182
182
|
AggregatedTotals | None,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_async_response_input_required.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@ class Reason(Enum):
|
|
|
22
22
|
|
|
23
23
|
class GetProductsInputRequired(AdCPBaseModel):
|
|
24
24
|
model_config = ConfigDict(
|
|
25
|
-
extra='
|
|
25
|
+
extra='allow',
|
|
26
26
|
)
|
|
27
27
|
context: context_1.ContextObject | None = None
|
|
28
28
|
ext: ext_1.ExtensionObject | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_async_response_submitted.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,7 +15,7 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
class GetProductsSubmitted(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra='
|
|
18
|
+
extra='allow',
|
|
19
19
|
)
|
|
20
20
|
context: context_1.ContextObject | None = None
|
|
21
21
|
estimated_completion: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_async_response_working.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -15,7 +15,7 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
class GetProductsWorking(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra='
|
|
18
|
+
extra='allow',
|
|
19
19
|
)
|
|
20
20
|
context: context_1.ContextObject | None = None
|
|
21
21
|
current_step: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ from ..core import product_filters
|
|
|
17
17
|
|
|
18
18
|
class GetProductsRequest(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra='
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
brand_manifest: Annotated[
|
|
23
23
|
brand_manifest_ref.BrandManifestReference | None,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/get_products_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ from ..core import product
|
|
|
17
17
|
|
|
18
18
|
class GetProductsResponse(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra='
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
context: context_1.ContextObject | None = None
|
|
23
23
|
errors: Annotated[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_authorized_properties_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ class PublisherDomain(RootModel[str]):
|
|
|
25
25
|
|
|
26
26
|
class ListAuthorizedPropertiesRequest(AdCPBaseModel):
|
|
27
27
|
model_config = ConfigDict(
|
|
28
|
-
extra='
|
|
28
|
+
extra='allow',
|
|
29
29
|
)
|
|
30
30
|
context: context_1.ContextObject | None = None
|
|
31
31
|
ext: ext_1.ExtensionObject | None = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_authorized_properties_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -31,7 +31,7 @@ class PublisherDomain(RootModel[str]):
|
|
|
31
31
|
|
|
32
32
|
class ListAuthorizedPropertiesResponse(AdCPBaseModel):
|
|
33
33
|
model_config = ConfigDict(
|
|
34
|
-
extra='
|
|
34
|
+
extra='allow',
|
|
35
35
|
)
|
|
36
36
|
advertising_policies: Annotated[
|
|
37
37
|
str | None,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_creative_formats_request.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ from ..enums import asset_content_type, format_category
|
|
|
17
17
|
|
|
18
18
|
class ListCreativeFormatsRequest(AdCPBaseModel):
|
|
19
19
|
model_config = ConfigDict(
|
|
20
|
-
extra='
|
|
20
|
+
extra='allow',
|
|
21
21
|
)
|
|
22
22
|
asset_types: Annotated[
|
|
23
23
|
list[asset_content_type.AssetContentType] | None,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: media_buy/list_creative_formats_response.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-08T19:25:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -34,7 +34,7 @@ class CreativeAgent(AdCPBaseModel):
|
|
|
34
34
|
|
|
35
35
|
class ListCreativeFormatsResponse(AdCPBaseModel):
|
|
36
36
|
model_config = ConfigDict(
|
|
37
|
-
extra='
|
|
37
|
+
extra='allow',
|
|
38
38
|
)
|
|
39
39
|
context: context_1.ContextObject | None = None
|
|
40
40
|
creative_agents: Annotated[
|