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
|
@@ -15,47 +15,47 @@ from . import push_notification_config as push_notification_config_1
|
|
|
15
15
|
|
|
16
16
|
class ProtocolEnvelope(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra="allow",
|
|
19
19
|
)
|
|
20
20
|
context_id: Annotated[
|
|
21
21
|
str | None,
|
|
22
22
|
Field(
|
|
23
|
-
description=
|
|
23
|
+
description="Session/conversation identifier for tracking related operations across multiple task invocations. Managed by the protocol layer to maintain conversational context."
|
|
24
24
|
),
|
|
25
25
|
] = None
|
|
26
26
|
message: Annotated[
|
|
27
27
|
str | None,
|
|
28
28
|
Field(
|
|
29
|
-
description=
|
|
29
|
+
description="Human-readable summary of the task result. Provides natural language explanation of what happened, suitable for display to end users or for AI agent comprehension. Generated by the protocol layer based on the task response."
|
|
30
30
|
),
|
|
31
31
|
] = None
|
|
32
32
|
payload: Annotated[
|
|
33
33
|
dict[str, Any],
|
|
34
34
|
Field(
|
|
35
|
-
description=
|
|
35
|
+
description="The actual task-specific response data. This is the content defined in individual task response schemas (e.g., get-products-response.json, create-media-buy-response.json). Contains only domain-specific data without protocol-level fields."
|
|
36
36
|
),
|
|
37
37
|
]
|
|
38
38
|
push_notification_config: Annotated[
|
|
39
39
|
push_notification_config_1.PushNotificationConfig | None,
|
|
40
40
|
Field(
|
|
41
|
-
description=
|
|
41
|
+
description="Push notification configuration for async task updates (A2A and REST protocols). Echoed from the request to confirm webhook settings. Specifies URL, authentication scheme (Bearer or HMAC-SHA256), and credentials. MCP uses progress notifications instead of webhooks."
|
|
42
42
|
),
|
|
43
43
|
] = None
|
|
44
44
|
status: Annotated[
|
|
45
45
|
task_status.TaskStatus,
|
|
46
46
|
Field(
|
|
47
|
-
description=
|
|
47
|
+
description="Current task execution state. Indicates whether the task is completed, in progress (working), submitted for async processing, failed, or requires user input. Managed by the protocol layer."
|
|
48
48
|
),
|
|
49
49
|
]
|
|
50
50
|
task_id: Annotated[
|
|
51
51
|
str | None,
|
|
52
52
|
Field(
|
|
53
|
-
description=
|
|
53
|
+
description="Unique identifier for tracking asynchronous operations. Present when a task requires extended processing time. Used to query task status and retrieve results when complete."
|
|
54
54
|
),
|
|
55
55
|
] = None
|
|
56
56
|
timestamp: Annotated[
|
|
57
57
|
AwareDatetime | None,
|
|
58
58
|
Field(
|
|
59
|
-
description=
|
|
59
|
+
description="ISO 8601 timestamp when the response was generated. Useful for debugging, logging, cache validation, and tracking async operation progress."
|
|
60
60
|
),
|
|
61
61
|
] = None
|
|
@@ -14,26 +14,26 @@ from . import property_id, property_tag
|
|
|
14
14
|
|
|
15
15
|
class PublisherPropertySelector1(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
publisher_domain: Annotated[
|
|
20
20
|
str,
|
|
21
21
|
Field(
|
|
22
22
|
description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
|
|
23
|
-
pattern=
|
|
23
|
+
pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
|
|
24
24
|
),
|
|
25
25
|
]
|
|
26
26
|
selection_type: Annotated[
|
|
27
|
-
Literal[
|
|
27
|
+
Literal["all"],
|
|
28
28
|
Field(
|
|
29
|
-
description=
|
|
29
|
+
description="Discriminator indicating all properties from this publisher are included"
|
|
30
30
|
),
|
|
31
31
|
]
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class PublisherPropertySelector2(AdCPBaseModel):
|
|
35
35
|
model_config = ConfigDict(
|
|
36
|
-
extra=
|
|
36
|
+
extra="allow",
|
|
37
37
|
)
|
|
38
38
|
property_ids: Annotated[
|
|
39
39
|
list[property_id.PropertyId],
|
|
@@ -43,18 +43,18 @@ class PublisherPropertySelector2(AdCPBaseModel):
|
|
|
43
43
|
str,
|
|
44
44
|
Field(
|
|
45
45
|
description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
|
|
46
|
-
pattern=
|
|
46
|
+
pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
|
|
47
47
|
),
|
|
48
48
|
]
|
|
49
49
|
selection_type: Annotated[
|
|
50
|
-
Literal[
|
|
51
|
-
Field(description=
|
|
50
|
+
Literal["by_id"],
|
|
51
|
+
Field(description="Discriminator indicating selection by specific property IDs"),
|
|
52
52
|
]
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
class PublisherPropertySelector3(AdCPBaseModel):
|
|
56
56
|
model_config = ConfigDict(
|
|
57
|
-
extra=
|
|
57
|
+
extra="allow",
|
|
58
58
|
)
|
|
59
59
|
property_tags: Annotated[
|
|
60
60
|
list[property_tag.PropertyTag],
|
|
@@ -67,11 +67,11 @@ class PublisherPropertySelector3(AdCPBaseModel):
|
|
|
67
67
|
str,
|
|
68
68
|
Field(
|
|
69
69
|
description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
|
|
70
|
-
pattern=
|
|
70
|
+
pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
|
|
71
71
|
),
|
|
72
72
|
]
|
|
73
73
|
selection_type: Annotated[
|
|
74
|
-
Literal[
|
|
74
|
+
Literal["by_tag"], Field(description="Discriminator indicating selection by property tags")
|
|
75
75
|
]
|
|
76
76
|
|
|
77
77
|
|
|
@@ -82,7 +82,7 @@ class PublisherPropertySelector(
|
|
|
82
82
|
PublisherPropertySelector1 | PublisherPropertySelector2 | PublisherPropertySelector3,
|
|
83
83
|
Field(
|
|
84
84
|
description="Selects properties from a publisher's adagents.json. Used for both product definitions and agent authorization. Supports three selection patterns: all properties, specific IDs, or by tags.",
|
|
85
|
-
discriminator=
|
|
86
|
-
title=
|
|
85
|
+
discriminator="selection_type",
|
|
86
|
+
title="Publisher Property Selector",
|
|
87
87
|
),
|
|
88
88
|
]
|
|
@@ -14,12 +14,12 @@ from ..enums import auth_scheme
|
|
|
14
14
|
|
|
15
15
|
class Authentication(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="forbid",
|
|
18
18
|
)
|
|
19
19
|
credentials: Annotated[
|
|
20
20
|
str,
|
|
21
21
|
Field(
|
|
22
|
-
description=
|
|
22
|
+
description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.",
|
|
23
23
|
min_length=32,
|
|
24
24
|
),
|
|
25
25
|
]
|
|
@@ -36,13 +36,13 @@ class Authentication(AdCPBaseModel):
|
|
|
36
36
|
class PushNotificationConfig(AdCPBaseModel):
|
|
37
37
|
authentication: Annotated[
|
|
38
38
|
Authentication,
|
|
39
|
-
Field(description=
|
|
39
|
+
Field(description="Authentication configuration for webhook delivery (A2A-compatible)"),
|
|
40
40
|
]
|
|
41
41
|
token: Annotated[
|
|
42
42
|
str | None,
|
|
43
43
|
Field(
|
|
44
|
-
description=
|
|
44
|
+
description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.",
|
|
45
45
|
min_length=16,
|
|
46
46
|
),
|
|
47
47
|
] = None
|
|
48
|
-
url: Annotated[AnyUrl, Field(description=
|
|
48
|
+
url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for task status notifications")]
|
|
@@ -14,38 +14,38 @@ from ..enums import available_metric, reporting_frequency
|
|
|
14
14
|
|
|
15
15
|
class ReportingCapabilities(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
available_metrics: Annotated[
|
|
20
20
|
list[available_metric.AvailableMetric],
|
|
21
21
|
Field(
|
|
22
|
-
description=
|
|
22
|
+
description="Metrics available in reporting. Impressions and spend are always implicitly included.",
|
|
23
23
|
examples=[
|
|
24
|
-
[
|
|
25
|
-
[
|
|
24
|
+
["impressions", "spend", "clicks", "video_completions"],
|
|
25
|
+
["impressions", "spend", "conversions"],
|
|
26
26
|
],
|
|
27
27
|
),
|
|
28
28
|
]
|
|
29
29
|
available_reporting_frequencies: Annotated[
|
|
30
30
|
list[reporting_frequency.ReportingFrequency],
|
|
31
|
-
Field(description=
|
|
31
|
+
Field(description="Supported reporting frequency options", min_length=1),
|
|
32
32
|
]
|
|
33
33
|
expected_delay_minutes: Annotated[
|
|
34
34
|
int,
|
|
35
35
|
Field(
|
|
36
|
-
description=
|
|
36
|
+
description="Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)",
|
|
37
37
|
examples=[240, 300, 1440],
|
|
38
38
|
ge=0,
|
|
39
39
|
),
|
|
40
40
|
]
|
|
41
41
|
supports_webhooks: Annotated[
|
|
42
42
|
bool,
|
|
43
|
-
Field(description=
|
|
43
|
+
Field(description="Whether this product supports webhook-based reporting notifications"),
|
|
44
44
|
]
|
|
45
45
|
timezone: Annotated[
|
|
46
46
|
str,
|
|
47
47
|
Field(
|
|
48
48
|
description="Timezone for reporting periods. Use 'UTC' or IANA timezone (e.g., 'America/New_York'). Critical for daily/monthly frequency alignment.",
|
|
49
|
-
examples=[
|
|
49
|
+
examples=["UTC", "America/New_York", "Europe/London", "America/Los_Angeles"],
|
|
50
50
|
),
|
|
51
51
|
]
|
|
@@ -12,13 +12,13 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
class ProtocolResponse(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
|
-
context_id: Annotated[str | None, Field(description=
|
|
17
|
+
context_id: Annotated[str | None, Field(description="Session continuity identifier")] = None
|
|
18
18
|
data: Annotated[
|
|
19
19
|
Any | None,
|
|
20
20
|
Field(
|
|
21
|
-
description=
|
|
21
|
+
description="AdCP task-specific response data (see individual task response schemas)"
|
|
22
22
|
),
|
|
23
23
|
] = None
|
|
24
|
-
message: Annotated[str, Field(description=
|
|
24
|
+
message: Annotated[str, Field(description="Human-readable summary")]
|
|
@@ -14,16 +14,16 @@ from ..enums import signal_catalog_type
|
|
|
14
14
|
|
|
15
15
|
class SignalFilters(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
catalog_types: Annotated[
|
|
20
20
|
list[signal_catalog_type.SignalCatalogType] | None,
|
|
21
|
-
Field(description=
|
|
21
|
+
Field(description="Filter by catalog type"),
|
|
22
22
|
] = None
|
|
23
23
|
data_providers: Annotated[
|
|
24
|
-
list[str] | None, Field(description=
|
|
24
|
+
list[str] | None, Field(description="Filter by specific data providers")
|
|
25
25
|
] = None
|
|
26
|
-
max_cpm: Annotated[float | None, Field(description=
|
|
26
|
+
max_cpm: Annotated[float | None, Field(description="Maximum CPM price filter", ge=0.0)] = None
|
|
27
27
|
min_coverage_percentage: Annotated[
|
|
28
|
-
float | None, Field(description=
|
|
28
|
+
float | None, Field(description="Minimum coverage requirement", ge=0.0, le=100.0)
|
|
29
29
|
] = None
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: core/start_timing.json
|
|
3
|
-
# timestamp:
|
|
3
|
+
# timestamp: 2026-01-14T17:08:13+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from typing import Annotated
|
|
7
|
+
from typing import Annotated, Literal
|
|
8
8
|
|
|
9
9
|
from pydantic import AwareDatetime, Field, RootModel
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class StartTiming(RootModel[
|
|
12
|
+
class StartTiming(RootModel[Literal["asap"] | AwareDatetime]):
|
|
13
13
|
root: Annotated[
|
|
14
|
-
|
|
14
|
+
Literal["asap"] | AwareDatetime,
|
|
15
15
|
Field(
|
|
16
|
-
description="Campaign start timing: 'asap' or ISO 8601 date-time", title=
|
|
16
|
+
description="Campaign start timing: 'asap' or ISO 8601 date-time", title="Start Timing"
|
|
17
17
|
),
|
|
18
18
|
]
|
|
@@ -12,45 +12,45 @@ from pydantic import AnyUrl, ConfigDict, Field, RootModel
|
|
|
12
12
|
|
|
13
13
|
class SubAsset1(AdCPBaseModel):
|
|
14
14
|
model_config = ConfigDict(
|
|
15
|
-
extra=
|
|
15
|
+
extra="allow",
|
|
16
16
|
)
|
|
17
17
|
asset_id: Annotated[
|
|
18
|
-
str, Field(description=
|
|
18
|
+
str, Field(description="Unique identifier for the asset within the creative")
|
|
19
19
|
]
|
|
20
20
|
asset_kind: Annotated[
|
|
21
|
-
Literal[
|
|
22
|
-
Field(description=
|
|
21
|
+
Literal["media"],
|
|
22
|
+
Field(description="Discriminator indicating this is a media asset with content_uri"),
|
|
23
23
|
]
|
|
24
24
|
asset_type: Annotated[
|
|
25
25
|
str,
|
|
26
26
|
Field(
|
|
27
|
-
description=
|
|
27
|
+
description="Type of asset. Common types: thumbnail_image, product_image, featured_image, logo"
|
|
28
28
|
),
|
|
29
29
|
]
|
|
30
|
-
content_uri: Annotated[AnyUrl, Field(description=
|
|
30
|
+
content_uri: Annotated[AnyUrl, Field(description="URL for media assets (images, videos, etc.)")]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class SubAsset2(AdCPBaseModel):
|
|
34
34
|
model_config = ConfigDict(
|
|
35
|
-
extra=
|
|
35
|
+
extra="allow",
|
|
36
36
|
)
|
|
37
37
|
asset_id: Annotated[
|
|
38
|
-
str, Field(description=
|
|
38
|
+
str, Field(description="Unique identifier for the asset within the creative")
|
|
39
39
|
]
|
|
40
40
|
asset_kind: Annotated[
|
|
41
|
-
Literal[
|
|
42
|
-
Field(description=
|
|
41
|
+
Literal["text"],
|
|
42
|
+
Field(description="Discriminator indicating this is a text asset with content"),
|
|
43
43
|
]
|
|
44
44
|
asset_type: Annotated[
|
|
45
45
|
str,
|
|
46
46
|
Field(
|
|
47
|
-
description=
|
|
47
|
+
description="Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url"
|
|
48
48
|
),
|
|
49
49
|
]
|
|
50
50
|
content: Annotated[
|
|
51
51
|
str | list[str],
|
|
52
52
|
Field(
|
|
53
|
-
description=
|
|
53
|
+
description="Text content for text-based assets like headlines, body text, CTA text, etc."
|
|
54
54
|
),
|
|
55
55
|
]
|
|
56
56
|
|
|
@@ -59,7 +59,7 @@ class SubAsset(RootModel[SubAsset1 | SubAsset2]):
|
|
|
59
59
|
root: Annotated[
|
|
60
60
|
SubAsset1 | SubAsset2,
|
|
61
61
|
Field(
|
|
62
|
-
description=
|
|
63
|
-
title=
|
|
62
|
+
description="Sub-asset for multi-asset creative formats, including carousel images and native ad template variables",
|
|
63
|
+
title="Sub-Asset",
|
|
64
64
|
),
|
|
65
65
|
]
|
|
@@ -13,41 +13,41 @@ from . import frequency_cap as frequency_cap_1
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class GeoCountryAnyOfItem(RootModel[str]):
|
|
16
|
-
root: Annotated[str, Field(pattern=
|
|
16
|
+
root: Annotated[str, Field(pattern="^[A-Z]{2}$")]
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class TargetingOverlay(AdCPBaseModel):
|
|
20
20
|
model_config = ConfigDict(
|
|
21
|
-
extra=
|
|
21
|
+
extra="allow",
|
|
22
22
|
)
|
|
23
23
|
axe_exclude_segment: Annotated[
|
|
24
|
-
str | None, Field(description=
|
|
24
|
+
str | None, Field(description="AXE segment ID to exclude from targeting")
|
|
25
25
|
] = None
|
|
26
26
|
axe_include_segment: Annotated[
|
|
27
|
-
str | None, Field(description=
|
|
27
|
+
str | None, Field(description="AXE segment ID to include for targeting")
|
|
28
28
|
] = None
|
|
29
29
|
frequency_cap: frequency_cap_1.FrequencyCap | None = None
|
|
30
30
|
geo_country_any_of: Annotated[
|
|
31
31
|
list[GeoCountryAnyOfItem] | None,
|
|
32
32
|
Field(
|
|
33
|
-
description=
|
|
33
|
+
description="Restrict delivery to specific countries (ISO codes). Use for regulatory compliance or RCT testing."
|
|
34
34
|
),
|
|
35
35
|
] = None
|
|
36
36
|
geo_metro_any_of: Annotated[
|
|
37
37
|
list[str] | None,
|
|
38
38
|
Field(
|
|
39
|
-
description=
|
|
39
|
+
description="Restrict delivery to specific metro areas (DMA codes). Use for regulatory compliance or RCT testing."
|
|
40
40
|
),
|
|
41
41
|
] = None
|
|
42
42
|
geo_postal_code_any_of: Annotated[
|
|
43
43
|
list[str] | None,
|
|
44
44
|
Field(
|
|
45
|
-
description=
|
|
45
|
+
description="Restrict delivery to specific postal/ZIP codes. Use for regulatory compliance or RCT testing."
|
|
46
46
|
),
|
|
47
47
|
] = None
|
|
48
48
|
geo_region_any_of: Annotated[
|
|
49
49
|
list[str] | None,
|
|
50
50
|
Field(
|
|
51
|
-
description=
|
|
51
|
+
description="Restrict delivery to specific regions/states. Use for regulatory compliance or RCT testing."
|
|
52
52
|
),
|
|
53
53
|
] = None
|
|
@@ -16,25 +16,25 @@ from ..core import format_id
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class AssetType(Enum):
|
|
19
|
-
image =
|
|
20
|
-
video =
|
|
21
|
-
audio =
|
|
22
|
-
text =
|
|
23
|
-
html =
|
|
24
|
-
javascript =
|
|
25
|
-
url =
|
|
19
|
+
image = "image"
|
|
20
|
+
video = "video"
|
|
21
|
+
audio = "audio"
|
|
22
|
+
text = "text"
|
|
23
|
+
html = "html"
|
|
24
|
+
javascript = "javascript"
|
|
25
|
+
url = "url"
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class Type(Enum):
|
|
29
|
-
audio =
|
|
30
|
-
video =
|
|
31
|
-
display =
|
|
32
|
-
dooh =
|
|
29
|
+
audio = "audio"
|
|
30
|
+
video = "video"
|
|
31
|
+
display = "display"
|
|
32
|
+
dooh = "dooh"
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel):
|
|
36
36
|
model_config = ConfigDict(
|
|
37
|
-
extra=
|
|
37
|
+
extra="allow",
|
|
38
38
|
)
|
|
39
39
|
asset_types: Annotated[
|
|
40
40
|
list[AssetType] | None,
|
|
@@ -45,44 +45,44 @@ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel):
|
|
|
45
45
|
context: context_1.ContextObject | None = None
|
|
46
46
|
ext: ext_1.ExtensionObject | None = None
|
|
47
47
|
format_ids: Annotated[
|
|
48
|
-
list[format_id.FormatId] | None, Field(description=
|
|
48
|
+
list[format_id.FormatId] | None, Field(description="Return only these specific format IDs")
|
|
49
49
|
] = None
|
|
50
50
|
is_responsive: Annotated[
|
|
51
51
|
bool | None,
|
|
52
52
|
Field(
|
|
53
|
-
description=
|
|
53
|
+
description="Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions."
|
|
54
54
|
),
|
|
55
55
|
] = None
|
|
56
56
|
max_height: Annotated[
|
|
57
57
|
int | None,
|
|
58
58
|
Field(
|
|
59
|
-
description=
|
|
59
|
+
description="Maximum height in pixels (inclusive). Returns formats with height <= this value. Omit for responsive/fluid formats."
|
|
60
60
|
),
|
|
61
61
|
] = None
|
|
62
62
|
max_width: Annotated[
|
|
63
63
|
int | None,
|
|
64
64
|
Field(
|
|
65
|
-
description=
|
|
65
|
+
description="Maximum width in pixels (inclusive). Returns formats with width <= this value. Omit for responsive/fluid formats."
|
|
66
66
|
),
|
|
67
67
|
] = None
|
|
68
68
|
min_height: Annotated[
|
|
69
69
|
int | None,
|
|
70
70
|
Field(
|
|
71
|
-
description=
|
|
71
|
+
description="Minimum height in pixels (inclusive). Returns formats with height >= this value."
|
|
72
72
|
),
|
|
73
73
|
] = None
|
|
74
74
|
min_width: Annotated[
|
|
75
75
|
int | None,
|
|
76
76
|
Field(
|
|
77
|
-
description=
|
|
77
|
+
description="Minimum width in pixels (inclusive). Returns formats with width >= this value."
|
|
78
78
|
),
|
|
79
79
|
] = None
|
|
80
80
|
name_search: Annotated[
|
|
81
|
-
str | None, Field(description=
|
|
81
|
+
str | None, Field(description="Search for formats by name (case-insensitive partial match)")
|
|
82
82
|
] = None
|
|
83
83
|
type: Annotated[
|
|
84
84
|
Type | None,
|
|
85
85
|
Field(
|
|
86
|
-
description=
|
|
86
|
+
description="Filter by format type (technical categories with distinct requirements)"
|
|
87
87
|
),
|
|
88
88
|
] = None
|
|
@@ -18,7 +18,7 @@ from ..enums import creative_agent_capability
|
|
|
18
18
|
|
|
19
19
|
class CreativeAgent(AdCPBaseModel):
|
|
20
20
|
agent_name: Annotated[
|
|
21
|
-
str | None, Field(description=
|
|
21
|
+
str | None, Field(description="Human-readable name for the creative agent")
|
|
22
22
|
] = None
|
|
23
23
|
agent_url: Annotated[
|
|
24
24
|
AnyUrl,
|
|
@@ -28,23 +28,23 @@ class CreativeAgent(AdCPBaseModel):
|
|
|
28
28
|
]
|
|
29
29
|
capabilities: Annotated[
|
|
30
30
|
list[creative_agent_capability.CreativeAgentCapability] | None,
|
|
31
|
-
Field(description=
|
|
31
|
+
Field(description="Capabilities this creative agent provides"),
|
|
32
32
|
] = None
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class ListCreativeFormatsResponseCreativeAgent(AdCPBaseModel):
|
|
36
36
|
model_config = ConfigDict(
|
|
37
|
-
extra=
|
|
37
|
+
extra="allow",
|
|
38
38
|
)
|
|
39
39
|
context: context_1.ContextObject | None = None
|
|
40
40
|
creative_agents: Annotated[
|
|
41
41
|
list[CreativeAgent] | None,
|
|
42
42
|
Field(
|
|
43
|
-
description=
|
|
43
|
+
description="Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats."
|
|
44
44
|
),
|
|
45
45
|
] = None
|
|
46
46
|
errors: Annotated[
|
|
47
|
-
list[error.Error] | None, Field(description=
|
|
47
|
+
list[error.Error] | None, Field(description="Task-specific errors and warnings")
|
|
48
48
|
] = None
|
|
49
49
|
ext: ext_1.ExtensionObject | None = None
|
|
50
50
|
formats: Annotated[
|