adcp 3.1.0__py3-none-any.whl → 3.2.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/ADCP_VERSION +1 -1
- adcp/__init__.py +5 -5
- adcp/__main__.py +4 -4
- adcp/adagents.py +5 -9
- adcp/client.py +14 -12
- adcp/protocols/a2a.py +3 -3
- adcp/protocols/base.py +2 -2
- adcp/protocols/mcp.py +3 -3
- adcp/server/base.py +6 -10
- adcp/server/content_standards.py +17 -49
- adcp/server/governance.py +20 -59
- adcp/server/mcp_tools.py +8 -4
- adcp/server/proposal.py +1 -3
- adcp/server/sponsored_intelligence.py +10 -28
- adcp/simple.py +10 -10
- adcp/types/__init__.py +10 -6
- adcp/types/_generated.py +44 -27
- adcp/types/base.py +7 -7
- adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
- adcp/types/generated_poc/a2ui/component.py +24 -0
- adcp/types/generated_poc/a2ui/surface.py +33 -0
- adcp/types/generated_poc/account/__init__.py +3 -0
- adcp/types/generated_poc/account/list_accounts_request.py +30 -0
- adcp/types/generated_poc/account/list_accounts_response.py +30 -0
- adcp/types/generated_poc/adagents.py +192 -195
- adcp/types/generated_poc/content_standards/artifact.py +69 -69
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
- adcp/types/generated_poc/content_standards/content_standards.py +8 -8
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
- adcp/types/generated_poc/core/account.py +54 -0
- adcp/types/generated_poc/core/activation_key.py +8 -8
- adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
- 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 +126 -10
- 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 +66 -66
- 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 +12 -12
- adcp/types/generated_poc/core/creative_assignment.py +3 -3
- adcp/types/generated_poc/core/creative_filters.py +23 -17
- adcp/types/generated_poc/core/creative_manifest.py +4 -4
- 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 +49 -124
- 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 +2 -2
- 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 +12 -8
- adcp/types/generated_poc/core/media_buy_features.py +3 -3
- adcp/types/generated_poc/core/offering.py +9 -9
- 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 +1 -1
- adcp/types/generated_poc/core/product.py +27 -21
- adcp/types/generated_poc/core/product_allocation.py +5 -5
- adcp/types/generated_poc/core/product_filters.py +27 -27
- adcp/types/generated_poc/core/promoted_offerings.py +18 -18
- adcp/types/generated_poc/core/promoted_products.py +2 -2
- adcp/types/generated_poc/core/property.py +10 -10
- adcp/types/generated_poc/core/property_id.py +4 -4
- adcp/types/generated_poc/core/property_list_ref.py +4 -4
- adcp/types/generated_poc/core/property_tag.py +4 -4
- adcp/types/generated_poc/core/proposal.py +13 -13
- 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/reporting_webhook.py +10 -10
- 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 +3 -3
- adcp/types/generated_poc/core/sub_asset.py +14 -14
- adcp/types/generated_poc/core/targeting.py +17 -10
- 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 +28 -28
- adcp/types/generated_poc/creative/preview_render.py +25 -25
- adcp/types/generated_poc/enums/adcp_domain.py +4 -4
- 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 +19 -19
- 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 +5 -5
- 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/geo_level.py +4 -4
- 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/metro_system.py +5 -5
- adcp/types/generated_poc/enums/notification_type.py +4 -4
- adcp/types/generated_poc/enums/pacing.py +3 -3
- adcp/types/generated_poc/enums/postal_system.py +9 -9
- 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 +8 -8
- 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/task_status.py +9 -9
- adcp/types/generated_poc/enums/task_type.py +11 -12
- 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/extension_meta.py +14 -14
- 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 +27 -21
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
- 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 +5 -5
- 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 +23 -23
- adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
- adcp/types/generated_poc/media_buy/package_request.py +8 -8
- adcp/types/generated_poc/media_buy/package_update.py +16 -16
- 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 +14 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
- 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 +14 -14
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
- adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
- adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
- adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
- adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
- adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
- adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
- adcp/types/generated_poc/property/base_property_source.py +15 -15
- adcp/types/generated_poc/property/create_property_list_request.py +4 -4
- adcp/types/generated_poc/property/create_property_list_response.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
- adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +5 -5
- adcp/types/generated_poc/property/get_property_list_response.py +11 -11
- adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
- adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
- adcp/types/generated_poc/property/property_error.py +10 -10
- adcp/types/generated_poc/property/property_feature.py +4 -4
- adcp/types/generated_poc/property/property_feature_definition.py +18 -18
- adcp/types/generated_poc/property/property_list.py +11 -11
- adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
- adcp/types/generated_poc/property/property_list_filters.py +7 -7
- adcp/types/generated_poc/property/update_property_list_request.py +8 -8
- adcp/types/generated_poc/property/update_property_list_response.py +2 -2
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
- 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/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
- adcp/utils/format_assets.py +32 -32
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
- adcp-3.2.0.dist-info/RECORD +268 -0
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
- adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
- adcp-3.1.0.dist-info/RECORD +0 -264
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
|
@@ -14,7 +14,7 @@ from ..core import ext as ext_1
|
|
|
14
14
|
|
|
15
15
|
class SiGetOfferingRequest(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
19
|
context: Annotated[
|
|
20
20
|
str | None,
|
|
@@ -24,11 +24,11 @@ class SiGetOfferingRequest(AdCPBaseModel):
|
|
|
24
24
|
] = None
|
|
25
25
|
ext: ext_1.ExtensionObject | None = None
|
|
26
26
|
include_products: Annotated[
|
|
27
|
-
bool | None, Field(description=
|
|
27
|
+
bool | None, Field(description="Whether to include matching products in the response")
|
|
28
28
|
] = False
|
|
29
29
|
offering_id: Annotated[
|
|
30
|
-
str, Field(description=
|
|
30
|
+
str, Field(description="Offering identifier from promoted offerings to get details for")
|
|
31
31
|
]
|
|
32
32
|
product_limit: Annotated[
|
|
33
|
-
int | None, Field(description=
|
|
33
|
+
int | None, Field(description="Maximum number of matching products to return", ge=1, le=50)
|
|
34
34
|
] = 5
|
|
@@ -15,7 +15,7 @@ from ..core import ext as ext_1
|
|
|
15
15
|
|
|
16
16
|
class MatchingProduct(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra="allow",
|
|
19
19
|
)
|
|
20
20
|
availability_summary: Annotated[
|
|
21
21
|
str | None,
|
|
@@ -23,55 +23,55 @@ class MatchingProduct(AdCPBaseModel):
|
|
|
23
23
|
description="Brief availability info (e.g., 'In stock', 'Size 14 available', '3 left')"
|
|
24
24
|
),
|
|
25
25
|
] = None
|
|
26
|
-
image_url: Annotated[AnyUrl | None, Field(description=
|
|
27
|
-
name: Annotated[str, Field(description=
|
|
28
|
-
original_price: Annotated[str | None, Field(description=
|
|
26
|
+
image_url: Annotated[AnyUrl | None, Field(description="Product image")] = None
|
|
27
|
+
name: Annotated[str, Field(description="Product name")]
|
|
28
|
+
original_price: Annotated[str | None, Field(description="Original price if on sale")] = None
|
|
29
29
|
price: Annotated[str | None, Field(description="Display price (e.g., '$129', '$89.99')")] = None
|
|
30
|
-
product_id: Annotated[str, Field(description=
|
|
31
|
-
url: Annotated[AnyUrl | None, Field(description=
|
|
30
|
+
product_id: Annotated[str, Field(description="Product identifier")]
|
|
31
|
+
url: Annotated[AnyUrl | None, Field(description="Product detail page URL")] = None
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class Offering(AdCPBaseModel):
|
|
35
35
|
model_config = ConfigDict(
|
|
36
|
-
extra=
|
|
36
|
+
extra="allow",
|
|
37
37
|
)
|
|
38
|
-
expires_at: Annotated[AwareDatetime | None, Field(description=
|
|
38
|
+
expires_at: Annotated[AwareDatetime | None, Field(description="When this offering expires")] = (
|
|
39
39
|
None
|
|
40
40
|
)
|
|
41
|
-
image_url: Annotated[AnyUrl | None, Field(description=
|
|
42
|
-
landing_url: Annotated[AnyUrl | None, Field(description=
|
|
43
|
-
offering_id: Annotated[str | None, Field(description=
|
|
41
|
+
image_url: Annotated[AnyUrl | None, Field(description="Hero image for the offering")] = None
|
|
42
|
+
landing_url: Annotated[AnyUrl | None, Field(description="Landing page URL")] = None
|
|
43
|
+
offering_id: Annotated[str | None, Field(description="Offering identifier")] = None
|
|
44
44
|
price_hint: Annotated[
|
|
45
45
|
str | None, Field(description="Price indication (e.g., 'from $199', '50% off')")
|
|
46
46
|
] = None
|
|
47
|
-
summary: Annotated[str | None, Field(description=
|
|
48
|
-
tagline: Annotated[str | None, Field(description=
|
|
49
|
-
title: Annotated[str | None, Field(description=
|
|
47
|
+
summary: Annotated[str | None, Field(description="Brief summary of the offering")] = None
|
|
48
|
+
tagline: Annotated[str | None, Field(description="Short promotional tagline")] = None
|
|
49
|
+
title: Annotated[str | None, Field(description="Offering title")] = None
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
class SiGetOfferingResponse(AdCPBaseModel):
|
|
53
53
|
model_config = ConfigDict(
|
|
54
|
-
extra=
|
|
54
|
+
extra="allow",
|
|
55
55
|
)
|
|
56
56
|
alternative_offering_ids: Annotated[
|
|
57
57
|
list[str] | None,
|
|
58
|
-
Field(description=
|
|
58
|
+
Field(description="Alternative offerings to consider if this one is unavailable"),
|
|
59
59
|
] = None
|
|
60
|
-
available: Annotated[bool, Field(description=
|
|
60
|
+
available: Annotated[bool, Field(description="Whether the offering is currently available")]
|
|
61
61
|
checked_at: Annotated[
|
|
62
|
-
AwareDatetime | None, Field(description=
|
|
62
|
+
AwareDatetime | None, Field(description="When this offering information was retrieved")
|
|
63
63
|
] = None
|
|
64
64
|
errors: Annotated[
|
|
65
|
-
list[error.Error] | None, Field(description=
|
|
65
|
+
list[error.Error] | None, Field(description="Errors during offering lookup")
|
|
66
66
|
] = None
|
|
67
67
|
ext: ext_1.ExtensionObject | None = None
|
|
68
68
|
matching_products: Annotated[
|
|
69
69
|
list[MatchingProduct] | None,
|
|
70
70
|
Field(
|
|
71
|
-
description=
|
|
71
|
+
description="Products matching the request context. Only included if include_products was true."
|
|
72
72
|
),
|
|
73
73
|
] = None
|
|
74
|
-
offering: Annotated[Offering | None, Field(description=
|
|
74
|
+
offering: Annotated[Offering | None, Field(description="Offering details")] = None
|
|
75
75
|
offering_token: Annotated[
|
|
76
76
|
str | None,
|
|
77
77
|
Field(
|
|
@@ -81,14 +81,14 @@ class SiGetOfferingResponse(AdCPBaseModel):
|
|
|
81
81
|
total_matching: Annotated[
|
|
82
82
|
int | None,
|
|
83
83
|
Field(
|
|
84
|
-
description=
|
|
84
|
+
description="Total number of products matching the context (may be more than returned in matching_products)",
|
|
85
85
|
ge=0,
|
|
86
86
|
),
|
|
87
87
|
] = None
|
|
88
88
|
ttl_seconds: Annotated[
|
|
89
89
|
int | None,
|
|
90
90
|
Field(
|
|
91
|
-
description=
|
|
91
|
+
description="How long this offering information is valid (seconds). Host should re-fetch after TTL expires.",
|
|
92
92
|
ge=0,
|
|
93
93
|
),
|
|
94
94
|
] = None
|
|
@@ -12,28 +12,28 @@ from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class ConsentScopeEnum(Enum):
|
|
15
|
-
name =
|
|
16
|
-
email =
|
|
17
|
-
shipping_address =
|
|
18
|
-
phone =
|
|
19
|
-
locale =
|
|
15
|
+
name = "name"
|
|
16
|
+
email = "email"
|
|
17
|
+
shipping_address = "shipping_address"
|
|
18
|
+
phone = "phone"
|
|
19
|
+
locale = "locale"
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class PrivacyPolicyAcknowledged(AdCPBaseModel):
|
|
23
23
|
model_config = ConfigDict(
|
|
24
|
-
extra=
|
|
24
|
+
extra="allow",
|
|
25
25
|
)
|
|
26
26
|
brand_policy_url: Annotated[
|
|
27
27
|
AnyUrl | None, Field(description="URL to brand's privacy policy")
|
|
28
28
|
] = None
|
|
29
29
|
brand_policy_version: Annotated[
|
|
30
|
-
str | None, Field(description=
|
|
30
|
+
str | None, Field(description="Version of policy acknowledged")
|
|
31
31
|
] = None
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class ShippingAddress(AdCPBaseModel):
|
|
35
35
|
model_config = ConfigDict(
|
|
36
|
-
extra=
|
|
36
|
+
extra="allow",
|
|
37
37
|
)
|
|
38
38
|
city: str | None = None
|
|
39
39
|
country: str | None = None
|
|
@@ -44,7 +44,7 @@ class ShippingAddress(AdCPBaseModel):
|
|
|
44
44
|
|
|
45
45
|
class User(AdCPBaseModel):
|
|
46
46
|
model_config = ConfigDict(
|
|
47
|
-
extra=
|
|
47
|
+
extra="allow",
|
|
48
48
|
)
|
|
49
49
|
email: Annotated[EmailStr | None, Field(description="User's email address")] = None
|
|
50
50
|
locale: Annotated[str | None, Field(description="User's locale (e.g., en-US)")] = None
|
|
@@ -57,22 +57,22 @@ class User(AdCPBaseModel):
|
|
|
57
57
|
|
|
58
58
|
class SiIdentity(AdCPBaseModel):
|
|
59
59
|
model_config = ConfigDict(
|
|
60
|
-
extra=
|
|
60
|
+
extra="allow",
|
|
61
61
|
)
|
|
62
62
|
anonymous_session_id: Annotated[
|
|
63
63
|
str | None,
|
|
64
|
-
Field(description=
|
|
64
|
+
Field(description="Session ID for anonymous users (when consent_granted is false)"),
|
|
65
65
|
] = None
|
|
66
|
-
consent_granted: Annotated[bool, Field(description=
|
|
66
|
+
consent_granted: Annotated[bool, Field(description="Whether user consented to share identity")]
|
|
67
67
|
consent_scope: Annotated[
|
|
68
|
-
list[ConsentScopeEnum] | None, Field(description=
|
|
68
|
+
list[ConsentScopeEnum] | None, Field(description="What data was consented to share")
|
|
69
69
|
] = None
|
|
70
70
|
consent_timestamp: Annotated[
|
|
71
|
-
AwareDatetime | None, Field(description=
|
|
71
|
+
AwareDatetime | None, Field(description="When consent was granted (ISO 8601)")
|
|
72
72
|
] = None
|
|
73
73
|
privacy_policy_acknowledged: Annotated[
|
|
74
|
-
PrivacyPolicyAcknowledged | None, Field(description=
|
|
74
|
+
PrivacyPolicyAcknowledged | None, Field(description="Brand privacy policy acknowledgment")
|
|
75
75
|
] = None
|
|
76
76
|
user: Annotated[
|
|
77
|
-
User | None, Field(description=
|
|
77
|
+
User | None, Field(description="User data (only present if consent_granted is true)")
|
|
78
78
|
] = None
|
|
@@ -15,18 +15,18 @@ from . import si_capabilities, si_identity
|
|
|
15
15
|
|
|
16
16
|
class SiInitiateSessionRequest(AdCPBaseModel):
|
|
17
17
|
model_config = ConfigDict(
|
|
18
|
-
extra=
|
|
18
|
+
extra="allow",
|
|
19
19
|
)
|
|
20
20
|
context: Annotated[
|
|
21
|
-
str, Field(description=
|
|
21
|
+
str, Field(description="Conversation handoff from the host describing what the user needs")
|
|
22
22
|
]
|
|
23
23
|
ext: ext_1.ExtensionObject | None = None
|
|
24
24
|
identity: si_identity.SiIdentity
|
|
25
25
|
media_buy_id: Annotated[
|
|
26
|
-
str | None, Field(description=
|
|
26
|
+
str | None, Field(description="AdCP media buy ID if session was triggered by advertising")
|
|
27
27
|
] = None
|
|
28
28
|
offering_id: Annotated[
|
|
29
|
-
str | None, Field(description=
|
|
29
|
+
str | None, Field(description="Brand-specific offering identifier to apply")
|
|
30
30
|
] = None
|
|
31
31
|
offering_token: Annotated[
|
|
32
32
|
str | None,
|
|
@@ -42,5 +42,5 @@ class SiInitiateSessionRequest(AdCPBaseModel):
|
|
|
42
42
|
] = None
|
|
43
43
|
supported_capabilities: Annotated[
|
|
44
44
|
si_capabilities.SiCapabilities | None,
|
|
45
|
-
Field(description=
|
|
45
|
+
Field(description="What capabilities the host supports"),
|
|
46
46
|
] = None
|
|
@@ -16,29 +16,29 @@ from . import si_capabilities, si_ui_element
|
|
|
16
16
|
|
|
17
17
|
class Response(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra="allow",
|
|
20
20
|
)
|
|
21
|
-
message: Annotated[str | None, Field(description=
|
|
21
|
+
message: Annotated[str | None, Field(description="Conversational message from brand agent")] = (
|
|
22
22
|
None
|
|
23
23
|
)
|
|
24
24
|
ui_elements: Annotated[
|
|
25
|
-
list[si_ui_element.SiUiElement] | None, Field(description=
|
|
25
|
+
list[si_ui_element.SiUiElement] | None, Field(description="Visual components to render")
|
|
26
26
|
] = None
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class SiInitiateSessionResponse(AdCPBaseModel):
|
|
30
30
|
model_config = ConfigDict(
|
|
31
|
-
extra=
|
|
31
|
+
extra="allow",
|
|
32
32
|
)
|
|
33
33
|
errors: Annotated[
|
|
34
|
-
list[error.Error] | None, Field(description=
|
|
34
|
+
list[error.Error] | None, Field(description="Errors during session initiation")
|
|
35
35
|
] = None
|
|
36
36
|
ext: ext_1.ExtensionObject | None = None
|
|
37
37
|
negotiated_capabilities: Annotated[
|
|
38
38
|
si_capabilities.SiCapabilities | None,
|
|
39
|
-
Field(description=
|
|
39
|
+
Field(description="Intersection of brand and host capabilities for this session"),
|
|
40
40
|
] = None
|
|
41
41
|
response: Annotated[Response | None, Field(description="Brand agent's initial response")] = None
|
|
42
42
|
session_id: Annotated[
|
|
43
|
-
str, Field(description=
|
|
43
|
+
str, Field(description="Unique session identifier for subsequent messages")
|
|
44
44
|
]
|
|
@@ -14,45 +14,45 @@ from ..core import ext as ext_1
|
|
|
14
14
|
|
|
15
15
|
class ActionResponse(AdCPBaseModel):
|
|
16
16
|
model_config = ConfigDict(
|
|
17
|
-
extra=
|
|
17
|
+
extra="allow",
|
|
18
18
|
)
|
|
19
|
-
action: Annotated[str | None, Field(description=
|
|
19
|
+
action: Annotated[str | None, Field(description="The action that was triggered")] = None
|
|
20
20
|
payload: Annotated[
|
|
21
|
-
dict[str, Any] | None, Field(description=
|
|
21
|
+
dict[str, Any] | None, Field(description="Action-specific response data")
|
|
22
22
|
] = None
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class SiSendMessageRequest1(AdCPBaseModel):
|
|
26
26
|
model_config = ConfigDict(
|
|
27
|
-
extra=
|
|
27
|
+
extra="allow",
|
|
28
28
|
)
|
|
29
29
|
action_response: Annotated[
|
|
30
30
|
ActionResponse | None,
|
|
31
|
-
Field(description=
|
|
31
|
+
Field(description="Response to a previous action_button (e.g., user clicked checkout)"),
|
|
32
32
|
] = None
|
|
33
33
|
ext: ext_1.ExtensionObject | None = None
|
|
34
34
|
message: Annotated[str, Field(description="User's message to the brand agent")]
|
|
35
|
-
session_id: Annotated[str, Field(description=
|
|
35
|
+
session_id: Annotated[str, Field(description="Active session identifier")]
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class SiSendMessageRequest2(AdCPBaseModel):
|
|
39
39
|
model_config = ConfigDict(
|
|
40
|
-
extra=
|
|
40
|
+
extra="allow",
|
|
41
41
|
)
|
|
42
42
|
action_response: Annotated[
|
|
43
43
|
ActionResponse,
|
|
44
|
-
Field(description=
|
|
44
|
+
Field(description="Response to a previous action_button (e.g., user clicked checkout)"),
|
|
45
45
|
]
|
|
46
46
|
ext: ext_1.ExtensionObject | None = None
|
|
47
47
|
message: Annotated[str | None, Field(description="User's message to the brand agent")] = None
|
|
48
|
-
session_id: Annotated[str, Field(description=
|
|
48
|
+
session_id: Annotated[str, Field(description="Active session identifier")]
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
class SiSendMessageRequest(RootModel[SiSendMessageRequest1 | SiSendMessageRequest2]):
|
|
52
52
|
root: Annotated[
|
|
53
53
|
SiSendMessageRequest1 | SiSendMessageRequest2,
|
|
54
54
|
Field(
|
|
55
|
-
description=
|
|
56
|
-
title=
|
|
55
|
+
description="Send a message to the brand agent within an active session",
|
|
56
|
+
title="SI Send Message Request",
|
|
57
57
|
),
|
|
58
58
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: sponsored_intelligence/si_send_message_response.json
|
|
3
|
-
# timestamp: 2026-
|
|
3
|
+
# timestamp: 2026-02-02T17:45:21+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -10,6 +10,7 @@ from typing import Annotated, Any
|
|
|
10
10
|
from adcp.types.base import AdCPBaseModel
|
|
11
11
|
from pydantic import ConfigDict, Field
|
|
12
12
|
|
|
13
|
+
from ..a2ui import surface as surface_1
|
|
13
14
|
from ..core import error
|
|
14
15
|
from ..core import ext as ext_1
|
|
15
16
|
from . import si_ui_element
|
|
@@ -17,13 +18,13 @@ from . import si_ui_element
|
|
|
17
18
|
|
|
18
19
|
class ContextForCheckout(AdCPBaseModel):
|
|
19
20
|
model_config = ConfigDict(
|
|
20
|
-
extra=
|
|
21
|
+
extra="allow",
|
|
21
22
|
)
|
|
22
23
|
applied_offers: Annotated[
|
|
23
|
-
list[str] | None, Field(description=
|
|
24
|
+
list[str] | None, Field(description="Offer IDs that were applied during the conversation")
|
|
24
25
|
] = None
|
|
25
26
|
conversation_summary: Annotated[
|
|
26
|
-
str | None, Field(description=
|
|
27
|
+
str | None, Field(description="Summary of the conversation leading to purchase")
|
|
27
28
|
] = None
|
|
28
29
|
|
|
29
30
|
|
|
@@ -34,68 +35,81 @@ class Price(AdCPBaseModel):
|
|
|
34
35
|
|
|
35
36
|
class Intent(AdCPBaseModel):
|
|
36
37
|
model_config = ConfigDict(
|
|
37
|
-
extra=
|
|
38
|
+
extra="allow",
|
|
38
39
|
)
|
|
39
40
|
action: Annotated[str | None, Field(description="The commerce action (e.g., 'purchase')")] = (
|
|
40
41
|
None
|
|
41
42
|
)
|
|
42
|
-
price: Annotated[Price | None, Field(description=
|
|
43
|
-
product: Annotated[dict[str, Any] | None, Field(description=
|
|
43
|
+
price: Annotated[Price | None, Field(description="Price information")] = None
|
|
44
|
+
product: Annotated[dict[str, Any] | None, Field(description="Product details for checkout")] = (
|
|
44
45
|
None
|
|
45
46
|
)
|
|
46
47
|
|
|
47
48
|
|
|
48
49
|
class Type(Enum):
|
|
49
|
-
transaction =
|
|
50
|
-
complete =
|
|
50
|
+
transaction = "transaction"
|
|
51
|
+
complete = "complete"
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
class Handoff(AdCPBaseModel):
|
|
54
55
|
model_config = ConfigDict(
|
|
55
|
-
extra=
|
|
56
|
+
extra="allow",
|
|
56
57
|
)
|
|
57
58
|
context_for_checkout: Annotated[
|
|
58
|
-
ContextForCheckout | None, Field(description=
|
|
59
|
+
ContextForCheckout | None, Field(description="Context to pass to ACP for seamless checkout")
|
|
59
60
|
] = None
|
|
60
61
|
intent: Annotated[
|
|
61
62
|
Intent | None,
|
|
62
|
-
Field(description=
|
|
63
|
+
Field(description="For transaction handoffs: what the user wants to purchase"),
|
|
63
64
|
] = None
|
|
64
65
|
type: Annotated[
|
|
65
66
|
Type | None,
|
|
66
67
|
Field(
|
|
67
|
-
description=
|
|
68
|
+
description="Type of handoff: transaction (ready for ACP checkout) or complete (conversation done)"
|
|
68
69
|
),
|
|
69
70
|
] = None
|
|
70
71
|
|
|
71
72
|
|
|
72
73
|
class SessionStatus(Enum):
|
|
73
|
-
active =
|
|
74
|
-
pending_handoff =
|
|
75
|
-
complete =
|
|
74
|
+
active = "active"
|
|
75
|
+
pending_handoff = "pending_handoff"
|
|
76
|
+
complete = "complete"
|
|
76
77
|
|
|
77
78
|
|
|
78
79
|
class Response(AdCPBaseModel):
|
|
79
80
|
model_config = ConfigDict(
|
|
80
|
-
extra=
|
|
81
|
+
extra="allow",
|
|
81
82
|
)
|
|
82
|
-
message: Annotated[str | None, Field(description=
|
|
83
|
+
message: Annotated[str | None, Field(description="Conversational message from brand agent")] = (
|
|
83
84
|
None
|
|
84
85
|
)
|
|
86
|
+
surface: Annotated[
|
|
87
|
+
surface_1.A2UiSurface | None, Field(description="A2UI surface with interactive components")
|
|
88
|
+
] = None
|
|
85
89
|
ui_elements: Annotated[
|
|
86
|
-
list[si_ui_element.SiUiElement] | None,
|
|
90
|
+
list[si_ui_element.SiUiElement] | None,
|
|
91
|
+
Field(
|
|
92
|
+
deprecated=True,
|
|
93
|
+
description="Visual components to render (DEPRECATED: use surface instead)",
|
|
94
|
+
),
|
|
87
95
|
] = None
|
|
88
96
|
|
|
89
97
|
|
|
90
98
|
class SiSendMessageResponse(AdCPBaseModel):
|
|
91
99
|
model_config = ConfigDict(
|
|
92
|
-
extra=
|
|
100
|
+
extra="allow",
|
|
93
101
|
)
|
|
94
102
|
errors: list[error.Error] | None = None
|
|
95
103
|
ext: ext_1.ExtensionObject | None = None
|
|
96
104
|
handoff: Annotated[
|
|
97
|
-
Handoff | None, Field(description=
|
|
105
|
+
Handoff | None, Field(description="Handoff request when session_status is pending_handoff")
|
|
106
|
+
] = None
|
|
107
|
+
mcp_resource_uri: Annotated[
|
|
108
|
+
str | None,
|
|
109
|
+
Field(
|
|
110
|
+
description="MCP resource URI for hosts with MCP Apps support (e.g., ui://si/session-abc123)"
|
|
111
|
+
),
|
|
98
112
|
] = None
|
|
99
113
|
response: Annotated[Response | None, Field(description="Brand agent's response")] = None
|
|
100
|
-
session_id: Annotated[str, Field(description=
|
|
101
|
-
session_status: Annotated[SessionStatus, Field(description=
|
|
114
|
+
session_id: Annotated[str, Field(description="Session identifier")]
|
|
115
|
+
session_status: Annotated[SessionStatus, Field(description="Current session status")]
|
|
@@ -14,47 +14,47 @@ from ..core import ext as ext_1
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class Reason(Enum):
|
|
17
|
-
handoff_transaction =
|
|
18
|
-
handoff_complete =
|
|
19
|
-
user_exit =
|
|
20
|
-
session_timeout =
|
|
21
|
-
host_terminated =
|
|
17
|
+
handoff_transaction = "handoff_transaction"
|
|
18
|
+
handoff_complete = "handoff_complete"
|
|
19
|
+
user_exit = "user_exit"
|
|
20
|
+
session_timeout = "session_timeout"
|
|
21
|
+
host_terminated = "host_terminated"
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class Action(Enum):
|
|
25
|
-
purchase =
|
|
26
|
-
subscribe =
|
|
25
|
+
purchase = "purchase"
|
|
26
|
+
subscribe = "subscribe"
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class TransactionIntent(AdCPBaseModel):
|
|
30
30
|
model_config = ConfigDict(
|
|
31
|
-
extra=
|
|
31
|
+
extra="allow",
|
|
32
32
|
)
|
|
33
33
|
action: Action | None = None
|
|
34
|
-
product: Annotated[dict[str, Any] | None, Field(description=
|
|
34
|
+
product: Annotated[dict[str, Any] | None, Field(description="Product/service details")] = None
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class TerminationContext(AdCPBaseModel):
|
|
38
38
|
model_config = ConfigDict(
|
|
39
|
-
extra=
|
|
39
|
+
extra="allow",
|
|
40
40
|
)
|
|
41
41
|
cause: Annotated[
|
|
42
|
-
str | None, Field(description=
|
|
42
|
+
str | None, Field(description="For host_terminated - why host ended session")
|
|
43
43
|
] = None
|
|
44
|
-
summary: Annotated[str | None, Field(description=
|
|
44
|
+
summary: Annotated[str | None, Field(description="Summary of the conversation")] = None
|
|
45
45
|
transaction_intent: Annotated[
|
|
46
46
|
TransactionIntent | None,
|
|
47
|
-
Field(description=
|
|
47
|
+
Field(description="For handoff_transaction - what user wants to buy"),
|
|
48
48
|
] = None
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
class SiTerminateSessionRequest(AdCPBaseModel):
|
|
52
52
|
model_config = ConfigDict(
|
|
53
|
-
extra=
|
|
53
|
+
extra="allow",
|
|
54
54
|
)
|
|
55
55
|
ext: ext_1.ExtensionObject | None = None
|
|
56
|
-
reason: Annotated[Reason, Field(description=
|
|
57
|
-
session_id: Annotated[str, Field(description=
|
|
56
|
+
reason: Annotated[Reason, Field(description="Reason for termination")]
|
|
57
|
+
session_id: Annotated[str, Field(description="Session identifier to terminate")]
|
|
58
58
|
termination_context: Annotated[
|
|
59
|
-
TerminationContext | None, Field(description=
|
|
59
|
+
TerminationContext | None, Field(description="Context for the termination")
|
|
60
60
|
] = None
|
|
@@ -16,39 +16,39 @@ from ..core import ext as ext_1
|
|
|
16
16
|
|
|
17
17
|
class AcpHandoff(AdCPBaseModel):
|
|
18
18
|
model_config = ConfigDict(
|
|
19
|
-
extra=
|
|
19
|
+
extra="allow",
|
|
20
20
|
)
|
|
21
|
-
checkout_token: Annotated[str | None, Field(description=
|
|
22
|
-
checkout_url: Annotated[AnyUrl | None, Field(description=
|
|
23
|
-
product: Annotated[dict[str, Any] | None, Field(description=
|
|
21
|
+
checkout_token: Annotated[str | None, Field(description="Token for ACP checkout flow")] = None
|
|
22
|
+
checkout_url: Annotated[AnyUrl | None, Field(description="ACP checkout initiation URL")] = None
|
|
23
|
+
product: Annotated[dict[str, Any] | None, Field(description="Product details for checkout")] = (
|
|
24
24
|
None
|
|
25
25
|
)
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class Action(Enum):
|
|
29
|
-
save_for_later =
|
|
30
|
-
set_reminder =
|
|
31
|
-
subscribe_updates =
|
|
32
|
-
none =
|
|
29
|
+
save_for_later = "save_for_later"
|
|
30
|
+
set_reminder = "set_reminder"
|
|
31
|
+
subscribe_updates = "subscribe_updates"
|
|
32
|
+
none = "none"
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class FollowUp(AdCPBaseModel):
|
|
36
36
|
model_config = ConfigDict(
|
|
37
|
-
extra=
|
|
37
|
+
extra="allow",
|
|
38
38
|
)
|
|
39
39
|
action: Action | None = None
|
|
40
|
-
data: Annotated[dict[str, Any] | None, Field(description=
|
|
40
|
+
data: Annotated[dict[str, Any] | None, Field(description="Data for follow-up action")] = None
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class SiTerminateSessionResponse(AdCPBaseModel):
|
|
44
44
|
model_config = ConfigDict(
|
|
45
|
-
extra=
|
|
45
|
+
extra="allow",
|
|
46
46
|
)
|
|
47
47
|
acp_handoff: Annotated[
|
|
48
|
-
AcpHandoff | None, Field(description=
|
|
48
|
+
AcpHandoff | None, Field(description="ACP checkout handoff data (for handoff_transaction)")
|
|
49
49
|
] = None
|
|
50
50
|
errors: list[error.Error] | None = None
|
|
51
51
|
ext: ext_1.ExtensionObject | None = None
|
|
52
|
-
follow_up: Annotated[FollowUp | None, Field(description=
|
|
53
|
-
session_id: Annotated[str, Field(description=
|
|
54
|
-
terminated: Annotated[bool, Field(description=
|
|
52
|
+
follow_up: Annotated[FollowUp | None, Field(description="Suggested follow-up actions")] = None
|
|
53
|
+
session_id: Annotated[str, Field(description="Terminated session identifier")]
|
|
54
|
+
terminated: Annotated[bool, Field(description="Whether session was successfully terminated")]
|
|
@@ -12,19 +12,19 @@ from pydantic import ConfigDict, Field
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class Type(Enum):
|
|
15
|
-
text =
|
|
16
|
-
link =
|
|
17
|
-
image =
|
|
18
|
-
product_card =
|
|
19
|
-
carousel =
|
|
20
|
-
action_button =
|
|
21
|
-
app_handoff =
|
|
22
|
-
integration_actions =
|
|
15
|
+
text = "text"
|
|
16
|
+
link = "link"
|
|
17
|
+
image = "image"
|
|
18
|
+
product_card = "product_card"
|
|
19
|
+
carousel = "carousel"
|
|
20
|
+
action_button = "action_button"
|
|
21
|
+
app_handoff = "app_handoff"
|
|
22
|
+
integration_actions = "integration_actions"
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class SiUiElement(AdCPBaseModel):
|
|
26
26
|
model_config = ConfigDict(
|
|
27
|
-
extra=
|
|
27
|
+
extra="allow",
|
|
28
28
|
)
|
|
29
|
-
data: Annotated[dict[str, Any] | None, Field(description=
|
|
30
|
-
type: Annotated[Type, Field(description=
|
|
29
|
+
data: Annotated[dict[str, Any] | None, Field(description="Component-specific data")] = None
|
|
30
|
+
type: Annotated[Type, Field(description="Component type")]
|