adcp 2.11.1__py3-none-any.whl → 2.12.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/ADCP_VERSION +1 -0
- adcp/__init__.py +24 -3
- adcp/__main__.py +31 -3
- adcp/client.py +16 -0
- adcp/protocols/a2a.py +178 -25
- adcp/protocols/base.py +23 -4
- adcp/protocols/mcp.py +44 -0
- adcp/types/__init__.py +2 -26
- adcp/types/_generated.py +179 -158
- adcp/types/generated_poc/adagents.py +221 -25
- adcp/types/generated_poc/core/__init__.py +3 -0
- adcp/types/generated_poc/{activation_key.py → core/activation_key.py} +2 -2
- adcp/types/generated_poc/core/assets/__init__.py +3 -0
- adcp/types/generated_poc/{audio_asset.py → core/assets/audio_asset.py} +2 -2
- adcp/types/generated_poc/{css_asset.py → core/assets/css_asset.py} +2 -2
- adcp/types/generated_poc/{daast_asset.py → core/assets/daast_asset.py} +4 -4
- adcp/types/generated_poc/{html_asset.py → core/assets/html_asset.py} +2 -2
- adcp/types/generated_poc/core/assets/image_asset.py +19 -0
- adcp/types/generated_poc/{javascript_asset.py → core/assets/javascript_asset.py} +3 -3
- adcp/types/generated_poc/{text_asset.py → core/assets/text_asset.py} +2 -2
- adcp/types/generated_poc/{url_asset.py → core/assets/url_asset.py} +3 -3
- adcp/types/generated_poc/{vast_asset.py → core/assets/vast_asset.py} +4 -4
- adcp/types/generated_poc/{video_asset.py → core/assets/video_asset.py} +7 -11
- adcp/types/generated_poc/{webhook_asset.py → core/assets/webhook_asset.py} +3 -3
- adcp/types/generated_poc/{brand_manifest.py → core/brand_manifest.py} +3 -3
- adcp/types/generated_poc/core/context.py +15 -0
- adcp/types/generated_poc/{creative_asset.py → core/creative_asset.py} +25 -6
- adcp/types/generated_poc/{creative_assignment.py → core/creative_assignment.py} +2 -2
- adcp/types/generated_poc/{creative_filters.py → core/creative_filters.py} +12 -3
- adcp/types/generated_poc/{creative_manifest.py → core/creative_manifest.py} +13 -6
- adcp/types/generated_poc/{creative_policy.py → core/creative_policy.py} +3 -3
- adcp/types/generated_poc/{delivery_metrics.py → core/delivery_metrics.py} +2 -2
- adcp/types/generated_poc/{deployment.py → core/deployment.py} +2 -2
- adcp/types/generated_poc/{destination.py → core/destination.py} +2 -2
- adcp/types/generated_poc/core/dimensions.py +18 -0
- adcp/types/generated_poc/{error.py → core/error.py} +2 -2
- adcp/types/generated_poc/core/ext.py +15 -0
- adcp/types/generated_poc/{format.py → core/format.py} +85 -54
- adcp/types/generated_poc/core/format_id.py +50 -0
- adcp/types/generated_poc/{frequency_cap.py → core/frequency_cap.py} +2 -2
- adcp/types/generated_poc/{measurement.py → core/measurement.py} +2 -2
- adcp/types/generated_poc/{media_buy.py → core/media_buy.py} +6 -3
- adcp/types/generated_poc/{package.py → core/package.py} +13 -6
- adcp/types/generated_poc/{performance_feedback.py → core/performance_feedback.py} +4 -4
- adcp/types/generated_poc/{placement.py → core/placement.py} +3 -3
- adcp/types/generated_poc/{product.py → core/product.py} +16 -6
- adcp/types/generated_poc/core/product_filters.py +97 -0
- adcp/types/generated_poc/{promoted_offerings.py → core/promoted_offerings.py} +2 -2
- adcp/types/generated_poc/{promoted_products.py → core/promoted_products.py} +2 -2
- adcp/types/generated_poc/{property.py → core/property.py} +5 -4
- adcp/types/generated_poc/{property_id.py → core/property_id.py} +2 -2
- adcp/types/generated_poc/{property_tag.py → core/property_tag.py} +2 -2
- adcp/types/generated_poc/{protocol_envelope.py → core/protocol_envelope.py} +3 -3
- adcp/types/generated_poc/{publisher_property_selector.py → core/publisher_property_selector.py} +2 -2
- adcp/types/generated_poc/{push_notification_config.py → core/push_notification_config.py} +3 -3
- adcp/types/generated_poc/{reporting_capabilities.py → core/reporting_capabilities.py} +3 -3
- adcp/types/generated_poc/{response.py → core/response.py} +2 -2
- adcp/types/generated_poc/{signal_filters.py → core/signal_filters.py} +3 -3
- adcp/types/generated_poc/{sub_asset.py → core/sub_asset.py} +2 -2
- adcp/types/generated_poc/{targeting.py → core/targeting.py} +2 -2
- adcp/types/generated_poc/{webhook_payload.py → core/webhook_payload.py} +4 -4
- adcp/types/generated_poc/creative/__init__.py +3 -0
- adcp/types/generated_poc/creative/list_creative_formats_request.py +88 -0
- adcp/types/generated_poc/creative/list_creative_formats_response.py +55 -0
- adcp/types/generated_poc/{preview_creative_request.py → creative/preview_creative_request.py} +13 -18
- adcp/types/generated_poc/{preview_creative_response.py → creative/preview_creative_response.py} +8 -14
- adcp/types/generated_poc/{preview_render.py → creative/preview_render.py} +2 -2
- adcp/types/generated_poc/enums/__init__.py +3 -0
- adcp/types/generated_poc/{adcp_domain.py → enums/adcp_domain.py} +2 -2
- adcp/types/generated_poc/{asset_content_type.py → enums/asset_content_type.py} +2 -2
- adcp/types/generated_poc/{auth_scheme.py → enums/auth_scheme.py} +2 -2
- adcp/types/generated_poc/{available_metric.py → enums/available_metric.py} +2 -2
- adcp/types/generated_poc/{channels.py → enums/channels.py} +2 -2
- adcp/types/generated_poc/{co_branding_requirement.py → enums/co_branding_requirement.py} +2 -2
- adcp/types/generated_poc/{creative_action.py → enums/creative_action.py} +2 -2
- adcp/types/generated_poc/{creative_agent_capability.py → enums/creative_agent_capability.py} +2 -2
- adcp/types/generated_poc/{creative_sort_field.py → enums/creative_sort_field.py} +2 -2
- adcp/types/generated_poc/{creative_status.py → enums/creative_status.py} +2 -2
- adcp/types/generated_poc/{daast_tracking_event.py → enums/daast_tracking_event.py} +2 -2
- adcp/types/generated_poc/{daast_version.py → enums/daast_version.py} +2 -2
- adcp/types/generated_poc/{delivery_type.py → enums/delivery_type.py} +2 -2
- adcp/types/generated_poc/{dimension_unit.py → enums/dimension_unit.py} +2 -2
- adcp/types/generated_poc/{feed_format.py → enums/feed_format.py} +2 -2
- adcp/types/generated_poc/{feedback_source.py → enums/feedback_source.py} +2 -2
- adcp/types/generated_poc/{format_category.py → enums/format_category.py} +2 -2
- adcp/types/generated_poc/enums/format_id_parameter.py +12 -0
- adcp/types/generated_poc/{frequency_cap_scope.py → enums/frequency_cap_scope.py} +2 -2
- adcp/types/generated_poc/{history_entry_type.py → enums/history_entry_type.py} +2 -2
- adcp/types/generated_poc/{http_method.py → enums/http_method.py} +2 -2
- adcp/types/generated_poc/{identifier_types.py → enums/identifier_types.py} +2 -2
- adcp/types/generated_poc/{javascript_module_type.py → enums/javascript_module_type.py} +2 -2
- adcp/types/generated_poc/{landing_page_requirement.py → enums/landing_page_requirement.py} +2 -2
- adcp/types/generated_poc/{markdown_flavor.py → enums/markdown_flavor.py} +2 -2
- adcp/types/generated_poc/{media_buy_status.py → enums/media_buy_status.py} +2 -2
- adcp/types/generated_poc/{metric_type.py → enums/metric_type.py} +2 -2
- adcp/types/generated_poc/{notification_type.py → enums/notification_type.py} +2 -2
- adcp/types/generated_poc/{pacing.py → enums/pacing.py} +2 -2
- adcp/types/generated_poc/{preview_output_format.py → enums/preview_output_format.py} +2 -2
- adcp/types/generated_poc/{pricing_model.py → enums/pricing_model.py} +2 -2
- adcp/types/generated_poc/{property_type.py → enums/property_type.py} +2 -2
- adcp/types/generated_poc/{publisher_identifier_types.py → enums/publisher_identifier_types.py} +2 -2
- adcp/types/generated_poc/{reporting_frequency.py → enums/reporting_frequency.py} +2 -2
- adcp/types/generated_poc/{signal_catalog_type.py → enums/signal_catalog_type.py} +2 -2
- adcp/types/generated_poc/{sort_direction.py → enums/sort_direction.py} +2 -2
- adcp/types/generated_poc/{standard_format_ids.py → enums/standard_format_ids.py} +2 -2
- adcp/types/generated_poc/{task_status.py → enums/task_status.py} +2 -2
- adcp/types/generated_poc/{task_type.py → enums/task_type.py} +2 -2
- adcp/types/generated_poc/{update_frequency.py → enums/update_frequency.py} +2 -2
- adcp/types/generated_poc/{url_asset_type.py → enums/url_asset_type.py} +2 -2
- adcp/types/generated_poc/{validation_mode.py → enums/validation_mode.py} +2 -2
- adcp/types/generated_poc/{vast_tracking_event.py → enums/vast_tracking_event.py} +2 -2
- adcp/types/generated_poc/{vast_version.py → enums/vast_version.py} +2 -2
- adcp/types/generated_poc/{webhook_response_type.py → enums/webhook_response_type.py} +2 -2
- adcp/types/generated_poc/{webhook_security_method.py → enums/webhook_security_method.py} +2 -2
- adcp/types/generated_poc/media_buy/__init__.py +3 -0
- adcp/types/generated_poc/{build_creative_request.py → media_buy/build_creative_request.py} +9 -11
- adcp/types/generated_poc/{build_creative_response.py → media_buy/build_creative_response.py} +11 -17
- adcp/types/generated_poc/{create_media_buy_request.py → media_buy/create_media_buy_request.py} +9 -11
- adcp/types/generated_poc/{create_media_buy_response.py → media_buy/create_media_buy_response.py} +11 -16
- adcp/types/generated_poc/{get_media_buy_delivery_request.py → media_buy/get_media_buy_delivery_request.py} +8 -10
- adcp/types/generated_poc/{get_media_buy_delivery_response.py → media_buy/get_media_buy_delivery_response.py} +27 -12
- adcp/types/generated_poc/{get_products_request.py → media_buy/get_products_request.py} +9 -11
- adcp/types/generated_poc/{get_products_response.py → media_buy/get_products_response.py} +9 -10
- adcp/types/generated_poc/{list_authorized_properties_request.py → media_buy/list_authorized_properties_request.py} +8 -9
- adcp/types/generated_poc/{list_authorized_properties_response.py → media_buy/list_authorized_properties_response.py} +9 -10
- adcp/types/generated_poc/{list_creative_formats_request.py → media_buy/list_creative_formats_request.py} +9 -10
- adcp/types/generated_poc/{list_creative_formats_response.py → media_buy/list_creative_formats_response.py} +10 -10
- adcp/types/generated_poc/{list_creatives_request.py → media_buy/list_creatives_request.py} +9 -10
- adcp/types/generated_poc/{list_creatives_response.py → media_buy/list_creatives_response.py} +14 -15
- adcp/types/generated_poc/{package_request.py → media_buy/package_request.py} +7 -5
- adcp/types/generated_poc/{provide_performance_feedback_request.py → media_buy/provide_performance_feedback_request.py} +11 -17
- adcp/types/generated_poc/{provide_performance_feedback_response.py → media_buy/provide_performance_feedback_response.py} +10 -16
- adcp/types/generated_poc/{sync_creatives_request.py → media_buy/sync_creatives_request.py} +14 -15
- adcp/types/generated_poc/{sync_creatives_response.py → media_buy/sync_creatives_response.py} +11 -16
- adcp/types/generated_poc/{update_media_buy_request.py → media_buy/update_media_buy_request.py} +63 -28
- adcp/types/generated_poc/{update_media_buy_response.py → media_buy/update_media_buy_response.py} +11 -16
- adcp/types/generated_poc/pricing_options/__init__.py +3 -0
- adcp/types/generated_poc/{cpc_option.py → pricing_options/cpc_option.py} +2 -2
- adcp/types/generated_poc/{cpcv_option.py → pricing_options/cpcv_option.py} +2 -2
- adcp/types/generated_poc/{cpm_auction_option.py → pricing_options/cpm_auction_option.py} +2 -2
- adcp/types/generated_poc/{cpm_fixed_option.py → pricing_options/cpm_fixed_option.py} +2 -2
- adcp/types/generated_poc/{cpp_option.py → pricing_options/cpp_option.py} +2 -2
- adcp/types/generated_poc/{cpv_option.py → pricing_options/cpv_option.py} +2 -2
- adcp/types/generated_poc/{flat_rate_option.py → pricing_options/flat_rate_option.py} +2 -2
- adcp/types/generated_poc/{vcpm_auction_option.py → pricing_options/vcpm_auction_option.py} +2 -2
- adcp/types/generated_poc/{vcpm_fixed_option.py → pricing_options/vcpm_fixed_option.py} +2 -2
- adcp/types/generated_poc/protocols/__init__.py +3 -0
- adcp/types/generated_poc/protocols/adcp_extension.py +37 -0
- adcp/types/generated_poc/signals/__init__.py +3 -0
- adcp/types/generated_poc/{activate_signal_request.py → signals/activate_signal_request.py} +8 -10
- adcp/types/generated_poc/{activate_signal_response.py → signals/activate_signal_response.py} +10 -16
- adcp/types/generated_poc/{get_signals_request.py → signals/get_signals_request.py} +9 -10
- adcp/types/generated_poc/{get_signals_response.py → signals/get_signals_response.py} +9 -10
- adcp/utils/preview_cache.py +15 -3
- {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/METADATA +1 -1
- adcp-2.12.1.dist-info/RECORD +176 -0
- adcp/types/generated_poc/format_id.py +0 -29
- adcp/types/generated_poc/image_asset.py +0 -23
- adcp/types/generated_poc/markdown_asset.py +0 -39
- adcp/types/generated_poc/package_status.py +0 -14
- adcp/types/generated_poc/product_filters.py +0 -36
- adcp/types/generated_poc/tasks_get_request.py +0 -29
- adcp/types/generated_poc/tasks_get_response.py +0 -112
- adcp/types/generated_poc/tasks_list_request.py +0 -115
- adcp/types/generated_poc/tasks_list_response.py +0 -122
- adcp-2.11.1.dist-info/RECORD +0 -166
- {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/WHEEL +0 -0
- {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/entry_points.txt +0 -0
- {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/top_level.txt +0 -0
|
@@ -1,15 +1,35 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: adagents.json
|
|
3
|
-
# timestamp: 2025-11-
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+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 AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field
|
|
10
|
+
from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field, RootModel
|
|
11
11
|
|
|
12
|
-
from . import property, property_id, property_tag, publisher_property_selector
|
|
12
|
+
from .core import property, property_id, property_tag, publisher_property_selector
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class AuthorizedSalesAgents1(AdCPBaseModel):
|
|
16
|
+
model_config = ConfigDict(
|
|
17
|
+
extra='forbid',
|
|
18
|
+
)
|
|
19
|
+
field_schema: Annotated[
|
|
20
|
+
str | None,
|
|
21
|
+
Field(alias='$schema', description='JSON Schema identifier for this adagents.json file'),
|
|
22
|
+
] = 'https://adcontextprotocol.org/schemas/adagents.json'
|
|
23
|
+
authoritative_location: Annotated[
|
|
24
|
+
AnyUrl,
|
|
25
|
+
Field(
|
|
26
|
+
description='HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data.'
|
|
27
|
+
),
|
|
28
|
+
]
|
|
29
|
+
last_updated: Annotated[
|
|
30
|
+
AwareDatetime | None,
|
|
31
|
+
Field(description='ISO 8601 timestamp indicating when this reference was last updated'),
|
|
32
|
+
] = None
|
|
13
33
|
|
|
14
34
|
|
|
15
35
|
class Contact(AdCPBaseModel):
|
|
@@ -117,13 +137,15 @@ class AuthorizedAgents1(AdCPBaseModel):
|
|
|
117
137
|
url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
|
|
118
138
|
|
|
119
139
|
|
|
120
|
-
class
|
|
140
|
+
class AuthorizedAgents3(AdCPBaseModel):
|
|
121
141
|
model_config = ConfigDict(
|
|
122
142
|
extra='forbid',
|
|
123
143
|
)
|
|
124
144
|
authorization_type: Annotated[
|
|
125
|
-
Literal['
|
|
126
|
-
Field(
|
|
145
|
+
Literal['publisher_properties'],
|
|
146
|
+
Field(
|
|
147
|
+
description='Discriminator indicating authorization for properties from other publisher domains'
|
|
148
|
+
),
|
|
127
149
|
]
|
|
128
150
|
authorized_for: Annotated[
|
|
129
151
|
str,
|
|
@@ -133,25 +155,27 @@ class AuthorizedAgents2(AdCPBaseModel):
|
|
|
133
155
|
min_length=1,
|
|
134
156
|
),
|
|
135
157
|
]
|
|
136
|
-
|
|
137
|
-
list[
|
|
158
|
+
publisher_properties: Annotated[
|
|
159
|
+
list[
|
|
160
|
+
publisher_property_selector.PublisherPropertySelector1
|
|
161
|
+
| publisher_property_selector.PublisherPropertySelector2
|
|
162
|
+
| publisher_property_selector.PublisherPropertySelector3
|
|
163
|
+
],
|
|
138
164
|
Field(
|
|
139
|
-
description='
|
|
165
|
+
description='Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell',
|
|
140
166
|
min_length=1,
|
|
141
167
|
),
|
|
142
168
|
]
|
|
143
169
|
url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
|
|
144
170
|
|
|
145
171
|
|
|
146
|
-
class
|
|
172
|
+
class AuthorizedAgents2(AdCPBaseModel):
|
|
147
173
|
model_config = ConfigDict(
|
|
148
174
|
extra='forbid',
|
|
149
175
|
)
|
|
150
176
|
authorization_type: Annotated[
|
|
151
|
-
Literal['
|
|
152
|
-
Field(
|
|
153
|
-
description='Discriminator indicating authorization for properties from other publisher domains'
|
|
154
|
-
),
|
|
177
|
+
Literal['inline_properties'],
|
|
178
|
+
Field(description='Discriminator indicating authorization by inline property definitions'),
|
|
155
179
|
]
|
|
156
180
|
authorized_for: Annotated[
|
|
157
181
|
str,
|
|
@@ -161,28 +185,24 @@ class AuthorizedAgents3(AdCPBaseModel):
|
|
|
161
185
|
min_length=1,
|
|
162
186
|
),
|
|
163
187
|
]
|
|
164
|
-
|
|
165
|
-
list[
|
|
166
|
-
publisher_property_selector.PublisherPropertySelector1
|
|
167
|
-
| publisher_property_selector.PublisherPropertySelector2
|
|
168
|
-
| publisher_property_selector.PublisherPropertySelector3
|
|
169
|
-
],
|
|
188
|
+
properties: Annotated[
|
|
189
|
+
list[property.Property],
|
|
170
190
|
Field(
|
|
171
|
-
description='
|
|
191
|
+
description='Specific properties this agent is authorized for (alternative to property_ids/property_tags)',
|
|
172
192
|
min_length=1,
|
|
173
193
|
),
|
|
174
194
|
]
|
|
175
195
|
url: Annotated[AnyUrl, Field(description="The authorized agent's API endpoint URL")]
|
|
176
196
|
|
|
177
197
|
|
|
178
|
-
class
|
|
198
|
+
class AuthorizedSalesAgents2(AdCPBaseModel):
|
|
179
199
|
model_config = ConfigDict(
|
|
180
200
|
extra='forbid',
|
|
181
201
|
)
|
|
182
202
|
field_schema: Annotated[
|
|
183
203
|
str | None,
|
|
184
204
|
Field(alias='$schema', description='JSON Schema identifier for this adagents.json file'),
|
|
185
|
-
] = 'https://adcontextprotocol.org/schemas/
|
|
205
|
+
] = 'https://adcontextprotocol.org/schemas/adagents.json'
|
|
186
206
|
authorized_agents: Annotated[
|
|
187
207
|
list[AuthorizedAgents | AuthorizedAgents1 | AuthorizedAgents2 | AuthorizedAgents3],
|
|
188
208
|
Field(
|
|
@@ -203,13 +223,189 @@ class AuthorizedSalesAgents(AdCPBaseModel):
|
|
|
203
223
|
properties: Annotated[
|
|
204
224
|
list[property.Property] | None,
|
|
205
225
|
Field(
|
|
206
|
-
description='Array of all properties covered by this adagents.json file.
|
|
226
|
+
description='Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.',
|
|
207
227
|
min_length=1,
|
|
208
228
|
),
|
|
209
229
|
] = None
|
|
210
230
|
tags: Annotated[
|
|
211
231
|
dict[str, Tags] | None,
|
|
212
232
|
Field(
|
|
213
|
-
description='Metadata for each tag referenced by properties.
|
|
233
|
+
description='Metadata for each tag referenced by properties. Provides human-readable context for property tag values.'
|
|
214
234
|
),
|
|
215
235
|
] = None
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
class AuthorizedSalesAgents(RootModel[AuthorizedSalesAgents1 | AuthorizedSalesAgents2]):
|
|
239
|
+
root: Annotated[
|
|
240
|
+
AuthorizedSalesAgents1 | AuthorizedSalesAgents2,
|
|
241
|
+
Field(
|
|
242
|
+
description='Declaration of authorized sales agents for advertising inventory. Hosted at /.well-known/adagents.json on publisher domains. Can either contain the full structure inline or reference an authoritative URL.',
|
|
243
|
+
examples=[
|
|
244
|
+
{
|
|
245
|
+
'$schema': 'https://adcontextprotocol.org/schemas/adagents.json',
|
|
246
|
+
'authoritative_location': 'https://cdn.example.com/adagents/v2/adagents.json',
|
|
247
|
+
'last_updated': '2025-01-15T10:00:00Z',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
'$schema': 'https://adcontextprotocol.org/schemas/adagents.json',
|
|
251
|
+
'authorized_agents': [
|
|
252
|
+
{
|
|
253
|
+
'authorization_type': 'property_tags',
|
|
254
|
+
'authorized_for': 'Official sales agent',
|
|
255
|
+
'property_tags': ['all'],
|
|
256
|
+
'url': 'https://agent.example.com',
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
'last_updated': '2025-01-10T12:00:00Z',
|
|
260
|
+
'properties': [
|
|
261
|
+
{
|
|
262
|
+
'identifiers': [{'type': 'domain', 'value': 'example.com'}],
|
|
263
|
+
'name': 'Example Site',
|
|
264
|
+
'property_type': 'website',
|
|
265
|
+
'publisher_domain': 'example.com',
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
'tags': {
|
|
269
|
+
'all': {
|
|
270
|
+
'description': 'All properties in this file',
|
|
271
|
+
'name': 'All Properties',
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
'$schema': 'https://adcontextprotocol.org/schemas/adagents.json',
|
|
277
|
+
'authorized_agents': [
|
|
278
|
+
{
|
|
279
|
+
'authorization_type': 'property_tags',
|
|
280
|
+
'authorized_for': 'All Meta properties',
|
|
281
|
+
'property_tags': ['meta_network'],
|
|
282
|
+
'url': 'https://meta-ads.com',
|
|
283
|
+
}
|
|
284
|
+
],
|
|
285
|
+
'contact': {
|
|
286
|
+
'domain': 'meta.com',
|
|
287
|
+
'email': 'adops@meta.com',
|
|
288
|
+
'name': 'Meta Advertising Operations',
|
|
289
|
+
'seller_id': 'pub-meta-12345',
|
|
290
|
+
'tag_id': '12345',
|
|
291
|
+
},
|
|
292
|
+
'last_updated': '2025-01-10T15:30:00Z',
|
|
293
|
+
'properties': [
|
|
294
|
+
{
|
|
295
|
+
'identifiers': [
|
|
296
|
+
{'type': 'ios_bundle', 'value': 'com.burbn.instagram'},
|
|
297
|
+
{'type': 'android_package', 'value': 'com.instagram.android'},
|
|
298
|
+
],
|
|
299
|
+
'name': 'Instagram',
|
|
300
|
+
'property_type': 'mobile_app',
|
|
301
|
+
'publisher_domain': 'instagram.com',
|
|
302
|
+
'tags': ['meta_network', 'social_media'],
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
'identifiers': [
|
|
306
|
+
{'type': 'ios_bundle', 'value': 'com.facebook.Facebook'},
|
|
307
|
+
{'type': 'android_package', 'value': 'com.facebook.katana'},
|
|
308
|
+
],
|
|
309
|
+
'name': 'Facebook',
|
|
310
|
+
'property_type': 'mobile_app',
|
|
311
|
+
'publisher_domain': 'facebook.com',
|
|
312
|
+
'tags': ['meta_network', 'social_media'],
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
'identifiers': [
|
|
316
|
+
{'type': 'ios_bundle', 'value': 'net.whatsapp.WhatsApp'},
|
|
317
|
+
{'type': 'android_package', 'value': 'com.whatsapp'},
|
|
318
|
+
],
|
|
319
|
+
'name': 'WhatsApp',
|
|
320
|
+
'property_type': 'mobile_app',
|
|
321
|
+
'publisher_domain': 'whatsapp.com',
|
|
322
|
+
'tags': ['meta_network', 'messaging'],
|
|
323
|
+
},
|
|
324
|
+
],
|
|
325
|
+
'tags': {
|
|
326
|
+
'messaging': {
|
|
327
|
+
'description': 'Messaging and communication apps',
|
|
328
|
+
'name': 'Messaging Apps',
|
|
329
|
+
},
|
|
330
|
+
'meta_network': {
|
|
331
|
+
'description': 'All Meta-owned properties',
|
|
332
|
+
'name': 'Meta Network',
|
|
333
|
+
},
|
|
334
|
+
'social_media': {
|
|
335
|
+
'description': 'Social networking applications',
|
|
336
|
+
'name': 'Social Media Apps',
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
'$schema': 'https://adcontextprotocol.org/schemas/adagents.json',
|
|
342
|
+
'authorized_agents': [
|
|
343
|
+
{
|
|
344
|
+
'authorization_type': 'property_tags',
|
|
345
|
+
'authorized_for': 'Tumblr corporate properties only',
|
|
346
|
+
'property_tags': ['corporate'],
|
|
347
|
+
'url': 'https://tumblr-sales.com',
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
'contact': {'name': 'Tumblr Advertising'},
|
|
351
|
+
'last_updated': '2025-01-10T16:00:00Z',
|
|
352
|
+
'properties': [
|
|
353
|
+
{
|
|
354
|
+
'identifiers': [{'type': 'domain', 'value': 'tumblr.com'}],
|
|
355
|
+
'name': 'Tumblr Corporate',
|
|
356
|
+
'property_type': 'website',
|
|
357
|
+
'publisher_domain': 'tumblr.com',
|
|
358
|
+
'tags': ['corporate'],
|
|
359
|
+
}
|
|
360
|
+
],
|
|
361
|
+
'tags': {
|
|
362
|
+
'corporate': {
|
|
363
|
+
'description': 'Tumblr-owned corporate properties (not user blogs)',
|
|
364
|
+
'name': 'Corporate Properties',
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
'$schema': 'https://adcontextprotocol.org/schemas/adagents.json',
|
|
370
|
+
'authorized_agents': [
|
|
371
|
+
{
|
|
372
|
+
'authorization_type': 'publisher_properties',
|
|
373
|
+
'authorized_for': 'CNN CTV properties via publisher authorization',
|
|
374
|
+
'publisher_properties': [
|
|
375
|
+
{
|
|
376
|
+
'property_ids': ['cnn_ctv_app'],
|
|
377
|
+
'publisher_domain': 'cnn.com',
|
|
378
|
+
'selection_type': 'by_id',
|
|
379
|
+
}
|
|
380
|
+
],
|
|
381
|
+
'url': 'https://agent.example/api',
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
'authorization_type': 'publisher_properties',
|
|
385
|
+
'authorized_for': 'All CTV properties from multiple publishers',
|
|
386
|
+
'publisher_properties': [
|
|
387
|
+
{
|
|
388
|
+
'property_tags': ['ctv'],
|
|
389
|
+
'publisher_domain': 'cnn.com',
|
|
390
|
+
'selection_type': 'by_tag',
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
'property_tags': ['ctv'],
|
|
394
|
+
'publisher_domain': 'espn.com',
|
|
395
|
+
'selection_type': 'by_tag',
|
|
396
|
+
},
|
|
397
|
+
],
|
|
398
|
+
'url': 'https://agent.example/api',
|
|
399
|
+
},
|
|
400
|
+
],
|
|
401
|
+
'contact': {
|
|
402
|
+
'domain': 'agent.example',
|
|
403
|
+
'email': 'sales@agent.example',
|
|
404
|
+
'name': 'Example Third-Party Sales Agent',
|
|
405
|
+
},
|
|
406
|
+
'last_updated': '2025-01-10T17:00:00Z',
|
|
407
|
+
},
|
|
408
|
+
],
|
|
409
|
+
title='Authorized Sales Agents',
|
|
410
|
+
),
|
|
411
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/assets/daast_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,8 +9,8 @@ from typing import Annotated, Literal
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from
|
|
12
|
+
from ...enums import daast_tracking_event
|
|
13
|
+
from ...enums import daast_version as daast_version_1
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class DaastAsset1(AdCPBaseModel):
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: core/assets/image_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T19:16:02+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from pydantic import AnyUrl, Field
|
|
10
|
+
|
|
11
|
+
from ..dimensions import Dimensions
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ImageAsset(Dimensions):
|
|
15
|
+
alt_text: Annotated[str | None, Field(description='Alternative text for accessibility')] = None
|
|
16
|
+
format: Annotated[
|
|
17
|
+
str | None, Field(description='Image file format (jpg, png, gif, webp, etc.)')
|
|
18
|
+
] = None
|
|
19
|
+
url: Annotated[AnyUrl, Field(description='URL to the image asset')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/assets/javascript_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ from typing import Annotated
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from ...enums import javascript_module_type
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class JavascriptAsset(AdCPBaseModel):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/assets/url_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ from typing import Annotated
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from ...enums import url_asset_type
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class UrlAsset(AdCPBaseModel):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/assets/vast_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,8 +9,8 @@ from typing import Annotated, Literal
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from
|
|
12
|
+
from ...enums import vast_tracking_event
|
|
13
|
+
from ...enums import vast_version as vast_version_1
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class VastAsset1(AdCPBaseModel):
|
|
@@ -1,28 +1,24 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/assets/video_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T19:16:02+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
from typing import Annotated
|
|
8
8
|
|
|
9
|
-
from
|
|
10
|
-
from pydantic import AnyUrl, ConfigDict, Field
|
|
9
|
+
from pydantic import AnyUrl, Field
|
|
11
10
|
|
|
11
|
+
from ..dimensions import Dimensions
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
extra='forbid',
|
|
16
|
-
)
|
|
13
|
+
|
|
14
|
+
class VideoAsset(Dimensions):
|
|
17
15
|
bitrate_kbps: Annotated[
|
|
18
16
|
int | None, Field(description='Video bitrate in kilobits per second', ge=1)
|
|
19
17
|
] = None
|
|
20
18
|
duration_ms: Annotated[
|
|
21
|
-
int | None, Field(description='Video duration in milliseconds', ge=
|
|
19
|
+
int | None, Field(description='Video duration in milliseconds', ge=1)
|
|
22
20
|
] = None
|
|
23
21
|
format: Annotated[str | None, Field(description='Video file format (mp4, webm, mov, etc.)')] = (
|
|
24
22
|
None
|
|
25
23
|
)
|
|
26
|
-
height: Annotated[int | None, Field(description='Video height in pixels', ge=1)] = None
|
|
27
24
|
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
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/assets/webhook_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ from typing import Annotated
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import AnyUrl, ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from ...enums import http_method, webhook_response_type, webhook_security_method
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class Security(AdCPBaseModel):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/brand_manifest.json
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ from typing import Annotated, Any
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
11
|
from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field
|
|
12
12
|
|
|
13
|
-
from
|
|
13
|
+
from ..enums import asset_content_type
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class Asset(AdCPBaseModel):
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: core/context.json
|
|
3
|
+
# timestamp: 2025-11-22T15:23:24+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from adcp.types.base import AdCPBaseModel
|
|
8
|
+
from pydantic import ConfigDict
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ContextObject(AdCPBaseModel):
|
|
12
|
+
pass
|
|
13
|
+
model_config = ConfigDict(
|
|
14
|
+
extra='allow',
|
|
15
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2025-11-
|
|
2
|
+
# filename: core/creative_asset.json
|
|
3
|
+
# timestamp: 2025-11-22T19:54:03+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -9,13 +9,15 @@ from typing import Annotated
|
|
|
9
9
|
from adcp.types.base import AdCPBaseModel
|
|
10
10
|
from pydantic import ConfigDict, Field
|
|
11
11
|
|
|
12
|
-
from . import audio_asset, css_asset, daast_asset
|
|
13
12
|
from . import format_id as format_id_1
|
|
14
|
-
from . import
|
|
13
|
+
from . import promoted_offerings
|
|
14
|
+
from .assets import (
|
|
15
|
+
audio_asset,
|
|
16
|
+
css_asset,
|
|
17
|
+
daast_asset,
|
|
15
18
|
html_asset,
|
|
16
19
|
image_asset,
|
|
17
20
|
javascript_asset,
|
|
18
|
-
promoted_offerings,
|
|
19
21
|
text_asset,
|
|
20
22
|
url_asset,
|
|
21
23
|
vast_asset,
|
|
@@ -69,7 +71,9 @@ class CreativeAsset(AdCPBaseModel):
|
|
|
69
71
|
creative_id: Annotated[str, Field(description='Unique identifier for the creative')]
|
|
70
72
|
format_id: Annotated[
|
|
71
73
|
format_id_1.FormatId,
|
|
72
|
-
Field(
|
|
74
|
+
Field(
|
|
75
|
+
description='Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats.'
|
|
76
|
+
),
|
|
73
77
|
]
|
|
74
78
|
inputs: Annotated[
|
|
75
79
|
list[Input] | None,
|
|
@@ -78,6 +82,21 @@ class CreativeAsset(AdCPBaseModel):
|
|
|
78
82
|
),
|
|
79
83
|
] = None
|
|
80
84
|
name: Annotated[str, Field(description='Human-readable creative name')]
|
|
85
|
+
placement_ids: Annotated[
|
|
86
|
+
list[str] | None,
|
|
87
|
+
Field(
|
|
88
|
+
description="Optional array of placement IDs where this creative should run when uploading via create_media_buy or update_media_buy. References placement_id values from the product's placements array. If omitted, creative runs on all placements. Only used during upload to media buy - not stored in creative library.",
|
|
89
|
+
min_length=1,
|
|
90
|
+
),
|
|
91
|
+
] = None
|
|
81
92
|
tags: Annotated[
|
|
82
93
|
list[str] | None, Field(description='User-defined tags for organization and searchability')
|
|
83
94
|
] = None
|
|
95
|
+
weight: Annotated[
|
|
96
|
+
float | None,
|
|
97
|
+
Field(
|
|
98
|
+
description='Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.',
|
|
99
|
+
ge=0.0,
|
|
100
|
+
le=100.0,
|
|
101
|
+
),
|
|
102
|
+
] = None
|