adcp 2.3.0__py3-none-any.whl → 2.4.1__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 +88 -39
- adcp/__main__.py +1 -1
- adcp/client.py +9 -9
- adcp/simple.py +1 -1
- adcp/testing/test_helpers.py +1 -1
- adcp/types/__init__.py +66 -2
- adcp/types/_generated.py +175 -0
- adcp/types/aliases.py +1 -1
- 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 +61 -120
- 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 +30 -30
- 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 +24 -24
- 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 +57 -72
- 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 +53 -43
- adcp/types/generated_poc/promoted_offerings.py +30 -30
- 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/types/stable.py +175 -0
- adcp/utils/preview_cache.py +6 -6
- {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/METADATA +29 -4
- adcp-2.4.1.dist-info/RECORD +129 -0
- adcp/types/generated.py +0 -614
- adcp/types/generated_poc/brand_manifest_ref.py +0 -361
- adcp/types/generated_poc/index.py +0 -17
- adcp/types/generated_poc/pricing_option.py +0 -365
- adcp/types/generated_poc/start_timing.py +0 -13
- adcp-2.3.0.dist-info/RECORD +0 -132
- {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/WHEEL +0 -0
- {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/entry_points.txt +0 -0
- {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.3.0.dist-info → adcp-2.4.1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: tasks-list-response.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:35:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -16,38 +16,38 @@ from . import task_type as task_type_1
|
|
|
16
16
|
|
|
17
17
|
class Pagination(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra='forbid',
|
|
20
20
|
)
|
|
21
|
-
has_more: Annotated[bool, Field(description=
|
|
22
|
-
limit: Annotated[int, Field(description=
|
|
21
|
+
has_more: Annotated[bool, Field(description='Whether there are more tasks beyond this page')]
|
|
22
|
+
limit: Annotated[int, Field(description='Limit that was applied to this query', ge=1)]
|
|
23
23
|
next_offset: Annotated[
|
|
24
24
|
int | None,
|
|
25
|
-
Field(description=
|
|
25
|
+
Field(description='Offset to use for next page (only present if has_more is true)', ge=0),
|
|
26
26
|
] = None
|
|
27
|
-
offset: Annotated[int, Field(description=
|
|
27
|
+
offset: Annotated[int, Field(description='Offset that was applied to this query', ge=0)]
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class DomainBreakdown(AdCPBaseModel):
|
|
31
31
|
model_config = ConfigDict(
|
|
32
|
-
extra=
|
|
32
|
+
extra='forbid',
|
|
33
33
|
)
|
|
34
34
|
media_buy: Annotated[
|
|
35
35
|
int | None,
|
|
36
|
-
Field(alias=
|
|
36
|
+
Field(alias='media-buy', description='Number of media-buy tasks in results', ge=0),
|
|
37
37
|
] = None
|
|
38
38
|
signals: Annotated[
|
|
39
|
-
int | None, Field(description=
|
|
39
|
+
int | None, Field(description='Number of signals tasks in results', ge=0)
|
|
40
40
|
] = None
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class Direction(Enum):
|
|
44
|
-
asc =
|
|
45
|
-
desc =
|
|
44
|
+
asc = 'asc'
|
|
45
|
+
desc = 'desc'
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class SortApplied(AdCPBaseModel):
|
|
49
49
|
model_config = ConfigDict(
|
|
50
|
-
extra=
|
|
50
|
+
extra='forbid',
|
|
51
51
|
)
|
|
52
52
|
direction: Direction
|
|
53
53
|
field: str
|
|
@@ -55,68 +55,68 @@ class SortApplied(AdCPBaseModel):
|
|
|
55
55
|
|
|
56
56
|
class QuerySummary(AdCPBaseModel):
|
|
57
57
|
model_config = ConfigDict(
|
|
58
|
-
extra=
|
|
58
|
+
extra='forbid',
|
|
59
59
|
)
|
|
60
60
|
domain_breakdown: Annotated[
|
|
61
|
-
DomainBreakdown | None, Field(description=
|
|
61
|
+
DomainBreakdown | None, Field(description='Count of tasks by domain')
|
|
62
62
|
] = None
|
|
63
63
|
filters_applied: Annotated[
|
|
64
|
-
list[str] | None, Field(description=
|
|
64
|
+
list[str] | None, Field(description='List of filters that were applied to the query')
|
|
65
65
|
] = None
|
|
66
|
-
returned: Annotated[int, Field(description=
|
|
66
|
+
returned: Annotated[int, Field(description='Number of tasks returned in this response', ge=0)]
|
|
67
67
|
sort_applied: Annotated[
|
|
68
|
-
SortApplied | None, Field(description=
|
|
68
|
+
SortApplied | None, Field(description='Sort order that was applied')
|
|
69
69
|
] = None
|
|
70
70
|
status_breakdown: Annotated[
|
|
71
|
-
dict[str, int] | None, Field(description=
|
|
71
|
+
dict[str, int] | None, Field(description='Count of tasks by status')
|
|
72
72
|
] = None
|
|
73
73
|
total_matching: Annotated[
|
|
74
|
-
int, Field(description=
|
|
74
|
+
int, Field(description='Total number of tasks matching filters (across all pages)', ge=0)
|
|
75
75
|
]
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
class Domain(Enum):
|
|
79
|
-
media_buy =
|
|
80
|
-
signals =
|
|
79
|
+
media_buy = 'media-buy'
|
|
80
|
+
signals = 'signals'
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
class Task(AdCPBaseModel):
|
|
84
84
|
model_config = ConfigDict(
|
|
85
|
-
extra=
|
|
85
|
+
extra='forbid',
|
|
86
86
|
)
|
|
87
87
|
completed_at: Annotated[
|
|
88
88
|
AwareDatetime | None,
|
|
89
89
|
Field(
|
|
90
|
-
description=
|
|
90
|
+
description='When the task completed (ISO 8601, only for completed/failed/canceled tasks)'
|
|
91
91
|
),
|
|
92
92
|
] = None
|
|
93
93
|
created_at: Annotated[
|
|
94
|
-
AwareDatetime, Field(description=
|
|
94
|
+
AwareDatetime, Field(description='When the task was initially created (ISO 8601)')
|
|
95
95
|
]
|
|
96
|
-
domain: Annotated[Domain, Field(description=
|
|
96
|
+
domain: Annotated[Domain, Field(description='AdCP domain this task belongs to')]
|
|
97
97
|
has_webhook: Annotated[
|
|
98
|
-
bool | None, Field(description=
|
|
98
|
+
bool | None, Field(description='Whether this task has webhook configuration')
|
|
99
99
|
] = None
|
|
100
|
-
status: Annotated[task_status.TaskStatus, Field(description=
|
|
101
|
-
task_id: Annotated[str, Field(description=
|
|
102
|
-
task_type: Annotated[task_type_1.TaskType, Field(description=
|
|
100
|
+
status: Annotated[task_status.TaskStatus, Field(description='Current task status')]
|
|
101
|
+
task_id: Annotated[str, Field(description='Unique identifier for this task')]
|
|
102
|
+
task_type: Annotated[task_type_1.TaskType, Field(description='Type of AdCP operation')]
|
|
103
103
|
updated_at: Annotated[
|
|
104
|
-
AwareDatetime, Field(description=
|
|
104
|
+
AwareDatetime, Field(description='When the task was last updated (ISO 8601)')
|
|
105
105
|
]
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
class TasksListResponse(AdCPBaseModel):
|
|
109
109
|
model_config = ConfigDict(
|
|
110
|
-
extra=
|
|
110
|
+
extra='forbid',
|
|
111
111
|
)
|
|
112
112
|
context: Annotated[
|
|
113
113
|
dict[str, Any] | None,
|
|
114
114
|
Field(
|
|
115
|
-
description=
|
|
115
|
+
description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
|
|
116
116
|
),
|
|
117
117
|
] = None
|
|
118
|
-
pagination: Annotated[Pagination, Field(description=
|
|
118
|
+
pagination: Annotated[Pagination, Field(description='Pagination information')]
|
|
119
119
|
query_summary: Annotated[
|
|
120
|
-
QuerySummary, Field(description=
|
|
120
|
+
QuerySummary, Field(description='Summary of the query that was executed')
|
|
121
121
|
]
|
|
122
|
-
tasks: Annotated[list[Task], Field(description=
|
|
122
|
+
tasks: Annotated[list[Task], Field(description='Array of tasks matching the query criteria')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: text-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-18T03:35:10+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -12,9 +12,9 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class TextAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra='forbid',
|
|
16
16
|
)
|
|
17
|
-
content: Annotated[str, Field(description=
|
|
17
|
+
content: Annotated[str, Field(description='Text content')]
|
|
18
18
|
language: Annotated[str | None, Field(description="Language code (e.g., 'en', 'es', 'fr')")] = (
|
|
19
19
|
None
|
|
20
20
|
)
|
|
@@ -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:35: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:35: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:35: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:35: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:35: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,
|