adcp 2.10.0__py3-none-any.whl → 2.11.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 +57 -53
- adcp/client.py +9 -11
- adcp/simple.py +1 -1
- adcp/types/__init__.py +329 -301
- adcp/types/_generated.py +103 -67
- adcp/types/generated_poc/adagents.py +55 -63
- adcp/types/generated_poc/adcp_domain.py +12 -0
- adcp/types/generated_poc/auth_scheme.py +12 -0
- adcp/types/generated_poc/available_metric.py +19 -0
- adcp/types/generated_poc/co_branding_requirement.py +13 -0
- adcp/types/generated_poc/creative_action.py +15 -0
- adcp/types/generated_poc/creative_agent_capability.py +14 -0
- adcp/types/generated_poc/creative_filters.py +77 -0
- adcp/types/generated_poc/creative_policy.py +9 -15
- adcp/types/generated_poc/creative_sort_field.py +16 -0
- adcp/types/generated_poc/daast_asset.py +9 -24
- adcp/types/generated_poc/daast_tracking_event.py +21 -0
- adcp/types/generated_poc/daast_version.py +12 -0
- adcp/types/generated_poc/dimension_unit.py +14 -0
- adcp/types/generated_poc/feed_format.py +13 -0
- adcp/types/generated_poc/feedback_source.py +14 -0
- adcp/types/generated_poc/format.py +5 -11
- adcp/types/generated_poc/get_media_buy_delivery_request.py +3 -19
- adcp/types/generated_poc/get_products_request.py +3 -36
- adcp/types/generated_poc/get_signals_request.py +3 -26
- adcp/types/generated_poc/get_signals_response.py +5 -10
- adcp/types/generated_poc/history_entry_type.py +12 -0
- adcp/types/generated_poc/http_method.py +12 -0
- adcp/types/generated_poc/javascript_asset.py +6 -8
- adcp/types/generated_poc/javascript_module_type.py +13 -0
- adcp/types/generated_poc/landing_page_requirement.py +13 -0
- adcp/types/generated_poc/list_creative_formats_response.py +4 -11
- adcp/types/generated_poc/list_creatives_request.py +10 -87
- adcp/types/generated_poc/list_creatives_response.py +13 -17
- adcp/types/generated_poc/markdown_asset.py +4 -8
- adcp/types/generated_poc/markdown_flavor.py +12 -0
- adcp/types/generated_poc/metric_type.py +18 -0
- adcp/types/generated_poc/notification_type.py +14 -0
- adcp/types/generated_poc/performance_feedback.py +9 -20
- adcp/types/generated_poc/preview_creative_request.py +8 -13
- adcp/types/generated_poc/preview_output_format.py +12 -0
- adcp/types/generated_poc/product_filters.py +36 -0
- adcp/types/generated_poc/property.py +11 -27
- adcp/types/generated_poc/property_id.py +21 -0
- adcp/types/generated_poc/property_tag.py +21 -0
- adcp/types/generated_poc/property_type.py +17 -0
- adcp/types/generated_poc/provide_performance_feedback_request.py +71 -25
- adcp/types/generated_poc/publisher_property_selector.py +6 -12
- adcp/types/generated_poc/push_notification_config.py +3 -7
- adcp/types/generated_poc/reporting_capabilities.py +4 -21
- adcp/types/generated_poc/reporting_frequency.py +13 -0
- adcp/types/generated_poc/signal_catalog_type.py +13 -0
- adcp/types/generated_poc/signal_filters.py +29 -0
- adcp/types/generated_poc/sort_direction.py +12 -0
- adcp/types/generated_poc/sync_creatives_request.py +4 -9
- adcp/types/generated_poc/sync_creatives_response.py +5 -12
- adcp/types/generated_poc/tasks_list_request.py +9 -15
- adcp/types/generated_poc/update_frequency.py +14 -0
- adcp/types/generated_poc/url_asset.py +3 -8
- adcp/types/generated_poc/url_asset_type.py +13 -0
- adcp/types/generated_poc/validation_mode.py +12 -0
- adcp/types/generated_poc/vast_asset.py +13 -36
- adcp/types/generated_poc/vast_tracking_event.py +26 -0
- adcp/types/generated_poc/vast_version.py +15 -0
- adcp/types/generated_poc/webhook_asset.py +10 -22
- adcp/types/generated_poc/webhook_payload.py +3 -9
- adcp/types/generated_poc/webhook_response_type.py +14 -0
- adcp/types/generated_poc/webhook_security_method.py +13 -0
- adcp/utils/preview_cache.py +5 -5
- {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/METADATA +1 -1
- {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/RECORD +75 -40
- adcp/types/stable.py +0 -449
- {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/WHEEL +0 -0
- {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/entry_points.txt +0 -0
- {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.10.0.dist-info → adcp-2.11.1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: list-creatives-response.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -17,6 +17,7 @@ from . import (
|
|
|
17
17
|
image_asset,
|
|
18
18
|
javascript_asset,
|
|
19
19
|
promoted_offerings,
|
|
20
|
+
sort_direction,
|
|
20
21
|
sub_asset,
|
|
21
22
|
text_asset,
|
|
22
23
|
url_asset,
|
|
@@ -93,13 +94,20 @@ class Pagination(AdCPBaseModel):
|
|
|
93
94
|
] = None
|
|
94
95
|
|
|
95
96
|
|
|
96
|
-
class
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
class StatusSummary(AdCPBaseModel):
|
|
98
|
+
model_config = ConfigDict(
|
|
99
|
+
extra='forbid',
|
|
100
|
+
)
|
|
101
|
+
approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None
|
|
102
|
+
archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None
|
|
103
|
+
pending_review: Annotated[
|
|
104
|
+
int | None, Field(description='Number of creatives pending review', ge=0)
|
|
105
|
+
] = None
|
|
106
|
+
rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
|
|
99
107
|
|
|
100
108
|
|
|
101
109
|
class SortApplied(AdCPBaseModel):
|
|
102
|
-
direction:
|
|
110
|
+
direction: sort_direction.SortDirection | None = None
|
|
103
111
|
field: str | None = None
|
|
104
112
|
|
|
105
113
|
|
|
@@ -122,18 +130,6 @@ class QuerySummary(AdCPBaseModel):
|
|
|
122
130
|
]
|
|
123
131
|
|
|
124
132
|
|
|
125
|
-
class StatusSummary(AdCPBaseModel):
|
|
126
|
-
model_config = ConfigDict(
|
|
127
|
-
extra='forbid',
|
|
128
|
-
)
|
|
129
|
-
approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None
|
|
130
|
-
archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None
|
|
131
|
-
pending_review: Annotated[
|
|
132
|
-
int | None, Field(description='Number of creatives pending review', ge=0)
|
|
133
|
-
] = None
|
|
134
|
-
rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
|
|
135
|
-
|
|
136
|
-
|
|
137
133
|
class Creative(AdCPBaseModel):
|
|
138
134
|
model_config = ConfigDict(
|
|
139
135
|
extra='forbid',
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: markdown-asset.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
class MarkdownFlavor(Enum):
|
|
15
|
-
commonmark = 'commonmark'
|
|
16
|
-
gfm = 'gfm'
|
|
12
|
+
from . import markdown_flavor as markdown_flavor_1
|
|
17
13
|
|
|
18
14
|
|
|
19
15
|
class MarkdownAsset(AdCPBaseModel):
|
|
@@ -36,8 +32,8 @@ class MarkdownAsset(AdCPBaseModel):
|
|
|
36
32
|
None
|
|
37
33
|
)
|
|
38
34
|
markdown_flavor: Annotated[
|
|
39
|
-
MarkdownFlavor | None,
|
|
35
|
+
markdown_flavor_1.MarkdownFlavor | None,
|
|
40
36
|
Field(
|
|
41
37
|
description='Markdown flavor used. CommonMark for strict compatibility, GFM for tables/task lists/strikethrough.'
|
|
42
38
|
),
|
|
43
|
-
] = MarkdownFlavor.commonmark
|
|
39
|
+
] = markdown_flavor_1.MarkdownFlavor.commonmark
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: metric-type.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MetricType(Enum):
|
|
11
|
+
overall_performance = 'overall_performance'
|
|
12
|
+
conversion_rate = 'conversion_rate'
|
|
13
|
+
brand_lift = 'brand_lift'
|
|
14
|
+
click_through_rate = 'click_through_rate'
|
|
15
|
+
completion_rate = 'completion_rate'
|
|
16
|
+
viewability = 'viewability'
|
|
17
|
+
brand_safety = 'brand_safety'
|
|
18
|
+
cost_efficiency = 'cost_efficiency'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: notification-type.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class NotificationType(Enum):
|
|
11
|
+
scheduled = 'scheduled'
|
|
12
|
+
final = 'final'
|
|
13
|
+
delayed = 'delayed'
|
|
14
|
+
adjusted = 'adjusted'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: performance-feedback.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -10,12 +10,8 @@ from typing import Annotated
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
11
|
from pydantic import AwareDatetime, ConfigDict, Field
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
buyer_attribution = 'buyer_attribution'
|
|
16
|
-
third_party_measurement = 'third_party_measurement'
|
|
17
|
-
platform_analytics = 'platform_analytics'
|
|
18
|
-
verification_partner = 'verification_partner'
|
|
13
|
+
from . import feedback_source as feedback_source_1
|
|
14
|
+
from . import metric_type as metric_type_1
|
|
19
15
|
|
|
20
16
|
|
|
21
17
|
class MeasurementPeriod(AdCPBaseModel):
|
|
@@ -30,17 +26,6 @@ class MeasurementPeriod(AdCPBaseModel):
|
|
|
30
26
|
]
|
|
31
27
|
|
|
32
28
|
|
|
33
|
-
class MetricType(Enum):
|
|
34
|
-
overall_performance = 'overall_performance'
|
|
35
|
-
conversion_rate = 'conversion_rate'
|
|
36
|
-
brand_lift = 'brand_lift'
|
|
37
|
-
click_through_rate = 'click_through_rate'
|
|
38
|
-
completion_rate = 'completion_rate'
|
|
39
|
-
viewability = 'viewability'
|
|
40
|
-
brand_safety = 'brand_safety'
|
|
41
|
-
cost_efficiency = 'cost_efficiency'
|
|
42
|
-
|
|
43
|
-
|
|
44
29
|
class Status(Enum):
|
|
45
30
|
accepted = 'accepted'
|
|
46
31
|
queued = 'queued'
|
|
@@ -64,12 +49,16 @@ class PerformanceFeedback(AdCPBaseModel):
|
|
|
64
49
|
feedback_id: Annotated[
|
|
65
50
|
str, Field(description='Unique identifier for this performance feedback submission')
|
|
66
51
|
]
|
|
67
|
-
feedback_source: Annotated[
|
|
52
|
+
feedback_source: Annotated[
|
|
53
|
+
feedback_source_1.FeedbackSource, Field(description='Source of the performance data')
|
|
54
|
+
]
|
|
68
55
|
measurement_period: Annotated[
|
|
69
56
|
MeasurementPeriod, Field(description='Time period for performance measurement')
|
|
70
57
|
]
|
|
71
58
|
media_buy_id: Annotated[str, Field(description="Publisher's media buy identifier")]
|
|
72
|
-
metric_type: Annotated[
|
|
59
|
+
metric_type: Annotated[
|
|
60
|
+
metric_type_1.MetricType, Field(description='The business metric being measured')
|
|
61
|
+
]
|
|
73
62
|
package_id: Annotated[
|
|
74
63
|
str | None,
|
|
75
64
|
Field(
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: preview-creative-request.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any, Literal
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
@@ -12,6 +11,7 @@ from pydantic import ConfigDict, Field, RootModel
|
|
|
12
11
|
|
|
13
12
|
from . import creative_manifest as creative_manifest_1
|
|
14
13
|
from . import format_id as format_id_1
|
|
14
|
+
from . import preview_output_format
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class Input(AdCPBaseModel):
|
|
@@ -38,11 +38,6 @@ class Input(AdCPBaseModel):
|
|
|
38
38
|
]
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
class OutputFormat(Enum):
|
|
42
|
-
url = 'url'
|
|
43
|
-
html = 'html'
|
|
44
|
-
|
|
45
|
-
|
|
46
41
|
class Input2(AdCPBaseModel):
|
|
47
42
|
model_config = ConfigDict(
|
|
48
43
|
extra='forbid',
|
|
@@ -83,11 +78,11 @@ class PreviewCreativeRequest1(AdCPBaseModel):
|
|
|
83
78
|
),
|
|
84
79
|
] = None
|
|
85
80
|
output_format: Annotated[
|
|
86
|
-
|
|
81
|
+
preview_output_format.PreviewOutputFormat | None,
|
|
87
82
|
Field(
|
|
88
83
|
description="Output format for previews. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding). Default: 'url' for backward compatibility."
|
|
89
84
|
),
|
|
90
|
-
] =
|
|
85
|
+
] = preview_output_format.PreviewOutputFormat.url
|
|
91
86
|
request_type: Annotated[
|
|
92
87
|
Literal['single'],
|
|
93
88
|
Field(description='Discriminator indicating this is a single preview request'),
|
|
@@ -113,11 +108,11 @@ class Request(AdCPBaseModel):
|
|
|
113
108
|
Field(description='Array of input sets for generating multiple preview variants'),
|
|
114
109
|
] = None
|
|
115
110
|
output_format: Annotated[
|
|
116
|
-
|
|
111
|
+
preview_output_format.PreviewOutputFormat | None,
|
|
117
112
|
Field(
|
|
118
113
|
description="Output format for this preview. 'url' returns preview_url, 'html' returns preview_html."
|
|
119
114
|
),
|
|
120
|
-
] =
|
|
115
|
+
] = preview_output_format.PreviewOutputFormat.url
|
|
121
116
|
template_id: Annotated[
|
|
122
117
|
str | None, Field(description='Specific template ID for custom format rendering')
|
|
123
118
|
] = None
|
|
@@ -134,11 +129,11 @@ class PreviewCreativeRequest2(AdCPBaseModel):
|
|
|
134
129
|
),
|
|
135
130
|
] = None
|
|
136
131
|
output_format: Annotated[
|
|
137
|
-
|
|
132
|
+
preview_output_format.PreviewOutputFormat | None,
|
|
138
133
|
Field(
|
|
139
134
|
description="Default output format for all requests in this batch. Individual requests can override this. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding)."
|
|
140
135
|
),
|
|
141
|
-
] =
|
|
136
|
+
] = preview_output_format.PreviewOutputFormat.url
|
|
142
137
|
request_type: Annotated[
|
|
143
138
|
Literal['batch'],
|
|
144
139
|
Field(description='Discriminator indicating this is a batch preview request'),
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: product-filters.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from . import delivery_type as delivery_type_1
|
|
13
|
+
from . import format_category, format_id
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ProductFilters(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='forbid',
|
|
19
|
+
)
|
|
20
|
+
delivery_type: delivery_type_1.DeliveryType | None = None
|
|
21
|
+
format_ids: Annotated[
|
|
22
|
+
list[format_id.FormatId] | None, Field(description='Filter by specific format IDs')
|
|
23
|
+
] = None
|
|
24
|
+
format_types: Annotated[
|
|
25
|
+
list[format_category.FormatCategory] | None, Field(description='Filter by format types')
|
|
26
|
+
] = None
|
|
27
|
+
is_fixed_price: Annotated[
|
|
28
|
+
bool | None, Field(description='Filter for fixed price vs auction products')
|
|
29
|
+
] = None
|
|
30
|
+
min_exposures: Annotated[
|
|
31
|
+
int | None,
|
|
32
|
+
Field(description='Minimum exposures/impressions needed for measurement validity', ge=1),
|
|
33
|
+
] = None
|
|
34
|
+
standard_formats_only: Annotated[
|
|
35
|
+
bool | None, Field(description='Only return products accepting IAB standard formats')
|
|
36
|
+
] = None
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: property.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T20:45:16+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
|
-
from pydantic import ConfigDict, Field
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
from . import identifier_types
|
|
12
|
+
from . import identifier_types, property_tag
|
|
13
|
+
from . import property_type as property_type_1
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class Identifier(AdCPBaseModel):
|
|
@@ -29,26 +29,6 @@ class Identifier(AdCPBaseModel):
|
|
|
29
29
|
]
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
class PropertyType(Enum):
|
|
33
|
-
website = 'website'
|
|
34
|
-
mobile_app = 'mobile_app'
|
|
35
|
-
ctv_app = 'ctv_app'
|
|
36
|
-
dooh = 'dooh'
|
|
37
|
-
podcast = 'podcast'
|
|
38
|
-
radio = 'radio'
|
|
39
|
-
streaming_audio = 'streaming_audio'
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class Tag(RootModel[str]):
|
|
43
|
-
root: Annotated[
|
|
44
|
-
str,
|
|
45
|
-
Field(
|
|
46
|
-
description="Lowercase tag with underscores (e.g., 'conde_nast_network', 'premium_content')",
|
|
47
|
-
pattern='^[a-z0-9_]+$',
|
|
48
|
-
),
|
|
49
|
-
]
|
|
50
|
-
|
|
51
|
-
|
|
52
32
|
class Property(AdCPBaseModel):
|
|
53
33
|
model_config = ConfigDict(
|
|
54
34
|
extra='forbid',
|
|
@@ -60,11 +40,15 @@ class Property(AdCPBaseModel):
|
|
|
60
40
|
property_id: Annotated[
|
|
61
41
|
str | None,
|
|
62
42
|
Field(
|
|
63
|
-
description=
|
|
43
|
+
description='Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects.',
|
|
44
|
+
examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'],
|
|
64
45
|
pattern='^[a-z0-9_]+$',
|
|
46
|
+
title='Property ID',
|
|
65
47
|
),
|
|
66
48
|
] = None
|
|
67
|
-
property_type: Annotated[
|
|
49
|
+
property_type: Annotated[
|
|
50
|
+
property_type_1.PropertyType, Field(description='Type of advertising property')
|
|
51
|
+
]
|
|
68
52
|
publisher_domain: Annotated[
|
|
69
53
|
str | None,
|
|
70
54
|
Field(
|
|
@@ -72,7 +56,7 @@ class Property(AdCPBaseModel):
|
|
|
72
56
|
),
|
|
73
57
|
] = None
|
|
74
58
|
tags: Annotated[
|
|
75
|
-
list[
|
|
59
|
+
list[property_tag.PropertyTag] | None,
|
|
76
60
|
Field(
|
|
77
61
|
description='Tags for categorization and grouping (e.g., network membership, content categories)'
|
|
78
62
|
),
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property-id.json
|
|
3
|
+
# timestamp: 2025-11-21T20:45:16+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from pydantic import Field, RootModel
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class PropertyId(RootModel[str]):
|
|
13
|
+
root: Annotated[
|
|
14
|
+
str,
|
|
15
|
+
Field(
|
|
16
|
+
description='Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.',
|
|
17
|
+
examples=['cnn_ctv_app', 'homepage', 'mobile_ios', 'instagram'],
|
|
18
|
+
pattern='^[a-z0-9_]+$',
|
|
19
|
+
title='Property ID',
|
|
20
|
+
),
|
|
21
|
+
]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property-tag.json
|
|
3
|
+
# timestamp: 2025-11-21T20:45:16+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from pydantic import Field, RootModel
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class PropertyTag(RootModel[str]):
|
|
13
|
+
root: Annotated[
|
|
14
|
+
str,
|
|
15
|
+
Field(
|
|
16
|
+
description='Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.',
|
|
17
|
+
examples=['ctv', 'premium', 'news', 'sports', 'meta_network', 'social_media'],
|
|
18
|
+
pattern='^[a-z0-9_]+$',
|
|
19
|
+
title='Property Tag',
|
|
20
|
+
),
|
|
21
|
+
]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: property-type.json
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class PropertyType(Enum):
|
|
11
|
+
website = 'website'
|
|
12
|
+
mobile_app = 'mobile_app'
|
|
13
|
+
ctv_app = 'ctv_app'
|
|
14
|
+
dooh = 'dooh'
|
|
15
|
+
podcast = 'podcast'
|
|
16
|
+
radio = 'radio'
|
|
17
|
+
streaming_audio = 'streaming_audio'
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: provide-performance-feedback-request.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T15:57:17+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated, Any
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
|
-
from pydantic import AwareDatetime, ConfigDict, Field
|
|
10
|
+
from pydantic import AwareDatetime, ConfigDict, Field, RootModel
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
buyer_attribution = 'buyer_attribution'
|
|
16
|
-
third_party_measurement = 'third_party_measurement'
|
|
17
|
-
platform_analytics = 'platform_analytics'
|
|
18
|
-
verification_partner = 'verification_partner'
|
|
12
|
+
from . import feedback_source as feedback_source_1
|
|
13
|
+
from . import metric_type as metric_type_1
|
|
19
14
|
|
|
20
15
|
|
|
21
16
|
class MeasurementPeriod(AdCPBaseModel):
|
|
@@ -30,21 +25,13 @@ class MeasurementPeriod(AdCPBaseModel):
|
|
|
30
25
|
]
|
|
31
26
|
|
|
32
27
|
|
|
33
|
-
class
|
|
34
|
-
overall_performance = 'overall_performance'
|
|
35
|
-
conversion_rate = 'conversion_rate'
|
|
36
|
-
brand_lift = 'brand_lift'
|
|
37
|
-
click_through_rate = 'click_through_rate'
|
|
38
|
-
completion_rate = 'completion_rate'
|
|
39
|
-
viewability = 'viewability'
|
|
40
|
-
brand_safety = 'brand_safety'
|
|
41
|
-
cost_efficiency = 'cost_efficiency'
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
|
|
28
|
+
class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
|
|
45
29
|
model_config = ConfigDict(
|
|
46
30
|
extra='forbid',
|
|
47
31
|
)
|
|
32
|
+
buyer_ref: Annotated[
|
|
33
|
+
str | None, Field(description="Buyer's reference for the media buy", min_length=1)
|
|
34
|
+
] = None
|
|
48
35
|
context: Annotated[
|
|
49
36
|
dict[str, Any] | None,
|
|
50
37
|
Field(
|
|
@@ -58,8 +45,8 @@ class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
|
|
|
58
45
|
),
|
|
59
46
|
] = None
|
|
60
47
|
feedback_source: Annotated[
|
|
61
|
-
FeedbackSource | None, Field(description='Source of the performance data')
|
|
62
|
-
] = FeedbackSource.buyer_attribution
|
|
48
|
+
feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
|
|
49
|
+
] = feedback_source_1.FeedbackSource.buyer_attribution
|
|
63
50
|
measurement_period: Annotated[
|
|
64
51
|
MeasurementPeriod, Field(description='Time period for performance measurement')
|
|
65
52
|
]
|
|
@@ -67,8 +54,55 @@ class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
|
|
|
67
54
|
str, Field(description="Publisher's media buy identifier", min_length=1)
|
|
68
55
|
]
|
|
69
56
|
metric_type: Annotated[
|
|
70
|
-
MetricType | None, Field(description='The business metric being measured')
|
|
71
|
-
] = MetricType.overall_performance
|
|
57
|
+
metric_type_1.MetricType | None, Field(description='The business metric being measured')
|
|
58
|
+
] = metric_type_1.MetricType.overall_performance
|
|
59
|
+
package_id: Annotated[
|
|
60
|
+
str | None,
|
|
61
|
+
Field(
|
|
62
|
+
description='Specific package within the media buy (if feedback is package-specific)',
|
|
63
|
+
min_length=1,
|
|
64
|
+
),
|
|
65
|
+
] = None
|
|
66
|
+
performance_index: Annotated[
|
|
67
|
+
float,
|
|
68
|
+
Field(
|
|
69
|
+
description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
|
|
70
|
+
ge=0.0,
|
|
71
|
+
),
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class ProvidePerformanceFeedbackRequest2(AdCPBaseModel):
|
|
76
|
+
model_config = ConfigDict(
|
|
77
|
+
extra='forbid',
|
|
78
|
+
)
|
|
79
|
+
buyer_ref: Annotated[
|
|
80
|
+
str, Field(description="Buyer's reference for the media buy", min_length=1)
|
|
81
|
+
]
|
|
82
|
+
context: Annotated[
|
|
83
|
+
dict[str, Any] | None,
|
|
84
|
+
Field(
|
|
85
|
+
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.'
|
|
86
|
+
),
|
|
87
|
+
] = None
|
|
88
|
+
creative_id: Annotated[
|
|
89
|
+
str | None,
|
|
90
|
+
Field(
|
|
91
|
+
description='Specific creative asset (if feedback is creative-specific)', min_length=1
|
|
92
|
+
),
|
|
93
|
+
] = None
|
|
94
|
+
feedback_source: Annotated[
|
|
95
|
+
feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
|
|
96
|
+
] = feedback_source_1.FeedbackSource.buyer_attribution
|
|
97
|
+
measurement_period: Annotated[
|
|
98
|
+
MeasurementPeriod, Field(description='Time period for performance measurement')
|
|
99
|
+
]
|
|
100
|
+
media_buy_id: Annotated[
|
|
101
|
+
str | None, Field(description="Publisher's media buy identifier", min_length=1)
|
|
102
|
+
] = None
|
|
103
|
+
metric_type: Annotated[
|
|
104
|
+
metric_type_1.MetricType | None, Field(description='The business metric being measured')
|
|
105
|
+
] = metric_type_1.MetricType.overall_performance
|
|
72
106
|
package_id: Annotated[
|
|
73
107
|
str | None,
|
|
74
108
|
Field(
|
|
@@ -83,3 +117,15 @@ class ProvidePerformanceFeedbackRequest(AdCPBaseModel):
|
|
|
83
117
|
ge=0.0,
|
|
84
118
|
),
|
|
85
119
|
]
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class ProvidePerformanceFeedbackRequest(
|
|
123
|
+
RootModel[ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2]
|
|
124
|
+
):
|
|
125
|
+
root: Annotated[
|
|
126
|
+
ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2,
|
|
127
|
+
Field(
|
|
128
|
+
description='Request payload for provide_performance_feedback task',
|
|
129
|
+
title='Provide Performance Feedback Request',
|
|
130
|
+
),
|
|
131
|
+
]
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: publisher-property-selector.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T20:45:16+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
from typing import Annotated, Literal
|
|
8
8
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
|
-
from pydantic import ConfigDict, Field
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from . import property_id, property_tag
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
class PublisherPropertySelector1(AdCPBaseModel):
|
|
@@ -29,16 +31,12 @@ class PublisherPropertySelector1(AdCPBaseModel):
|
|
|
29
31
|
]
|
|
30
32
|
|
|
31
33
|
|
|
32
|
-
class PropertyId(RootModel[str]):
|
|
33
|
-
root: Annotated[str, Field(pattern='^[a-z0-9_]+$')]
|
|
34
|
-
|
|
35
|
-
|
|
36
34
|
class PublisherPropertySelector2(AdCPBaseModel):
|
|
37
35
|
model_config = ConfigDict(
|
|
38
36
|
extra='forbid',
|
|
39
37
|
)
|
|
40
38
|
property_ids: Annotated[
|
|
41
|
-
list[PropertyId],
|
|
39
|
+
list[property_id.PropertyId],
|
|
42
40
|
Field(description="Specific property IDs from the publisher's adagents.json", min_length=1),
|
|
43
41
|
]
|
|
44
42
|
publisher_domain: Annotated[
|
|
@@ -54,16 +52,12 @@ class PublisherPropertySelector2(AdCPBaseModel):
|
|
|
54
52
|
]
|
|
55
53
|
|
|
56
54
|
|
|
57
|
-
class PropertyTag(PropertyId):
|
|
58
|
-
pass
|
|
59
|
-
|
|
60
|
-
|
|
61
55
|
class PublisherPropertySelector3(AdCPBaseModel):
|
|
62
56
|
model_config = ConfigDict(
|
|
63
57
|
extra='forbid',
|
|
64
58
|
)
|
|
65
59
|
property_tags: Annotated[
|
|
66
|
-
list[PropertyTag],
|
|
60
|
+
list[property_tag.PropertyTag],
|
|
67
61
|
Field(
|
|
68
62
|
description="Property tags from the publisher's adagents.json. Selector covers all properties with these tags",
|
|
69
63
|
min_length=1,
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: push-notification-config.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-21T12:49:05+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from enum import Enum
|
|
8
7
|
from typing import Annotated
|
|
9
8
|
|
|
10
9
|
from adcp.types.base import AdCPBaseModel
|
|
11
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
class Scheme(Enum):
|
|
15
|
-
Bearer = 'Bearer'
|
|
16
|
-
HMAC_SHA256 = 'HMAC-SHA256'
|
|
12
|
+
from . import auth_scheme
|
|
17
13
|
|
|
18
14
|
|
|
19
15
|
class Authentication(AdCPBaseModel):
|
|
@@ -28,7 +24,7 @@ class Authentication(AdCPBaseModel):
|
|
|
28
24
|
),
|
|
29
25
|
]
|
|
30
26
|
schemes: Annotated[
|
|
31
|
-
list[
|
|
27
|
+
list[auth_scheme.AuthenticationScheme],
|
|
32
28
|
Field(
|
|
33
29
|
description="Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)",
|
|
34
30
|
max_length=1,
|