adcp 2.18.0__py3-none-any.whl → 2.19.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- adcp/__init__.py +1 -1
- adcp/protocols/mcp.py +3 -1
- adcp/types/_ergonomic.py +0 -4
- adcp/types/_generated.py +85 -4
- adcp/types/generated_poc/adagents.py +239 -149
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +5 -5
- adcp/types/generated_poc/core/assets/css_asset.py +2 -2
- adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/html_asset.py +2 -2
- adcp/types/generated_poc/core/assets/image_asset.py +6 -6
- adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
- adcp/types/generated_poc/core/assets/text_asset.py +2 -2
- adcp/types/generated_poc/core/assets/url_asset.py +3 -3
- adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
- adcp/types/generated_poc/core/assets/video_asset.py +7 -7
- adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
- adcp/types/generated_poc/core/async_response_data.py +2 -2
- adcp/types/generated_poc/core/brand_manifest.py +55 -55
- adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
- adcp/types/generated_poc/core/context.py +1 -1
- adcp/types/generated_poc/core/creative_asset.py +13 -13
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +19 -19
- adcp/types/generated_poc/core/creative_manifest.py +2 -2
- adcp/types/generated_poc/core/creative_policy.py +4 -4
- adcp/types/generated_poc/core/delivery_metrics.py +32 -32
- adcp/types/generated_poc/core/deployment.py +20 -20
- adcp/types/generated_poc/core/destination.py +11 -11
- adcp/types/generated_poc/core/error.py +6 -6
- adcp/types/generated_poc/core/ext.py +1 -1
- adcp/types/generated_poc/core/format.py +67 -66
- adcp/types/generated_poc/core/format_id.py +5 -5
- adcp/types/generated_poc/core/frequency_cap.py +2 -2
- adcp/types/generated_poc/core/identifier.py +27 -0
- adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
- adcp/types/generated_poc/core/measurement.py +8 -8
- adcp/types/generated_poc/core/media_buy.py +7 -7
- adcp/types/generated_poc/core/package.py +8 -8
- adcp/types/generated_poc/core/performance_feedback.py +18 -18
- adcp/types/generated_poc/core/placement.py +4 -4
- adcp/types/generated_poc/core/pricing_option.py +2 -2
- adcp/types/generated_poc/core/product.py +20 -20
- adcp/types/generated_poc/core/product_filters.py +18 -18
- adcp/types/generated_poc/core/promoted_offerings.py +20 -20
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +9 -9
- adcp/types/generated_poc/core/property_id.py +4 -4
- adcp/types/generated_poc/core/property_list_ref.py +26 -0
- adcp/types/generated_poc/core/property_tag.py +4 -4
- adcp/types/generated_poc/core/protocol_envelope.py +8 -8
- adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
- adcp/types/generated_poc/core/push_notification_config.py +5 -5
- adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
- adcp/types/generated_poc/core/response.py +4 -4
- adcp/types/generated_poc/core/signal_filters.py +5 -5
- adcp/types/generated_poc/core/start_timing.py +5 -5
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +8 -8
- adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
- adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
- adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +5 -3
- adcp/types/generated_poc/enums/asset_content_type.py +13 -13
- adcp/types/generated_poc/enums/auth_scheme.py +2 -2
- adcp/types/generated_poc/enums/available_metric.py +9 -9
- adcp/types/generated_poc/enums/channels.py +9 -9
- adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
- adcp/types/generated_poc/enums/creative_action.py +5 -5
- adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
- adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
- adcp/types/generated_poc/enums/creative_status.py +4 -4
- adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
- adcp/types/generated_poc/enums/daast_version.py +2 -2
- adcp/types/generated_poc/enums/delivery_type.py +2 -2
- adcp/types/generated_poc/enums/dimension_unit.py +4 -4
- adcp/types/generated_poc/enums/feed_format.py +3 -3
- adcp/types/generated_poc/enums/feedback_source.py +4 -4
- adcp/types/generated_poc/enums/format_category.py +7 -7
- adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
- adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
- adcp/types/generated_poc/enums/history_entry_type.py +2 -2
- adcp/types/generated_poc/enums/http_method.py +2 -2
- adcp/types/generated_poc/enums/identifier_types.py +19 -19
- adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
- adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
- adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
- adcp/types/generated_poc/enums/media_buy_status.py +4 -4
- adcp/types/generated_poc/enums/metric_type.py +8 -8
- adcp/types/generated_poc/enums/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- adcp/types/generated_poc/enums/preview_output_format.py +2 -2
- adcp/types/generated_poc/enums/pricing_model.py +7 -7
- adcp/types/generated_poc/enums/property_type.py +7 -7
- adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
- adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
- adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
- adcp/types/generated_poc/enums/sort_direction.py +2 -2
- adcp/types/generated_poc/enums/standard_format_ids.py +35 -35
- adcp/types/generated_poc/enums/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +12 -6
- adcp/types/generated_poc/enums/update_frequency.py +4 -4
- adcp/types/generated_poc/enums/url_asset_type.py +3 -3
- adcp/types/generated_poc/enums/validation_mode.py +2 -2
- adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
- adcp/types/generated_poc/enums/vast_version.py +5 -5
- adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
- adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
- adcp/types/generated_poc/extensions/__init__.py +3 -0
- adcp/types/generated_poc/extensions/extension_meta.py +50 -0
- adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
- adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +25 -25
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +7 -7
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
- adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +10 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +3 -3
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +7 -7
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
- adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +52 -52
- adcp/types/generated_poc/media_buy/package_request.py +16 -7
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +15 -15
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +37 -29
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpcv_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +8 -8
- adcp/types/generated_poc/pricing_options/cpp_option.py +13 -13
- adcp/types/generated_poc/pricing_options/cpv_option.py +12 -12
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +15 -15
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +13 -13
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +8 -8
- adcp/types/generated_poc/property/__init__.py +3 -0
- adcp/types/generated_poc/property/base_property_source.py +86 -0
- adcp/types/generated_poc/property/create_property_list_request.py +43 -0
- adcp/types/generated_poc/property/create_property_list_response.py +27 -0
- adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
- adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
- adcp/types/generated_poc/property/feature_requirement.py +42 -0
- adcp/types/generated_poc/property/get_property_list_request.py +34 -0
- adcp/types/generated_poc/property/get_property_list_response.py +61 -0
- adcp/types/generated_poc/property/list_property_features_request.py +25 -0
- adcp/types/generated_poc/property/list_property_features_response.py +24 -0
- adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
- adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
- adcp/types/generated_poc/property/property_error.py +33 -0
- adcp/types/generated_poc/property/property_feature.py +22 -0
- adcp/types/generated_poc/property/property_feature_definition.py +80 -0
- adcp/types/generated_poc/property/property_list.py +62 -0
- adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
- adcp/types/generated_poc/property/property_list_filters.py +47 -0
- adcp/types/generated_poc/property/update_property_list_request.py +46 -0
- adcp/types/generated_poc/property/update_property_list_response.py +21 -0
- adcp/types/generated_poc/protocols/adcp_extension.py +26 -10
- adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
- adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
- adcp/types/generated_poc/signals/get_signals_request.py +8 -8
- adcp/types/generated_poc/signals/get_signals_response.py +15 -15
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
- adcp-2.19.0.dist-info/RECORD +220 -0
- adcp-2.18.0.dist-info/RECORD +0 -195
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
|
@@ -12,22 +12,22 @@ from pydantic import ConfigDict, Field, RootModel
|
|
|
12
12
|
|
|
13
13
|
class ActivationKey1(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
segment_id: Annotated[
|
|
18
18
|
str,
|
|
19
|
-
Field(description=
|
|
19
|
+
Field(description="The platform-specific segment identifier to use in campaign targeting"),
|
|
20
20
|
]
|
|
21
|
-
type: Annotated[Literal[
|
|
21
|
+
type: Annotated[Literal["segment_id"], Field(description="Segment ID based targeting")]
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class ActivationKey2(AdCPBaseModel):
|
|
25
25
|
model_config = ConfigDict(
|
|
26
|
-
extra=
|
|
26
|
+
extra="allow",
|
|
27
27
|
)
|
|
28
|
-
key: Annotated[str, Field(description=
|
|
29
|
-
type: Annotated[Literal[
|
|
30
|
-
value: Annotated[str, Field(description=
|
|
28
|
+
key: Annotated[str, Field(description="The targeting parameter key")]
|
|
29
|
+
type: Annotated[Literal["key_value"], Field(description="Key-value pair based targeting")]
|
|
30
|
+
value: Annotated[str, Field(description="The targeting parameter value")]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]):
|
|
@@ -35,6 +35,6 @@ class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]):
|
|
|
35
35
|
ActivationKey1 | ActivationKey2,
|
|
36
36
|
Field(
|
|
37
37
|
description="Universal identifier for using a signal on a destination platform. Can be either a segment ID or a key-value pair depending on the platform's targeting mechanism.",
|
|
38
|
-
title=
|
|
38
|
+
title="Activation Key",
|
|
39
39
|
),
|
|
40
40
|
]
|
|
@@ -12,15 +12,15 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class AudioAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
bitrate_kbps: Annotated[
|
|
18
|
-
int | None, Field(description=
|
|
18
|
+
int | None, Field(description="Audio bitrate in kilobits per second", ge=1)
|
|
19
19
|
] = None
|
|
20
20
|
duration_ms: Annotated[
|
|
21
|
-
int | None, Field(description=
|
|
21
|
+
int | None, Field(description="Audio duration in milliseconds", ge=0)
|
|
22
22
|
] = None
|
|
23
|
-
format: Annotated[str | None, Field(description=
|
|
23
|
+
format: Annotated[str | None, Field(description="Audio file format (mp3, wav, aac, etc.)")] = (
|
|
24
24
|
None
|
|
25
25
|
)
|
|
26
|
-
url: Annotated[AnyUrl, Field(description=
|
|
26
|
+
url: Annotated[AnyUrl, Field(description="URL to the audio asset")]
|
|
@@ -12,9 +12,9 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class CssAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
content: Annotated[str, Field(description=
|
|
17
|
+
content: Annotated[str, Field(description="CSS content")]
|
|
18
18
|
media: Annotated[
|
|
19
19
|
str | None, Field(description="CSS media query context (e.g., 'screen', 'print')")
|
|
20
20
|
] = None
|
|
@@ -15,49 +15,49 @@ from ...enums import daast_version as daast_version_1
|
|
|
15
15
|
|
|
16
16
|
class DaastAsset1(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra="allow",
|
|
19
19
|
)
|
|
20
20
|
companion_ads: Annotated[
|
|
21
|
-
bool | None, Field(description=
|
|
21
|
+
bool | None, Field(description="Whether companion display ads are included")
|
|
22
22
|
] = None
|
|
23
23
|
daast_version: Annotated[
|
|
24
|
-
daast_version_1.DaastVersion | None, Field(description=
|
|
24
|
+
daast_version_1.DaastVersion | None, Field(description="DAAST specification version")
|
|
25
25
|
] = None
|
|
26
26
|
delivery_type: Annotated[
|
|
27
|
-
Literal[
|
|
28
|
-
Field(description=
|
|
27
|
+
Literal["url"],
|
|
28
|
+
Field(description="Discriminator indicating DAAST is delivered via URL endpoint"),
|
|
29
29
|
]
|
|
30
30
|
duration_ms: Annotated[
|
|
31
|
-
int | None, Field(description=
|
|
31
|
+
int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0)
|
|
32
32
|
] = None
|
|
33
33
|
tracking_events: Annotated[
|
|
34
34
|
list[daast_tracking_event.DaastTrackingEvent] | None,
|
|
35
|
-
Field(description=
|
|
35
|
+
Field(description="Tracking events supported by this DAAST tag"),
|
|
36
36
|
] = None
|
|
37
|
-
url: Annotated[AnyUrl, Field(description=
|
|
37
|
+
url: Annotated[AnyUrl, Field(description="URL endpoint that returns DAAST XML")]
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
class DaastAsset2(AdCPBaseModel):
|
|
41
41
|
model_config = ConfigDict(
|
|
42
|
-
extra=
|
|
42
|
+
extra="allow",
|
|
43
43
|
)
|
|
44
44
|
companion_ads: Annotated[
|
|
45
|
-
bool | None, Field(description=
|
|
45
|
+
bool | None, Field(description="Whether companion display ads are included")
|
|
46
46
|
] = None
|
|
47
|
-
content: Annotated[str, Field(description=
|
|
47
|
+
content: Annotated[str, Field(description="Inline DAAST XML content")]
|
|
48
48
|
daast_version: Annotated[
|
|
49
|
-
daast_version_1.DaastVersion | None, Field(description=
|
|
49
|
+
daast_version_1.DaastVersion | None, Field(description="DAAST specification version")
|
|
50
50
|
] = None
|
|
51
51
|
delivery_type: Annotated[
|
|
52
|
-
Literal[
|
|
53
|
-
Field(description=
|
|
52
|
+
Literal["inline"],
|
|
53
|
+
Field(description="Discriminator indicating DAAST is delivered as inline XML content"),
|
|
54
54
|
]
|
|
55
55
|
duration_ms: Annotated[
|
|
56
|
-
int | None, Field(description=
|
|
56
|
+
int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0)
|
|
57
57
|
] = None
|
|
58
58
|
tracking_events: Annotated[
|
|
59
59
|
list[daast_tracking_event.DaastTrackingEvent] | None,
|
|
60
|
-
Field(description=
|
|
60
|
+
Field(description="Tracking events supported by this DAAST tag"),
|
|
61
61
|
] = None
|
|
62
62
|
|
|
63
63
|
|
|
@@ -65,7 +65,7 @@ class DaastAsset(RootModel[DaastAsset1 | DaastAsset2]):
|
|
|
65
65
|
root: Annotated[
|
|
66
66
|
DaastAsset1 | DaastAsset2,
|
|
67
67
|
Field(
|
|
68
|
-
description=
|
|
69
|
-
title=
|
|
68
|
+
description="DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving",
|
|
69
|
+
title="DAAST Asset",
|
|
70
70
|
),
|
|
71
71
|
]
|
|
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class HtmlAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
content: Annotated[str, Field(description=
|
|
17
|
+
content: Annotated[str, Field(description="HTML content")]
|
|
18
18
|
version: Annotated[str | None, Field(description="HTML version (e.g., 'HTML5')")] = None
|
|
@@ -12,12 +12,12 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class ImageAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
alt_text: Annotated[str | None, Field(description=
|
|
17
|
+
alt_text: Annotated[str | None, Field(description="Alternative text for accessibility")] = None
|
|
18
18
|
format: Annotated[
|
|
19
|
-
str | None, Field(description=
|
|
19
|
+
str | None, Field(description="Image file format (jpg, png, gif, webp, etc.)")
|
|
20
20
|
] = None
|
|
21
|
-
height: Annotated[int, Field(description=
|
|
22
|
-
url: Annotated[AnyUrl, Field(description=
|
|
23
|
-
width: Annotated[int, Field(description=
|
|
21
|
+
height: Annotated[int, Field(description="Height in pixels", ge=1)]
|
|
22
|
+
url: Annotated[AnyUrl, Field(description="URL to the image asset")]
|
|
23
|
+
width: Annotated[int, Field(description="Width in pixels", ge=1)]
|
|
@@ -14,10 +14,10 @@ from ...enums import javascript_module_type
|
|
|
14
14
|
|
|
15
15
|
class JavascriptAsset(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
|
-
content: Annotated[str, Field(description=
|
|
19
|
+
content: Annotated[str, Field(description="JavaScript content")]
|
|
20
20
|
module_type: Annotated[
|
|
21
21
|
javascript_module_type.JavascriptModuleType | None,
|
|
22
|
-
Field(description=
|
|
22
|
+
Field(description="JavaScript module type"),
|
|
23
23
|
] = None
|
|
@@ -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="allow",
|
|
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
|
)
|
|
@@ -14,12 +14,12 @@ from ...enums import url_asset_type
|
|
|
14
14
|
|
|
15
15
|
class UrlAsset(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
description: Annotated[
|
|
20
|
-
str | None, Field(description=
|
|
20
|
+
str | None, Field(description="Description of what this URL points to")
|
|
21
21
|
] = None
|
|
22
|
-
url: Annotated[AnyUrl, Field(description=
|
|
22
|
+
url: Annotated[AnyUrl, Field(description="URL reference")]
|
|
23
23
|
url_type: Annotated[
|
|
24
24
|
url_asset_type.UrlAssetType | None,
|
|
25
25
|
Field(
|
|
@@ -15,51 +15,51 @@ from ...enums import vast_version as vast_version_1
|
|
|
15
15
|
|
|
16
16
|
class VastAsset1(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra="allow",
|
|
19
19
|
)
|
|
20
20
|
delivery_type: Annotated[
|
|
21
|
-
Literal[
|
|
22
|
-
Field(description=
|
|
21
|
+
Literal["url"],
|
|
22
|
+
Field(description="Discriminator indicating VAST is delivered via URL endpoint"),
|
|
23
23
|
]
|
|
24
24
|
duration_ms: Annotated[
|
|
25
|
-
int | None, Field(description=
|
|
25
|
+
int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0)
|
|
26
26
|
] = None
|
|
27
27
|
tracking_events: Annotated[
|
|
28
28
|
list[vast_tracking_event.VastTrackingEvent] | None,
|
|
29
|
-
Field(description=
|
|
29
|
+
Field(description="Tracking events supported by this VAST tag"),
|
|
30
30
|
] = None
|
|
31
|
-
url: Annotated[AnyUrl, Field(description=
|
|
31
|
+
url: Annotated[AnyUrl, Field(description="URL endpoint that returns VAST XML")]
|
|
32
32
|
vast_version: Annotated[
|
|
33
|
-
vast_version_1.VastVersion | None, Field(description=
|
|
33
|
+
vast_version_1.VastVersion | None, Field(description="VAST specification version")
|
|
34
34
|
] = None
|
|
35
35
|
vpaid_enabled: Annotated[
|
|
36
36
|
bool | None,
|
|
37
|
-
Field(description=
|
|
37
|
+
Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"),
|
|
38
38
|
] = None
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class VastAsset2(AdCPBaseModel):
|
|
42
42
|
model_config = ConfigDict(
|
|
43
|
-
extra=
|
|
43
|
+
extra="allow",
|
|
44
44
|
)
|
|
45
|
-
content: Annotated[str, Field(description=
|
|
45
|
+
content: Annotated[str, Field(description="Inline VAST XML content")]
|
|
46
46
|
delivery_type: Annotated[
|
|
47
|
-
Literal[
|
|
48
|
-
Field(description=
|
|
47
|
+
Literal["inline"],
|
|
48
|
+
Field(description="Discriminator indicating VAST is delivered as inline XML content"),
|
|
49
49
|
]
|
|
50
50
|
duration_ms: Annotated[
|
|
51
|
-
int | None, Field(description=
|
|
51
|
+
int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0)
|
|
52
52
|
] = None
|
|
53
53
|
tracking_events: Annotated[
|
|
54
54
|
list[vast_tracking_event.VastTrackingEvent] | None,
|
|
55
|
-
Field(description=
|
|
55
|
+
Field(description="Tracking events supported by this VAST tag"),
|
|
56
56
|
] = None
|
|
57
57
|
vast_version: Annotated[
|
|
58
|
-
vast_version_1.VastVersion | None, Field(description=
|
|
58
|
+
vast_version_1.VastVersion | None, Field(description="VAST specification version")
|
|
59
59
|
] = None
|
|
60
60
|
vpaid_enabled: Annotated[
|
|
61
61
|
bool | None,
|
|
62
|
-
Field(description=
|
|
62
|
+
Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"),
|
|
63
63
|
] = None
|
|
64
64
|
|
|
65
65
|
|
|
@@ -67,7 +67,7 @@ class VastAsset(RootModel[VastAsset1 | VastAsset2]):
|
|
|
67
67
|
root: Annotated[
|
|
68
68
|
VastAsset1 | VastAsset2,
|
|
69
69
|
Field(
|
|
70
|
-
description=
|
|
71
|
-
title=
|
|
70
|
+
description="VAST (Video Ad Serving Template) tag for third-party video ad serving",
|
|
71
|
+
title="VAST Asset",
|
|
72
72
|
),
|
|
73
73
|
]
|
|
@@ -12,17 +12,17 @@ from pydantic import AnyUrl, ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class VideoAsset(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
bitrate_kbps: Annotated[
|
|
18
|
-
int | None, Field(description=
|
|
18
|
+
int | None, Field(description="Video bitrate in kilobits per second", ge=1)
|
|
19
19
|
] = None
|
|
20
20
|
duration_ms: Annotated[
|
|
21
|
-
int | None, Field(description=
|
|
21
|
+
int | None, Field(description="Video duration in milliseconds", ge=1)
|
|
22
22
|
] = None
|
|
23
|
-
format: Annotated[str | None, Field(description=
|
|
23
|
+
format: Annotated[str | None, Field(description="Video file format (mp4, webm, mov, etc.)")] = (
|
|
24
24
|
None
|
|
25
25
|
)
|
|
26
|
-
height: Annotated[int, Field(description=
|
|
27
|
-
url: Annotated[AnyUrl, Field(description=
|
|
28
|
-
width: Annotated[int, Field(description=
|
|
26
|
+
height: Annotated[int, Field(description="Height in pixels", ge=1)]
|
|
27
|
+
url: Annotated[AnyUrl, Field(description="URL to the video asset")]
|
|
28
|
+
width: Annotated[int, Field(description="Width in pixels", ge=1)]
|
|
@@ -20,34 +20,34 @@ class Security(AdCPBaseModel):
|
|
|
20
20
|
str | None, Field(description="Header name for HMAC signature (e.g., 'X-Signature')")
|
|
21
21
|
] = None
|
|
22
22
|
method: Annotated[
|
|
23
|
-
webhook_security_method.WebhookSecurityMethod, Field(description=
|
|
23
|
+
webhook_security_method.WebhookSecurityMethod, Field(description="Authentication method")
|
|
24
24
|
]
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class WebhookAsset(AdCPBaseModel):
|
|
28
28
|
model_config = ConfigDict(
|
|
29
|
-
extra=
|
|
29
|
+
extra="allow",
|
|
30
30
|
)
|
|
31
|
-
method: Annotated[http_method.HttpMethod | None, Field(description=
|
|
31
|
+
method: Annotated[http_method.HttpMethod | None, Field(description="HTTP method")] = (
|
|
32
32
|
http_method.HttpMethod.POST
|
|
33
33
|
)
|
|
34
34
|
required_macros: Annotated[
|
|
35
35
|
list[str] | None,
|
|
36
|
-
Field(description=
|
|
36
|
+
Field(description="Universal macros that must be provided for webhook to function"),
|
|
37
37
|
] = None
|
|
38
38
|
response_type: Annotated[
|
|
39
39
|
webhook_response_type.WebhookResponseType,
|
|
40
|
-
Field(description=
|
|
40
|
+
Field(description="Expected content type of webhook response"),
|
|
41
41
|
]
|
|
42
|
-
security: Annotated[Security, Field(description=
|
|
42
|
+
security: Annotated[Security, Field(description="Security configuration for webhook calls")]
|
|
43
43
|
supported_macros: Annotated[
|
|
44
44
|
list[str] | None,
|
|
45
45
|
Field(
|
|
46
|
-
description=
|
|
46
|
+
description="Universal macros that can be passed to webhook (e.g., {DEVICE_TYPE}, {COUNTRY})"
|
|
47
47
|
),
|
|
48
48
|
] = None
|
|
49
49
|
timeout_ms: Annotated[
|
|
50
50
|
int | None,
|
|
51
|
-
Field(description=
|
|
51
|
+
Field(description="Maximum time to wait for response in milliseconds", ge=10, le=5000),
|
|
52
52
|
] = 500
|
|
53
|
-
url: Annotated[AnyUrl, Field(description=
|
|
53
|
+
url: Annotated[AnyUrl, Field(description="Webhook URL to call for dynamic content")]
|
|
@@ -66,7 +66,7 @@ class AdcpAsyncResponseData(
|
|
|
66
66
|
| sync_creatives_async_response_input_required.SyncCreativesInputRequired
|
|
67
67
|
| sync_creatives_async_response_submitted.SyncCreativesSubmitted,
|
|
68
68
|
Field(
|
|
69
|
-
description=
|
|
70
|
-
title=
|
|
69
|
+
description="Union of all possible data payloads for async task webhook responses. For completed/failed statuses, use the main task response schema. For working/input-required/submitted, use the status-specific schemas.",
|
|
70
|
+
title="AdCP Async Response Data",
|
|
71
71
|
),
|
|
72
72
|
]
|
|
@@ -15,61 +15,61 @@ from ..enums import asset_content_type
|
|
|
15
15
|
|
|
16
16
|
class Asset(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra="allow",
|
|
19
19
|
)
|
|
20
|
-
asset_id: Annotated[str, Field(description=
|
|
20
|
+
asset_id: Annotated[str, Field(description="Unique identifier for this asset")]
|
|
21
21
|
asset_type: Annotated[
|
|
22
22
|
asset_content_type.AssetContentType,
|
|
23
23
|
Field(
|
|
24
|
-
description=
|
|
24
|
+
description="Type of asset. Note: Brand manifests typically contain basic media assets (image, video, audio, text). Code assets (html, javascript, css) and ad markup (vast, daast) are usually not part of brand asset libraries."
|
|
25
25
|
),
|
|
26
26
|
]
|
|
27
|
-
description: Annotated[str | None, Field(description=
|
|
27
|
+
description: Annotated[str | None, Field(description="Asset description or usage notes")] = None
|
|
28
28
|
duration_seconds: Annotated[
|
|
29
|
-
float | None, Field(description=
|
|
29
|
+
float | None, Field(description="Video/audio duration in seconds")
|
|
30
30
|
] = None
|
|
31
|
-
file_size_bytes: Annotated[int | None, Field(description=
|
|
31
|
+
file_size_bytes: Annotated[int | None, Field(description="File size in bytes")] = None
|
|
32
32
|
format: Annotated[str | None, Field(description="File format (e.g., 'jpg', 'mp4', 'mp3')")] = (
|
|
33
33
|
None
|
|
34
34
|
)
|
|
35
|
-
height: Annotated[int | None, Field(description=
|
|
35
|
+
height: Annotated[int | None, Field(description="Image/video height in pixels")] = None
|
|
36
36
|
metadata: Annotated[
|
|
37
|
-
dict[str, Any] | None, Field(description=
|
|
37
|
+
dict[str, Any] | None, Field(description="Additional asset-specific metadata")
|
|
38
38
|
] = None
|
|
39
|
-
name: Annotated[str | None, Field(description=
|
|
39
|
+
name: Annotated[str | None, Field(description="Human-readable asset name")] = None
|
|
40
40
|
tags: Annotated[
|
|
41
41
|
list[str] | None,
|
|
42
42
|
Field(
|
|
43
43
|
description="Tags for asset discovery (e.g., 'holiday', 'lifestyle', 'product_shot')"
|
|
44
44
|
),
|
|
45
45
|
] = None
|
|
46
|
-
url: Annotated[AnyUrl, Field(description=
|
|
47
|
-
width: Annotated[int | None, Field(description=
|
|
46
|
+
url: Annotated[AnyUrl, Field(description="URL to CDN-hosted asset file")]
|
|
47
|
+
width: Annotated[int | None, Field(description="Image/video width in pixels")] = None
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
class Colors(AdCPBaseModel):
|
|
51
51
|
accent: Annotated[
|
|
52
|
-
str | None, Field(description=
|
|
52
|
+
str | None, Field(description="Accent color (hex format)", pattern="^#[0-9A-Fa-f]{6}$")
|
|
53
53
|
] = None
|
|
54
54
|
background: Annotated[
|
|
55
|
-
str | None, Field(description=
|
|
55
|
+
str | None, Field(description="Background color (hex format)", pattern="^#[0-9A-Fa-f]{6}$")
|
|
56
56
|
] = None
|
|
57
57
|
primary: Annotated[
|
|
58
58
|
str | None,
|
|
59
|
-
Field(description=
|
|
59
|
+
Field(description="Primary brand color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"),
|
|
60
60
|
] = None
|
|
61
61
|
secondary: Annotated[
|
|
62
62
|
str | None,
|
|
63
|
-
Field(description=
|
|
63
|
+
Field(description="Secondary brand color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"),
|
|
64
64
|
] = None
|
|
65
65
|
text: Annotated[
|
|
66
|
-
str | None, Field(description=
|
|
66
|
+
str | None, Field(description="Text color (hex format)", pattern="^#[0-9A-Fa-f]{6}$")
|
|
67
67
|
] = None
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
class Contact(AdCPBaseModel):
|
|
71
|
-
email: Annotated[EmailStr | None, Field(description=
|
|
72
|
-
phone: Annotated[str | None, Field(description=
|
|
71
|
+
email: Annotated[EmailStr | None, Field(description="Contact email")] = None
|
|
72
|
+
phone: Annotated[str | None, Field(description="Contact phone number")] = None
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
class Disclaimer(AdCPBaseModel):
|
|
@@ -79,92 +79,92 @@ class Disclaimer(AdCPBaseModel):
|
|
|
79
79
|
description="When this disclaimer applies (e.g., 'financial_products', 'health_claims', 'all')"
|
|
80
80
|
),
|
|
81
81
|
] = None
|
|
82
|
-
required: Annotated[bool | None, Field(description=
|
|
82
|
+
required: Annotated[bool | None, Field(description="Whether this disclaimer must appear")] = (
|
|
83
83
|
True
|
|
84
84
|
)
|
|
85
|
-
text: Annotated[str, Field(description=
|
|
85
|
+
text: Annotated[str, Field(description="Disclaimer text")]
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
class Fonts(AdCPBaseModel):
|
|
89
89
|
font_urls: Annotated[
|
|
90
|
-
list[AnyUrl] | None, Field(description=
|
|
90
|
+
list[AnyUrl] | None, Field(description="URLs to web font files if using custom fonts")
|
|
91
91
|
] = None
|
|
92
|
-
primary: Annotated[str | None, Field(description=
|
|
93
|
-
secondary: Annotated[str | None, Field(description=
|
|
92
|
+
primary: Annotated[str | None, Field(description="Primary font family name")] = None
|
|
93
|
+
secondary: Annotated[str | None, Field(description="Secondary font family name")] = None
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
class Logo(AdCPBaseModel):
|
|
97
|
-
height: Annotated[int | None, Field(description=
|
|
97
|
+
height: Annotated[int | None, Field(description="Logo height in pixels")] = None
|
|
98
98
|
tags: Annotated[
|
|
99
99
|
list[str] | None,
|
|
100
100
|
Field(
|
|
101
101
|
description="Semantic tags describing the logo variant (e.g., 'dark', 'light', 'square', 'horizontal', 'icon')"
|
|
102
102
|
),
|
|
103
103
|
] = None
|
|
104
|
-
url: Annotated[AnyUrl, Field(description=
|
|
105
|
-
width: Annotated[int | None, Field(description=
|
|
104
|
+
url: Annotated[AnyUrl, Field(description="URL to the logo asset")]
|
|
105
|
+
width: Annotated[int | None, Field(description="Logo width in pixels")] = None
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
class Metadata(AdCPBaseModel):
|
|
109
109
|
created_date: Annotated[
|
|
110
|
-
AwareDatetime | None, Field(description=
|
|
110
|
+
AwareDatetime | None, Field(description="When this brand manifest was created")
|
|
111
111
|
] = None
|
|
112
112
|
updated_date: Annotated[
|
|
113
|
-
AwareDatetime | None, Field(description=
|
|
113
|
+
AwareDatetime | None, Field(description="When this brand manifest was last updated")
|
|
114
114
|
] = None
|
|
115
|
-
version: Annotated[str | None, Field(description=
|
|
115
|
+
version: Annotated[str | None, Field(description="Brand card version number")] = None
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
class FeedFormat(Enum):
|
|
119
|
-
google_merchant_center =
|
|
120
|
-
facebook_catalog =
|
|
121
|
-
custom =
|
|
119
|
+
google_merchant_center = "google_merchant_center"
|
|
120
|
+
facebook_catalog = "facebook_catalog"
|
|
121
|
+
custom = "custom"
|
|
122
122
|
|
|
123
123
|
|
|
124
124
|
class UpdateFrequency(Enum):
|
|
125
|
-
realtime =
|
|
126
|
-
hourly =
|
|
127
|
-
daily =
|
|
128
|
-
weekly =
|
|
125
|
+
realtime = "realtime"
|
|
126
|
+
hourly = "hourly"
|
|
127
|
+
daily = "daily"
|
|
128
|
+
weekly = "weekly"
|
|
129
129
|
|
|
130
130
|
|
|
131
131
|
class ProductCatalog(AdCPBaseModel):
|
|
132
132
|
model_config = ConfigDict(
|
|
133
|
-
extra=
|
|
133
|
+
extra="allow",
|
|
134
134
|
)
|
|
135
135
|
categories: Annotated[
|
|
136
136
|
list[str] | None,
|
|
137
|
-
Field(description=
|
|
137
|
+
Field(description="Product categories available in the catalog (for filtering)"),
|
|
138
138
|
] = None
|
|
139
|
-
feed_format: Annotated[FeedFormat | None, Field(description=
|
|
139
|
+
feed_format: Annotated[FeedFormat | None, Field(description="Format of the product feed")] = (
|
|
140
140
|
FeedFormat.google_merchant_center
|
|
141
141
|
)
|
|
142
|
-
feed_url: Annotated[AnyUrl, Field(description=
|
|
142
|
+
feed_url: Annotated[AnyUrl, Field(description="URL to product catalog feed")]
|
|
143
143
|
last_updated: Annotated[
|
|
144
|
-
AwareDatetime | None, Field(description=
|
|
144
|
+
AwareDatetime | None, Field(description="When the product catalog was last updated")
|
|
145
145
|
] = None
|
|
146
146
|
update_frequency: Annotated[
|
|
147
|
-
UpdateFrequency | None, Field(description=
|
|
147
|
+
UpdateFrequency | None, Field(description="How frequently the product catalog is updated")
|
|
148
148
|
] = None
|
|
149
149
|
|
|
150
150
|
|
|
151
151
|
class BrandManifest(AdCPBaseModel):
|
|
152
152
|
model_config = ConfigDict(
|
|
153
|
-
extra=
|
|
153
|
+
extra="allow",
|
|
154
154
|
)
|
|
155
155
|
assets: Annotated[
|
|
156
156
|
list[Asset] | None,
|
|
157
157
|
Field(
|
|
158
|
-
description=
|
|
158
|
+
description="Brand asset library with explicit assets and tags. Assets are referenced inline with URLs pointing to CDN-hosted files."
|
|
159
159
|
),
|
|
160
160
|
] = None
|
|
161
|
-
colors: Annotated[Colors | None, Field(description=
|
|
162
|
-
contact: Annotated[Contact | None, Field(description=
|
|
161
|
+
colors: Annotated[Colors | None, Field(description="Brand color palette")] = None
|
|
162
|
+
contact: Annotated[Contact | None, Field(description="Brand contact information")] = None
|
|
163
163
|
disclaimers: Annotated[
|
|
164
164
|
list[Disclaimer] | None,
|
|
165
|
-
Field(description=
|
|
165
|
+
Field(description="Legal disclaimers or required text that must appear in creatives"),
|
|
166
166
|
] = None
|
|
167
|
-
fonts: Annotated[Fonts | None, Field(description=
|
|
167
|
+
fonts: Annotated[Fonts | None, Field(description="Brand typography guidelines")] = None
|
|
168
168
|
industry: Annotated[
|
|
169
169
|
str | None,
|
|
170
170
|
Field(
|
|
@@ -173,19 +173,19 @@ class BrandManifest(AdCPBaseModel):
|
|
|
173
173
|
] = None
|
|
174
174
|
logos: Annotated[
|
|
175
175
|
list[Logo] | None,
|
|
176
|
-
Field(description=
|
|
176
|
+
Field(description="Brand logo assets with semantic tags for different use cases"),
|
|
177
177
|
] = None
|
|
178
|
-
metadata: Annotated[Metadata | None, Field(description=
|
|
179
|
-
name: Annotated[str, Field(description=
|
|
178
|
+
metadata: Annotated[Metadata | None, Field(description="Additional brand metadata")] = None
|
|
179
|
+
name: Annotated[str, Field(description="Brand or business name")]
|
|
180
180
|
product_catalog: Annotated[
|
|
181
181
|
ProductCatalog | None,
|
|
182
182
|
Field(
|
|
183
|
-
description=
|
|
183
|
+
description="Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection."
|
|
184
184
|
),
|
|
185
185
|
] = None
|
|
186
|
-
tagline: Annotated[str | None, Field(description=
|
|
186
|
+
tagline: Annotated[str | None, Field(description="Brand tagline or slogan")] = None
|
|
187
187
|
target_audience: Annotated[
|
|
188
|
-
str | None, Field(description=
|
|
188
|
+
str | None, Field(description="Primary target audience description")
|
|
189
189
|
] = None
|
|
190
190
|
tone: Annotated[
|
|
191
191
|
str | None,
|
|
@@ -196,6 +196,6 @@ class BrandManifest(AdCPBaseModel):
|
|
|
196
196
|
url: Annotated[
|
|
197
197
|
AnyUrl | None,
|
|
198
198
|
Field(
|
|
199
|
-
description=
|
|
199
|
+
description="Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL."
|
|
200
200
|
),
|
|
201
201
|
] = None
|