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: format.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,26 +14,26 @@ from . import format_id as format_id_1
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class AssetType(Enum):
|
|
17
|
-
image =
|
|
18
|
-
video =
|
|
19
|
-
audio =
|
|
20
|
-
vast =
|
|
21
|
-
daast =
|
|
22
|
-
text =
|
|
23
|
-
markdown =
|
|
24
|
-
html =
|
|
25
|
-
css =
|
|
26
|
-
javascript =
|
|
27
|
-
url =
|
|
28
|
-
webhook =
|
|
29
|
-
promoted_offerings =
|
|
17
|
+
image = 'image'
|
|
18
|
+
video = 'video'
|
|
19
|
+
audio = 'audio'
|
|
20
|
+
vast = 'vast'
|
|
21
|
+
daast = 'daast'
|
|
22
|
+
text = 'text'
|
|
23
|
+
markdown = 'markdown'
|
|
24
|
+
html = 'html'
|
|
25
|
+
css = 'css'
|
|
26
|
+
javascript = 'javascript'
|
|
27
|
+
url = 'url'
|
|
28
|
+
webhook = 'webhook'
|
|
29
|
+
promoted_offerings = 'promoted_offerings'
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class AssetsRequired(AdCPBaseModel):
|
|
33
33
|
asset_id: Annotated[
|
|
34
34
|
str,
|
|
35
35
|
Field(
|
|
36
|
-
description=
|
|
36
|
+
description='Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.'
|
|
37
37
|
),
|
|
38
38
|
]
|
|
39
39
|
asset_role: Annotated[
|
|
@@ -42,34 +42,34 @@ class AssetsRequired(AdCPBaseModel):
|
|
|
42
42
|
description="Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
|
|
43
43
|
),
|
|
44
44
|
] = None
|
|
45
|
-
asset_type: Annotated[AssetType, Field(description=
|
|
45
|
+
asset_type: Annotated[AssetType, Field(description='Type of asset')]
|
|
46
46
|
item_type: Annotated[
|
|
47
|
-
Literal[
|
|
48
|
-
Field(description=
|
|
47
|
+
Literal['individual'],
|
|
48
|
+
Field(description='Discriminator indicating this is an individual asset requirement'),
|
|
49
49
|
]
|
|
50
|
-
required: Annotated[bool | None, Field(description=
|
|
50
|
+
required: Annotated[bool | None, Field(description='Whether this asset is required')] = None
|
|
51
51
|
requirements: Annotated[
|
|
52
52
|
dict[str, Any] | None,
|
|
53
53
|
Field(
|
|
54
|
-
description=
|
|
54
|
+
description='Technical requirements for this asset (dimensions, file size, duration, etc.)'
|
|
55
55
|
),
|
|
56
56
|
] = None
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
class Asset(AdCPBaseModel):
|
|
60
|
-
asset_id: Annotated[str, Field(description=
|
|
60
|
+
asset_id: Annotated[str, Field(description='Identifier for this asset within the group')]
|
|
61
61
|
asset_role: Annotated[
|
|
62
62
|
str | None,
|
|
63
63
|
Field(
|
|
64
64
|
description="Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only."
|
|
65
65
|
),
|
|
66
66
|
] = None
|
|
67
|
-
asset_type: Annotated[AssetType, Field(description=
|
|
67
|
+
asset_type: Annotated[AssetType, Field(description='Type of asset')]
|
|
68
68
|
required: Annotated[
|
|
69
|
-
bool | None, Field(description=
|
|
69
|
+
bool | None, Field(description='Whether this asset is required in each repetition')
|
|
70
70
|
] = None
|
|
71
71
|
requirements: Annotated[
|
|
72
|
-
dict[str, Any] | None, Field(description=
|
|
72
|
+
dict[str, Any] | None, Field(description='Technical requirements for this asset')
|
|
73
73
|
] = None
|
|
74
74
|
|
|
75
75
|
|
|
@@ -77,45 +77,45 @@ class AssetsRequired1(AdCPBaseModel):
|
|
|
77
77
|
asset_group_id: Annotated[
|
|
78
78
|
str, Field(description="Identifier for this asset group (e.g., 'product', 'slide', 'card')")
|
|
79
79
|
]
|
|
80
|
-
assets: Annotated[list[Asset], Field(description=
|
|
80
|
+
assets: Annotated[list[Asset], Field(description='Assets within each repetition of this group')]
|
|
81
81
|
item_type: Annotated[
|
|
82
|
-
Literal[
|
|
83
|
-
Field(description=
|
|
82
|
+
Literal['repeatable_group'],
|
|
83
|
+
Field(description='Discriminator indicating this is a repeatable asset group'),
|
|
84
84
|
]
|
|
85
|
-
max_count: Annotated[int, Field(description=
|
|
86
|
-
min_count: Annotated[int, Field(description=
|
|
85
|
+
max_count: Annotated[int, Field(description='Maximum number of repetitions allowed', ge=1)]
|
|
86
|
+
min_count: Annotated[int, Field(description='Minimum number of repetitions required', ge=1)]
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
class FormatCard(AdCPBaseModel):
|
|
90
90
|
model_config = ConfigDict(
|
|
91
|
-
extra=
|
|
91
|
+
extra='forbid',
|
|
92
92
|
)
|
|
93
93
|
format_id: Annotated[
|
|
94
94
|
format_id_1.FormatId,
|
|
95
95
|
Field(
|
|
96
|
-
description=
|
|
96
|
+
description='Creative format defining the card layout (typically format_card_standard)'
|
|
97
97
|
),
|
|
98
98
|
]
|
|
99
99
|
manifest: Annotated[
|
|
100
100
|
dict[str, Any],
|
|
101
|
-
Field(description=
|
|
101
|
+
Field(description='Asset manifest for rendering the card, structure defined by the format'),
|
|
102
102
|
]
|
|
103
103
|
|
|
104
104
|
|
|
105
105
|
class FormatCardDetailed(AdCPBaseModel):
|
|
106
106
|
model_config = ConfigDict(
|
|
107
|
-
extra=
|
|
107
|
+
extra='forbid',
|
|
108
108
|
)
|
|
109
109
|
format_id: Annotated[
|
|
110
110
|
format_id_1.FormatId,
|
|
111
111
|
Field(
|
|
112
|
-
description=
|
|
112
|
+
description='Creative format defining the detailed card layout (typically format_card_detailed)'
|
|
113
113
|
),
|
|
114
114
|
]
|
|
115
115
|
manifest: Annotated[
|
|
116
116
|
dict[str, Any],
|
|
117
117
|
Field(
|
|
118
|
-
description=
|
|
118
|
+
description='Asset manifest for rendering the detailed card, structure defined by the format'
|
|
119
119
|
),
|
|
120
120
|
]
|
|
121
121
|
|
|
@@ -126,10 +126,10 @@ class Responsive(AdCPBaseModel):
|
|
|
126
126
|
|
|
127
127
|
|
|
128
128
|
class Unit(Enum):
|
|
129
|
-
px =
|
|
130
|
-
dp =
|
|
131
|
-
inches =
|
|
132
|
-
cm =
|
|
129
|
+
px = 'px'
|
|
130
|
+
dp = 'dp'
|
|
131
|
+
inches = 'inches'
|
|
132
|
+
cm = 'cm'
|
|
133
133
|
|
|
134
134
|
|
|
135
135
|
class Dimensions(AdCPBaseModel):
|
|
@@ -137,35 +137,35 @@ class Dimensions(AdCPBaseModel):
|
|
|
137
137
|
str | None,
|
|
138
138
|
Field(
|
|
139
139
|
description="Fixed aspect ratio constraint (e.g., '16:9', '4:3', '1:1')",
|
|
140
|
-
pattern=
|
|
140
|
+
pattern='^\\d+:\\d+$',
|
|
141
141
|
),
|
|
142
142
|
] = None
|
|
143
143
|
height: Annotated[
|
|
144
|
-
float | None, Field(description=
|
|
144
|
+
float | None, Field(description='Fixed height in specified units', ge=0.0)
|
|
145
145
|
] = None
|
|
146
146
|
max_height: Annotated[
|
|
147
|
-
float | None, Field(description=
|
|
147
|
+
float | None, Field(description='Maximum height for responsive renders', ge=0.0)
|
|
148
148
|
] = None
|
|
149
149
|
max_width: Annotated[
|
|
150
|
-
float | None, Field(description=
|
|
150
|
+
float | None, Field(description='Maximum width for responsive renders', ge=0.0)
|
|
151
151
|
] = None
|
|
152
152
|
min_height: Annotated[
|
|
153
|
-
float | None, Field(description=
|
|
153
|
+
float | None, Field(description='Minimum height for responsive renders', ge=0.0)
|
|
154
154
|
] = None
|
|
155
155
|
min_width: Annotated[
|
|
156
|
-
float | None, Field(description=
|
|
156
|
+
float | None, Field(description='Minimum width for responsive renders', ge=0.0)
|
|
157
157
|
] = None
|
|
158
158
|
responsive: Annotated[
|
|
159
|
-
Responsive | None, Field(description=
|
|
159
|
+
Responsive | None, Field(description='Indicates which dimensions are responsive/fluid')
|
|
160
160
|
] = None
|
|
161
|
-
unit: Annotated[Unit, Field(description=
|
|
162
|
-
width: Annotated[float | None, Field(description=
|
|
161
|
+
unit: Annotated[Unit, Field(description='Unit of measurement for dimensions')]
|
|
162
|
+
width: Annotated[float | None, Field(description='Fixed width in specified units', ge=0.0)] = (
|
|
163
163
|
None
|
|
164
164
|
)
|
|
165
165
|
|
|
166
166
|
|
|
167
167
|
class Render(AdCPBaseModel):
|
|
168
|
-
dimensions: Annotated[Dimensions, Field(description=
|
|
168
|
+
dimensions: Annotated[Dimensions, Field(description='Dimensions for this rendered piece')]
|
|
169
169
|
role: Annotated[
|
|
170
170
|
str,
|
|
171
171
|
Field(
|
|
@@ -175,86 +175,86 @@ class Render(AdCPBaseModel):
|
|
|
175
175
|
|
|
176
176
|
|
|
177
177
|
class Type(Enum):
|
|
178
|
-
audio =
|
|
179
|
-
video =
|
|
180
|
-
display =
|
|
181
|
-
native =
|
|
182
|
-
dooh =
|
|
183
|
-
rich_media =
|
|
184
|
-
universal =
|
|
178
|
+
audio = 'audio'
|
|
179
|
+
video = 'video'
|
|
180
|
+
display = 'display'
|
|
181
|
+
native = 'native'
|
|
182
|
+
dooh = 'dooh'
|
|
183
|
+
rich_media = 'rich_media'
|
|
184
|
+
universal = 'universal'
|
|
185
185
|
|
|
186
186
|
|
|
187
187
|
class Format(AdCPBaseModel):
|
|
188
188
|
model_config = ConfigDict(
|
|
189
|
-
extra=
|
|
189
|
+
extra='forbid',
|
|
190
190
|
)
|
|
191
191
|
assets_required: Annotated[
|
|
192
192
|
list[AssetsRequired | AssetsRequired1] | None,
|
|
193
193
|
Field(
|
|
194
|
-
description=
|
|
194
|
+
description='Array of required assets or asset groups for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Can contain individual assets or repeatable asset sequences (e.g., carousel products, slideshow frames).'
|
|
195
195
|
),
|
|
196
196
|
] = None
|
|
197
197
|
delivery: Annotated[
|
|
198
198
|
dict[str, Any] | None,
|
|
199
|
-
Field(description=
|
|
199
|
+
Field(description='Delivery method specifications (e.g., hosted, VAST, third-party tags)'),
|
|
200
200
|
] = None
|
|
201
201
|
description: Annotated[
|
|
202
202
|
str | None,
|
|
203
203
|
Field(
|
|
204
|
-
description=
|
|
204
|
+
description='Plain text explanation of what this format does and what assets it requires'
|
|
205
205
|
),
|
|
206
206
|
] = None
|
|
207
207
|
example_url: Annotated[
|
|
208
208
|
AnyUrl | None,
|
|
209
209
|
Field(
|
|
210
|
-
description=
|
|
210
|
+
description='Optional URL to showcase page with examples and interactive demos of this format'
|
|
211
211
|
),
|
|
212
212
|
] = None
|
|
213
213
|
format_card: Annotated[
|
|
214
214
|
FormatCard | None,
|
|
215
215
|
Field(
|
|
216
|
-
description=
|
|
216
|
+
description='Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated.'
|
|
217
217
|
),
|
|
218
218
|
] = None
|
|
219
219
|
format_card_detailed: Annotated[
|
|
220
220
|
FormatCardDetailed | None,
|
|
221
221
|
Field(
|
|
222
|
-
description=
|
|
222
|
+
description='Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.'
|
|
223
223
|
),
|
|
224
224
|
] = None
|
|
225
225
|
format_id: Annotated[
|
|
226
226
|
format_id_1.FormatId,
|
|
227
|
-
Field(description=
|
|
227
|
+
Field(description='Structured format identifier with agent URL and format name'),
|
|
228
228
|
]
|
|
229
|
-
name: Annotated[str, Field(description=
|
|
229
|
+
name: Annotated[str, Field(description='Human-readable format name')]
|
|
230
230
|
output_format_ids: Annotated[
|
|
231
231
|
list[format_id_1.FormatId] | None,
|
|
232
232
|
Field(
|
|
233
|
-
description=
|
|
233
|
+
description='For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand_manifest and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats).'
|
|
234
234
|
),
|
|
235
235
|
] = None
|
|
236
236
|
preview_image: Annotated[
|
|
237
237
|
AnyUrl | None,
|
|
238
238
|
Field(
|
|
239
|
-
description=
|
|
239
|
+
description='DEPRECATED: Use format_card instead. Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers. This field is maintained for backward compatibility but format_card provides a more flexible, structured approach.'
|
|
240
240
|
),
|
|
241
241
|
] = None
|
|
242
242
|
renders: Annotated[
|
|
243
243
|
list[Render] | None,
|
|
244
244
|
Field(
|
|
245
|
-
description=
|
|
245
|
+
description='Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.',
|
|
246
246
|
min_length=1,
|
|
247
247
|
),
|
|
248
248
|
] = None
|
|
249
249
|
supported_macros: Annotated[
|
|
250
250
|
list[str] | None,
|
|
251
251
|
Field(
|
|
252
|
-
description=
|
|
252
|
+
description='List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling.'
|
|
253
253
|
),
|
|
254
254
|
] = None
|
|
255
255
|
type: Annotated[
|
|
256
256
|
Type,
|
|
257
257
|
Field(
|
|
258
|
-
description=
|
|
258
|
+
description='Media type of this format - determines rendering method and asset requirements'
|
|
259
259
|
),
|
|
260
260
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: format-id.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,7 +12,7 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class FormatId(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
17
|
agent_url: Annotated[
|
|
18
18
|
AnyUrl,
|
|
@@ -24,6 +24,6 @@ class FormatId(AdCPBaseModel):
|
|
|
24
24
|
str,
|
|
25
25
|
Field(
|
|
26
26
|
description="Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')",
|
|
27
|
-
pattern=
|
|
27
|
+
pattern='^[a-zA-Z0-9_-]+$',
|
|
28
28
|
),
|
|
29
29
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: frequency-cap.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,8 +12,8 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class FrequencyCap(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
17
|
suppress_minutes: Annotated[
|
|
18
|
-
float, Field(description=
|
|
18
|
+
float, Field(description='Minutes to suppress after impression', ge=0.0)
|
|
19
19
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: frequency-cap-scope.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:04:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,8 +9,8 @@ from typing import Annotated, Literal
|
|
|
9
9
|
from pydantic import Field, RootModel
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class FrequencyCapScope(RootModel[Literal[
|
|
12
|
+
class FrequencyCapScope(RootModel[Literal['package']]):
|
|
13
13
|
root: Annotated[
|
|
14
|
-
Literal[
|
|
15
|
-
Field(description=
|
|
14
|
+
Literal['package'],
|
|
15
|
+
Field(description='Scope for frequency cap application', title='Frequency Cap Scope'),
|
|
16
16
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: get-media-buy-delivery-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
|
|
|
@@ -12,54 +12,54 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class StatusFilter(Enum):
|
|
15
|
-
active =
|
|
16
|
-
pending =
|
|
17
|
-
paused =
|
|
18
|
-
completed =
|
|
19
|
-
failed =
|
|
20
|
-
all =
|
|
15
|
+
active = 'active'
|
|
16
|
+
pending = 'pending'
|
|
17
|
+
paused = 'paused'
|
|
18
|
+
completed = 'completed'
|
|
19
|
+
failed = 'failed'
|
|
20
|
+
all = 'all'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class StatusFilterEnum(Enum):
|
|
24
|
-
active =
|
|
25
|
-
pending =
|
|
26
|
-
paused =
|
|
27
|
-
completed =
|
|
28
|
-
failed =
|
|
24
|
+
active = 'active'
|
|
25
|
+
pending = 'pending'
|
|
26
|
+
paused = 'paused'
|
|
27
|
+
completed = 'completed'
|
|
28
|
+
failed = 'failed'
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class GetMediaBuyDeliveryRequest(AdCPBaseModel):
|
|
32
32
|
model_config = ConfigDict(
|
|
33
|
-
extra=
|
|
33
|
+
extra='forbid',
|
|
34
34
|
)
|
|
35
35
|
buyer_refs: Annotated[
|
|
36
|
-
list[str] | None, Field(description=
|
|
36
|
+
list[str] | None, Field(description='Array of buyer reference IDs to get delivery data for')
|
|
37
37
|
] = None
|
|
38
38
|
context: Annotated[
|
|
39
39
|
dict[str, Any] | None,
|
|
40
40
|
Field(
|
|
41
|
-
description=
|
|
41
|
+
description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
|
|
42
42
|
),
|
|
43
43
|
] = None
|
|
44
44
|
end_date: Annotated[
|
|
45
45
|
str | None,
|
|
46
46
|
Field(
|
|
47
|
-
description=
|
|
48
|
-
pattern=
|
|
47
|
+
description='End date for reporting period (YYYY-MM-DD)',
|
|
48
|
+
pattern='^\\d{4}-\\d{2}-\\d{2}$',
|
|
49
49
|
),
|
|
50
50
|
] = None
|
|
51
51
|
media_buy_ids: Annotated[
|
|
52
52
|
list[str] | None,
|
|
53
|
-
Field(description=
|
|
53
|
+
Field(description='Array of publisher media buy IDs to get delivery data for'),
|
|
54
54
|
] = None
|
|
55
55
|
start_date: Annotated[
|
|
56
56
|
str | None,
|
|
57
57
|
Field(
|
|
58
|
-
description=
|
|
59
|
-
pattern=
|
|
58
|
+
description='Start date for reporting period (YYYY-MM-DD)',
|
|
59
|
+
pattern='^\\d{4}-\\d{2}-\\d{2}$',
|
|
60
60
|
),
|
|
61
61
|
] = None
|
|
62
62
|
status_filter: Annotated[
|
|
63
63
|
StatusFilter | list[StatusFilterEnum] | None,
|
|
64
|
-
Field(description=
|
|
64
|
+
Field(description='Filter by status. Can be a single status or array of statuses'),
|
|
65
65
|
] = None
|