adcp 2.2.0__py3-none-any.whl → 2.4.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 +5 -1
- adcp/adagents.py +122 -0
- adcp/types/generated.py +36 -531
- adcp/types/generated_poc/__init__.py +1 -1
- adcp/types/generated_poc/activate_signal_request.py +5 -5
- adcp/types/generated_poc/activate_signal_response.py +9 -9
- adcp/types/generated_poc/activation_key.py +8 -8
- adcp/types/generated_poc/adagents.py +46 -46
- adcp/types/generated_poc/asset_type.py +19 -19
- adcp/types/generated_poc/audio_asset.py +6 -6
- adcp/types/generated_poc/brand_manifest.py +73 -73
- adcp/types/generated_poc/build_creative_request.py +6 -6
- adcp/types/generated_poc/build_creative_response.py +9 -9
- adcp/types/generated_poc/channels.py +10 -10
- adcp/types/generated_poc/cpc_option.py +12 -8
- adcp/types/generated_poc/cpcv_option.py +12 -8
- adcp/types/generated_poc/cpm_auction_option.py +17 -13
- adcp/types/generated_poc/cpm_fixed_option.py +12 -8
- adcp/types/generated_poc/cpp_option.py +17 -13
- adcp/types/generated_poc/cpv_option.py +16 -12
- adcp/types/generated_poc/create_media_buy_request.py +29 -29
- adcp/types/generated_poc/create_media_buy_response.py +11 -11
- adcp/types/generated_poc/creative_asset.py +13 -13
- adcp/types/generated_poc/creative_assignment.py +4 -4
- adcp/types/generated_poc/creative_manifest.py +4 -4
- adcp/types/generated_poc/creative_policy.py +11 -11
- adcp/types/generated_poc/creative_status.py +5 -5
- adcp/types/generated_poc/css_asset.py +3 -3
- adcp/types/generated_poc/daast_asset.py +30 -30
- adcp/types/generated_poc/delivery_metrics.py +33 -33
- adcp/types/generated_poc/delivery_type.py +3 -3
- adcp/types/generated_poc/deployment.py +21 -21
- adcp/types/generated_poc/destination.py +10 -10
- adcp/types/generated_poc/error.py +7 -7
- adcp/types/generated_poc/flat_rate_option.py +16 -16
- adcp/types/generated_poc/format.py +70 -70
- adcp/types/generated_poc/format_id.py +3 -3
- adcp/types/generated_poc/frequency_cap.py +3 -3
- adcp/types/generated_poc/frequency_cap_scope.py +4 -4
- adcp/types/generated_poc/get_media_buy_delivery_request.py +21 -21
- adcp/types/generated_poc/get_media_buy_delivery_response.py +46 -46
- adcp/types/generated_poc/get_products_request.py +23 -23
- adcp/types/generated_poc/get_products_response.py +5 -5
- adcp/types/generated_poc/get_signals_request.py +19 -19
- adcp/types/generated_poc/get_signals_response.py +20 -20
- adcp/types/generated_poc/html_asset.py +3 -3
- adcp/types/generated_poc/identifier_types.py +20 -20
- adcp/types/generated_poc/image_asset.py +7 -7
- adcp/types/generated_poc/javascript_asset.py +7 -7
- adcp/types/generated_poc/list_authorized_properties_request.py +5 -5
- adcp/types/generated_poc/list_authorized_properties_response.py +9 -9
- adcp/types/generated_poc/list_creative_formats_request.py +22 -22
- adcp/types/generated_poc/list_creative_formats_response.py +11 -11
- adcp/types/generated_poc/list_creatives_request.py +51 -51
- adcp/types/generated_poc/list_creatives_response.py +61 -61
- adcp/types/generated_poc/markdown_asset.py +7 -7
- adcp/types/generated_poc/measurement.py +9 -9
- adcp/types/generated_poc/media_buy.py +8 -8
- adcp/types/generated_poc/media_buy_status.py +5 -5
- adcp/types/generated_poc/pacing.py +4 -4
- adcp/types/generated_poc/package.py +8 -8
- adcp/types/generated_poc/package_request.py +7 -7
- adcp/types/generated_poc/package_status.py +5 -5
- adcp/types/generated_poc/performance_feedback.py +31 -31
- adcp/types/generated_poc/placement.py +4 -4
- adcp/types/generated_poc/preview_creative_request.py +28 -28
- adcp/types/generated_poc/preview_creative_response.py +31 -31
- adcp/types/generated_poc/preview_render.py +36 -28
- adcp/types/generated_poc/pricing_model.py +8 -8
- adcp/types/generated_poc/product.py +32 -31
- adcp/types/generated_poc/promoted_offerings.py +29 -29
- adcp/types/generated_poc/promoted_products.py +3 -3
- adcp/types/generated_poc/property.py +18 -18
- adcp/types/generated_poc/protocol_envelope.py +9 -9
- adcp/types/generated_poc/provide_performance_feedback_request.py +24 -24
- adcp/types/generated_poc/provide_performance_feedback_response.py +9 -9
- adcp/types/generated_poc/publisher_identifier_types.py +6 -6
- adcp/types/generated_poc/push_notification_config.py +9 -9
- adcp/types/generated_poc/reporting_capabilities.py +21 -21
- adcp/types/generated_poc/response.py +5 -5
- adcp/types/generated_poc/standard_format_ids.py +36 -36
- adcp/types/generated_poc/sub_asset.py +13 -13
- adcp/types/generated_poc/sync_creatives_request.py +11 -11
- adcp/types/generated_poc/sync_creatives_response.py +23 -23
- adcp/types/generated_poc/targeting.py +9 -9
- adcp/types/generated_poc/task_status.py +10 -10
- adcp/types/generated_poc/task_type.py +6 -6
- adcp/types/generated_poc/tasks_get_request.py +5 -5
- adcp/types/generated_poc/tasks_get_response.py +35 -35
- adcp/types/generated_poc/tasks_list_request.py +36 -36
- adcp/types/generated_poc/tasks_list_response.py +35 -35
- adcp/types/generated_poc/text_asset.py +3 -3
- adcp/types/generated_poc/update_media_buy_request.py +27 -27
- adcp/types/generated_poc/update_media_buy_response.py +11 -11
- adcp/types/generated_poc/url_asset.py +7 -7
- adcp/types/generated_poc/vast_asset.py +38 -38
- adcp/types/generated_poc/vcpm_auction_option.py +17 -13
- adcp/types/generated_poc/vcpm_fixed_option.py +12 -8
- adcp/types/generated_poc/video_asset.py +8 -8
- adcp/types/generated_poc/webhook_asset.py +19 -19
- adcp/types/generated_poc/webhook_payload.py +18 -18
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/METADATA +38 -2
- adcp-2.4.0.dist-info/RECORD +132 -0
- adcp-2.2.0.dist-info/RECORD +0 -132
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/WHEEL +0 -0
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.2.0.dist-info → adcp-2.4.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: update-media-buy-request.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -16,27 +16,27 @@ from . import targeting
|
|
|
16
16
|
|
|
17
17
|
class Packages(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra='forbid',
|
|
20
20
|
)
|
|
21
|
-
active: Annotated[bool | None, Field(description=
|
|
21
|
+
active: Annotated[bool | None, Field(description='Pause/resume specific package')] = None
|
|
22
22
|
bid_price: Annotated[
|
|
23
23
|
float | None,
|
|
24
24
|
Field(
|
|
25
|
-
description=
|
|
25
|
+
description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)',
|
|
26
26
|
ge=0.0,
|
|
27
27
|
),
|
|
28
28
|
] = None
|
|
29
29
|
budget: Annotated[
|
|
30
30
|
float | None,
|
|
31
31
|
Field(
|
|
32
|
-
description=
|
|
32
|
+
description='Updated budget allocation for this package in the currency specified by the pricing option',
|
|
33
33
|
ge=0.0,
|
|
34
34
|
),
|
|
35
35
|
] = None
|
|
36
36
|
buyer_ref: Annotated[
|
|
37
37
|
str | None, Field(description="Buyer's reference for the package to update")
|
|
38
38
|
] = None
|
|
39
|
-
creative_ids: Annotated[list[str] | None, Field(description=
|
|
39
|
+
creative_ids: Annotated[list[str] | None, Field(description='Update creative assignments')] = (
|
|
40
40
|
None
|
|
41
41
|
)
|
|
42
42
|
pacing: pacing_1.Pacing | None = None
|
|
@@ -46,25 +46,25 @@ class Packages(AdCPBaseModel):
|
|
|
46
46
|
|
|
47
47
|
class Packages1(AdCPBaseModel):
|
|
48
48
|
model_config = ConfigDict(
|
|
49
|
-
extra=
|
|
49
|
+
extra='forbid',
|
|
50
50
|
)
|
|
51
|
-
active: Annotated[bool | None, Field(description=
|
|
51
|
+
active: Annotated[bool | None, Field(description='Pause/resume specific package')] = None
|
|
52
52
|
bid_price: Annotated[
|
|
53
53
|
float | None,
|
|
54
54
|
Field(
|
|
55
|
-
description=
|
|
55
|
+
description='Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)',
|
|
56
56
|
ge=0.0,
|
|
57
57
|
),
|
|
58
58
|
] = None
|
|
59
59
|
budget: Annotated[
|
|
60
60
|
float | None,
|
|
61
61
|
Field(
|
|
62
|
-
description=
|
|
62
|
+
description='Updated budget allocation for this package in the currency specified by the pricing option',
|
|
63
63
|
ge=0.0,
|
|
64
64
|
),
|
|
65
65
|
] = None
|
|
66
66
|
buyer_ref: Annotated[str, Field(description="Buyer's reference for the package to update")]
|
|
67
|
-
creative_ids: Annotated[list[str] | None, Field(description=
|
|
67
|
+
creative_ids: Annotated[list[str] | None, Field(description='Update creative assignments')] = (
|
|
68
68
|
None
|
|
69
69
|
)
|
|
70
70
|
pacing: pacing_1.Pacing | None = None
|
|
@@ -76,35 +76,35 @@ class Packages1(AdCPBaseModel):
|
|
|
76
76
|
|
|
77
77
|
class UpdateMediaBuyRequest1(AdCPBaseModel):
|
|
78
78
|
model_config = ConfigDict(
|
|
79
|
-
extra=
|
|
79
|
+
extra='forbid',
|
|
80
80
|
)
|
|
81
|
-
active: Annotated[bool | None, Field(description=
|
|
81
|
+
active: Annotated[bool | None, Field(description='Pause/resume the entire media buy')] = None
|
|
82
82
|
buyer_ref: Annotated[
|
|
83
83
|
str | None, Field(description="Buyer's reference for the media buy to update")
|
|
84
84
|
] = None
|
|
85
85
|
context: Annotated[
|
|
86
86
|
dict[str, Any] | None,
|
|
87
87
|
Field(
|
|
88
|
-
description=
|
|
88
|
+
description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
|
|
89
89
|
),
|
|
90
90
|
] = None
|
|
91
91
|
end_time: Annotated[
|
|
92
|
-
AwareDatetime | None, Field(description=
|
|
92
|
+
AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
|
|
93
93
|
] = None
|
|
94
94
|
media_buy_id: Annotated[str, Field(description="Publisher's ID of the media buy to update")]
|
|
95
95
|
packages: Annotated[
|
|
96
|
-
list[Packages | Packages1] | None, Field(description=
|
|
96
|
+
list[Packages | Packages1] | None, Field(description='Package-specific updates')
|
|
97
97
|
] = None
|
|
98
98
|
push_notification_config: Annotated[
|
|
99
99
|
push_notification_config_1.PushNotificationConfig | None,
|
|
100
100
|
Field(
|
|
101
|
-
description=
|
|
101
|
+
description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time.'
|
|
102
102
|
),
|
|
103
103
|
] = None
|
|
104
104
|
start_time: Annotated[
|
|
105
105
|
str | AwareDatetime | None,
|
|
106
106
|
Field(
|
|
107
|
-
description="Campaign start timing: 'asap' or ISO 8601 date-time", title=
|
|
107
|
+
description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
|
|
108
108
|
),
|
|
109
109
|
] = None
|
|
110
110
|
|
|
@@ -117,35 +117,35 @@ Packages3 = Packages1
|
|
|
117
117
|
|
|
118
118
|
class UpdateMediaBuyRequest2(AdCPBaseModel):
|
|
119
119
|
model_config = ConfigDict(
|
|
120
|
-
extra=
|
|
120
|
+
extra='forbid',
|
|
121
121
|
)
|
|
122
|
-
active: Annotated[bool | None, Field(description=
|
|
122
|
+
active: Annotated[bool | None, Field(description='Pause/resume the entire media buy')] = None
|
|
123
123
|
buyer_ref: Annotated[str, Field(description="Buyer's reference for the media buy to update")]
|
|
124
124
|
context: Annotated[
|
|
125
125
|
dict[str, Any] | None,
|
|
126
126
|
Field(
|
|
127
|
-
description=
|
|
127
|
+
description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
|
|
128
128
|
),
|
|
129
129
|
] = None
|
|
130
130
|
end_time: Annotated[
|
|
131
|
-
AwareDatetime | None, Field(description=
|
|
131
|
+
AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
|
|
132
132
|
] = None
|
|
133
133
|
media_buy_id: Annotated[
|
|
134
134
|
str | None, Field(description="Publisher's ID of the media buy to update")
|
|
135
135
|
] = None
|
|
136
136
|
packages: Annotated[
|
|
137
|
-
list[Packages2 | Packages3] | None, Field(description=
|
|
137
|
+
list[Packages2 | Packages3] | None, Field(description='Package-specific updates')
|
|
138
138
|
] = None
|
|
139
139
|
push_notification_config: Annotated[
|
|
140
140
|
push_notification_config_1.PushNotificationConfig | None,
|
|
141
141
|
Field(
|
|
142
|
-
description=
|
|
142
|
+
description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time.'
|
|
143
143
|
),
|
|
144
144
|
] = None
|
|
145
145
|
start_time: Annotated[
|
|
146
146
|
str | AwareDatetime | None,
|
|
147
147
|
Field(
|
|
148
|
-
description="Campaign start timing: 'asap' or ISO 8601 date-time", title=
|
|
148
|
+
description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
|
|
149
149
|
),
|
|
150
150
|
] = None
|
|
151
151
|
|
|
@@ -154,7 +154,7 @@ class UpdateMediaBuyRequest(RootModel[UpdateMediaBuyRequest1 | UpdateMediaBuyReq
|
|
|
154
154
|
root: Annotated[
|
|
155
155
|
UpdateMediaBuyRequest1 | UpdateMediaBuyRequest2,
|
|
156
156
|
Field(
|
|
157
|
-
description=
|
|
158
|
-
title=
|
|
157
|
+
description='Request parameters for updating campaign and package settings',
|
|
158
|
+
title='Update Media Buy Request',
|
|
159
159
|
),
|
|
160
160
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: update-media-buy-response.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ from . import error
|
|
|
14
14
|
|
|
15
15
|
class AffectedPackage(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra='forbid',
|
|
18
18
|
)
|
|
19
19
|
buyer_ref: Annotated[str, Field(description="Buyer's reference for the package")]
|
|
20
20
|
package_id: Annotated[str, Field(description="Publisher's package identifier")]
|
|
@@ -22,38 +22,38 @@ class AffectedPackage(AdCPBaseModel):
|
|
|
22
22
|
|
|
23
23
|
class UpdateMediaBuyResponse1(AdCPBaseModel):
|
|
24
24
|
model_config = ConfigDict(
|
|
25
|
-
extra=
|
|
25
|
+
extra='forbid',
|
|
26
26
|
)
|
|
27
27
|
affected_packages: Annotated[
|
|
28
|
-
list[AffectedPackage] | None, Field(description=
|
|
28
|
+
list[AffectedPackage] | None, Field(description='Array of packages that were modified')
|
|
29
29
|
] = None
|
|
30
30
|
buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for the media buy")]
|
|
31
31
|
context: Annotated[
|
|
32
32
|
dict[str, Any] | None,
|
|
33
33
|
Field(
|
|
34
|
-
description=
|
|
34
|
+
description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
|
|
35
35
|
),
|
|
36
36
|
] = None
|
|
37
37
|
implementation_date: Annotated[
|
|
38
38
|
AwareDatetime | None,
|
|
39
|
-
Field(description=
|
|
39
|
+
Field(description='ISO 8601 timestamp when changes take effect (null if pending approval)'),
|
|
40
40
|
] = None
|
|
41
41
|
media_buy_id: Annotated[str, Field(description="Publisher's identifier for the media buy")]
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
class UpdateMediaBuyResponse2(AdCPBaseModel):
|
|
45
45
|
model_config = ConfigDict(
|
|
46
|
-
extra=
|
|
46
|
+
extra='forbid',
|
|
47
47
|
)
|
|
48
48
|
context: Annotated[
|
|
49
49
|
dict[str, Any] | None,
|
|
50
50
|
Field(
|
|
51
|
-
description=
|
|
51
|
+
description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
|
|
52
52
|
),
|
|
53
53
|
] = None
|
|
54
54
|
errors: Annotated[
|
|
55
55
|
list[error.Error],
|
|
56
|
-
Field(description=
|
|
56
|
+
Field(description='Array of errors explaining why the operation failed', min_length=1),
|
|
57
57
|
]
|
|
58
58
|
|
|
59
59
|
|
|
@@ -61,7 +61,7 @@ class UpdateMediaBuyResponse(RootModel[UpdateMediaBuyResponse1 | UpdateMediaBuyR
|
|
|
61
61
|
root: Annotated[
|
|
62
62
|
UpdateMediaBuyResponse1 | UpdateMediaBuyResponse2,
|
|
63
63
|
Field(
|
|
64
|
-
description=
|
|
65
|
-
title=
|
|
64
|
+
description='Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.',
|
|
65
|
+
title='Update Media Buy Response',
|
|
66
66
|
),
|
|
67
67
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: url-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,19 +12,19 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class UrlType(Enum):
|
|
15
|
-
clickthrough =
|
|
16
|
-
tracker_pixel =
|
|
17
|
-
tracker_script =
|
|
15
|
+
clickthrough = 'clickthrough'
|
|
16
|
+
tracker_pixel = 'tracker_pixel'
|
|
17
|
+
tracker_script = 'tracker_script'
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class UrlAsset(AdCPBaseModel):
|
|
21
21
|
model_config = ConfigDict(
|
|
22
|
-
extra=
|
|
22
|
+
extra='forbid',
|
|
23
23
|
)
|
|
24
24
|
description: Annotated[
|
|
25
|
-
str | None, Field(description=
|
|
25
|
+
str | None, Field(description='Description of what this URL points to')
|
|
26
26
|
] = None
|
|
27
|
-
url: Annotated[AnyUrl, Field(description=
|
|
27
|
+
url: Annotated[AnyUrl, Field(description='URL reference')]
|
|
28
28
|
url_type: Annotated[
|
|
29
29
|
UrlType | None,
|
|
30
30
|
Field(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: vast-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,75 +12,75 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class TrackingEvent(Enum):
|
|
15
|
-
start =
|
|
16
|
-
firstQuartile =
|
|
17
|
-
midpoint =
|
|
18
|
-
thirdQuartile =
|
|
19
|
-
complete =
|
|
20
|
-
impression =
|
|
21
|
-
click =
|
|
22
|
-
pause =
|
|
23
|
-
resume =
|
|
24
|
-
skip =
|
|
25
|
-
mute =
|
|
26
|
-
unmute =
|
|
27
|
-
fullscreen =
|
|
28
|
-
exitFullscreen =
|
|
29
|
-
playerExpand =
|
|
30
|
-
playerCollapse =
|
|
15
|
+
start = 'start'
|
|
16
|
+
firstQuartile = 'firstQuartile'
|
|
17
|
+
midpoint = 'midpoint'
|
|
18
|
+
thirdQuartile = 'thirdQuartile'
|
|
19
|
+
complete = 'complete'
|
|
20
|
+
impression = 'impression'
|
|
21
|
+
click = 'click'
|
|
22
|
+
pause = 'pause'
|
|
23
|
+
resume = 'resume'
|
|
24
|
+
skip = 'skip'
|
|
25
|
+
mute = 'mute'
|
|
26
|
+
unmute = 'unmute'
|
|
27
|
+
fullscreen = 'fullscreen'
|
|
28
|
+
exitFullscreen = 'exitFullscreen'
|
|
29
|
+
playerExpand = 'playerExpand'
|
|
30
|
+
playerCollapse = 'playerCollapse'
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class VastVersion(Enum):
|
|
34
|
-
field_2_0 =
|
|
35
|
-
field_3_0 =
|
|
36
|
-
field_4_0 =
|
|
37
|
-
field_4_1 =
|
|
38
|
-
field_4_2 =
|
|
34
|
+
field_2_0 = '2.0'
|
|
35
|
+
field_3_0 = '3.0'
|
|
36
|
+
field_4_0 = '4.0'
|
|
37
|
+
field_4_1 = '4.1'
|
|
38
|
+
field_4_2 = '4.2'
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class VastAsset1(AdCPBaseModel):
|
|
42
42
|
model_config = ConfigDict(
|
|
43
|
-
extra=
|
|
43
|
+
extra='forbid',
|
|
44
44
|
)
|
|
45
45
|
delivery_type: Annotated[
|
|
46
|
-
Literal[
|
|
47
|
-
Field(description=
|
|
46
|
+
Literal['url'],
|
|
47
|
+
Field(description='Discriminator indicating VAST is delivered via URL endpoint'),
|
|
48
48
|
]
|
|
49
49
|
duration_ms: Annotated[
|
|
50
|
-
int | None, Field(description=
|
|
50
|
+
int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
|
|
51
51
|
] = None
|
|
52
52
|
tracking_events: Annotated[
|
|
53
|
-
list[TrackingEvent] | None, Field(description=
|
|
53
|
+
list[TrackingEvent] | None, Field(description='Tracking events supported by this VAST tag')
|
|
54
54
|
] = None
|
|
55
|
-
url: Annotated[AnyUrl, Field(description=
|
|
56
|
-
vast_version: Annotated[VastVersion | None, Field(description=
|
|
55
|
+
url: Annotated[AnyUrl, Field(description='URL endpoint that returns VAST XML')]
|
|
56
|
+
vast_version: Annotated[VastVersion | None, Field(description='VAST specification version')] = (
|
|
57
57
|
None
|
|
58
58
|
)
|
|
59
59
|
vpaid_enabled: Annotated[
|
|
60
60
|
bool | None,
|
|
61
|
-
Field(description=
|
|
61
|
+
Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
|
|
62
62
|
] = None
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
class VastAsset2(AdCPBaseModel):
|
|
66
66
|
model_config = ConfigDict(
|
|
67
|
-
extra=
|
|
67
|
+
extra='forbid',
|
|
68
68
|
)
|
|
69
|
-
content: Annotated[str, Field(description=
|
|
69
|
+
content: Annotated[str, Field(description='Inline VAST XML content')]
|
|
70
70
|
delivery_type: Annotated[
|
|
71
|
-
Literal[
|
|
72
|
-
Field(description=
|
|
71
|
+
Literal['inline'],
|
|
72
|
+
Field(description='Discriminator indicating VAST is delivered as inline XML content'),
|
|
73
73
|
]
|
|
74
74
|
duration_ms: Annotated[
|
|
75
|
-
int | None, Field(description=
|
|
75
|
+
int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
|
|
76
76
|
] = None
|
|
77
77
|
tracking_events: Annotated[
|
|
78
|
-
list[TrackingEvent] | None, Field(description=
|
|
78
|
+
list[TrackingEvent] | None, Field(description='Tracking events supported by this VAST tag')
|
|
79
79
|
] = None
|
|
80
|
-
vast_version: Annotated[VastVersion | None, Field(description=
|
|
80
|
+
vast_version: Annotated[VastVersion | None, Field(description='VAST specification version')] = (
|
|
81
81
|
None
|
|
82
82
|
)
|
|
83
83
|
vpaid_enabled: Annotated[
|
|
84
84
|
bool | None,
|
|
85
|
-
Field(description=
|
|
85
|
+
Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
|
|
86
86
|
] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: vcpm-auction-option.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -11,43 +11,47 @@ from pydantic import ConfigDict, Field
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class PriceGuidance(AdCPBaseModel):
|
|
14
|
-
floor: Annotated[float, Field(description=
|
|
14
|
+
floor: Annotated[float, Field(description='Minimum acceptable bid price', ge=0.0)]
|
|
15
15
|
p25: Annotated[
|
|
16
|
-
float | None, Field(description=
|
|
16
|
+
float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
|
|
17
17
|
] = None
|
|
18
|
-
p50: Annotated[float | None, Field(description=
|
|
18
|
+
p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
|
|
19
19
|
p75: Annotated[
|
|
20
|
-
float | None, Field(description=
|
|
20
|
+
float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
|
|
21
21
|
] = None
|
|
22
22
|
p90: Annotated[
|
|
23
|
-
float | None, Field(description=
|
|
23
|
+
float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
|
|
24
24
|
] = None
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class VcpmAuctionPricingOption(AdCPBaseModel):
|
|
28
28
|
model_config = ConfigDict(
|
|
29
|
-
extra=
|
|
29
|
+
extra='forbid',
|
|
30
30
|
)
|
|
31
31
|
currency: Annotated[
|
|
32
32
|
str,
|
|
33
33
|
Field(
|
|
34
|
-
description=
|
|
35
|
-
examples=[
|
|
36
|
-
pattern=
|
|
34
|
+
description='ISO 4217 currency code',
|
|
35
|
+
examples=['USD', 'EUR', 'GBP', 'JPY'],
|
|
36
|
+
pattern='^[A-Z]{3}$',
|
|
37
37
|
),
|
|
38
38
|
]
|
|
39
|
+
is_fixed: Annotated[
|
|
40
|
+
Literal[False],
|
|
41
|
+
Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
|
|
42
|
+
]
|
|
39
43
|
min_spend_per_package: Annotated[
|
|
40
44
|
float | None,
|
|
41
45
|
Field(
|
|
42
|
-
description=
|
|
46
|
+
description='Minimum spend requirement per package using this pricing option, in the specified currency',
|
|
43
47
|
ge=0.0,
|
|
44
48
|
),
|
|
45
49
|
] = None
|
|
46
50
|
price_guidance: Annotated[
|
|
47
|
-
PriceGuidance, Field(description=
|
|
51
|
+
PriceGuidance, Field(description='Statistical guidance for auction pricing')
|
|
48
52
|
]
|
|
49
53
|
pricing_model: Annotated[
|
|
50
|
-
Literal[
|
|
54
|
+
Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
|
|
51
55
|
]
|
|
52
56
|
pricing_option_id: Annotated[
|
|
53
57
|
str,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: vcpm-fixed-option.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,25 +12,29 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class VcpmFixedRatePricingOption(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
17
|
currency: Annotated[
|
|
18
18
|
str,
|
|
19
19
|
Field(
|
|
20
|
-
description=
|
|
21
|
-
examples=[
|
|
22
|
-
pattern=
|
|
20
|
+
description='ISO 4217 currency code',
|
|
21
|
+
examples=['USD', 'EUR', 'GBP', 'JPY'],
|
|
22
|
+
pattern='^[A-Z]{3}$',
|
|
23
23
|
),
|
|
24
24
|
]
|
|
25
|
+
is_fixed: Annotated[
|
|
26
|
+
Literal[True],
|
|
27
|
+
Field(description='Whether this is a fixed rate (true) or auction-based (false)'),
|
|
28
|
+
]
|
|
25
29
|
min_spend_per_package: Annotated[
|
|
26
30
|
float | None,
|
|
27
31
|
Field(
|
|
28
|
-
description=
|
|
32
|
+
description='Minimum spend requirement per package using this pricing option, in the specified currency',
|
|
29
33
|
ge=0.0,
|
|
30
34
|
),
|
|
31
35
|
] = None
|
|
32
36
|
pricing_model: Annotated[
|
|
33
|
-
Literal[
|
|
37
|
+
Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
|
|
34
38
|
]
|
|
35
39
|
pricing_option_id: Annotated[
|
|
36
40
|
str,
|
|
@@ -39,5 +43,5 @@ class VcpmFixedRatePricingOption(AdCPBaseModel):
|
|
|
39
43
|
),
|
|
40
44
|
]
|
|
41
45
|
rate: Annotated[
|
|
42
|
-
float, Field(description=
|
|
46
|
+
float, Field(description='Fixed vCPM rate (cost per 1,000 viewable impressions)', ge=0.0)
|
|
43
47
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: video-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,17 +12,17 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class VideoAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
17
|
bitrate_kbps: Annotated[
|
|
18
|
-
int | None, Field(description=
|
|
18
|
+
int | None, Field(description='Video bitrate in kilobits per second', ge=1)
|
|
19
19
|
] = None
|
|
20
20
|
duration_ms: Annotated[
|
|
21
|
-
int | None, Field(description=
|
|
21
|
+
int | None, Field(description='Video duration in milliseconds', ge=0)
|
|
22
22
|
] = None
|
|
23
|
-
format: Annotated[str | None, Field(description=
|
|
23
|
+
format: Annotated[str | None, Field(description='Video file format (mp4, webm, mov, etc.)')] = (
|
|
24
24
|
None
|
|
25
25
|
)
|
|
26
|
-
height: Annotated[int | None, Field(description=
|
|
27
|
-
url: Annotated[AnyUrl, Field(description=
|
|
28
|
-
width: Annotated[int | None, Field(description=
|
|
26
|
+
height: Annotated[int | None, Field(description='Video height in pixels', ge=1)] = None
|
|
27
|
+
url: Annotated[AnyUrl, Field(description='URL to the video asset')]
|
|
28
|
+
width: Annotated[int | None, Field(description='Video width in pixels', ge=1)] = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: webhook-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,21 +12,21 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class Method(Enum):
|
|
15
|
-
GET =
|
|
16
|
-
POST =
|
|
15
|
+
GET = 'GET'
|
|
16
|
+
POST = 'POST'
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class ResponseType(Enum):
|
|
20
|
-
html =
|
|
21
|
-
json =
|
|
22
|
-
xml =
|
|
23
|
-
javascript =
|
|
20
|
+
html = 'html'
|
|
21
|
+
json = 'json'
|
|
22
|
+
xml = 'xml'
|
|
23
|
+
javascript = 'javascript'
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class Method1(Enum):
|
|
27
|
-
hmac_sha256 =
|
|
28
|
-
api_key =
|
|
29
|
-
none =
|
|
27
|
+
hmac_sha256 = 'hmac_sha256'
|
|
28
|
+
api_key = 'api_key'
|
|
29
|
+
none = 'none'
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class Security(AdCPBaseModel):
|
|
@@ -36,30 +36,30 @@ class Security(AdCPBaseModel):
|
|
|
36
36
|
hmac_header: Annotated[
|
|
37
37
|
str | None, Field(description="Header name for HMAC signature (e.g., 'X-Signature')")
|
|
38
38
|
] = None
|
|
39
|
-
method: Annotated[Method1, Field(description=
|
|
39
|
+
method: Annotated[Method1, Field(description='Authentication method')]
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
class WebhookAsset(AdCPBaseModel):
|
|
43
43
|
model_config = ConfigDict(
|
|
44
|
-
extra=
|
|
44
|
+
extra='forbid',
|
|
45
45
|
)
|
|
46
|
-
method: Annotated[Method | None, Field(description=
|
|
46
|
+
method: Annotated[Method | None, Field(description='HTTP method')] = Method.POST
|
|
47
47
|
required_macros: Annotated[
|
|
48
48
|
list[str] | None,
|
|
49
|
-
Field(description=
|
|
49
|
+
Field(description='Universal macros that must be provided for webhook to function'),
|
|
50
50
|
] = None
|
|
51
51
|
response_type: Annotated[
|
|
52
|
-
ResponseType, Field(description=
|
|
52
|
+
ResponseType, Field(description='Expected content type of webhook response')
|
|
53
53
|
]
|
|
54
|
-
security: Annotated[Security, Field(description=
|
|
54
|
+
security: Annotated[Security, Field(description='Security configuration for webhook calls')]
|
|
55
55
|
supported_macros: Annotated[
|
|
56
56
|
list[str] | None,
|
|
57
57
|
Field(
|
|
58
|
-
description=
|
|
58
|
+
description='Universal macros that can be passed to webhook (e.g., {DEVICE_TYPE}, {COUNTRY})'
|
|
59
59
|
),
|
|
60
60
|
] = None
|
|
61
61
|
timeout_ms: Annotated[
|
|
62
62
|
int | None,
|
|
63
|
-
Field(description=
|
|
63
|
+
Field(description='Maximum time to wait for response in milliseconds', ge=10, le=5000),
|
|
64
64
|
] = 500
|
|
65
|
-
url: Annotated[AnyUrl, Field(description=
|
|
65
|
+
url: Annotated[AnyUrl, Field(description='Webhook URL to call for dynamic content')]
|