adcp 2.19.0__py3-none-any.whl → 3.0.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 +6 -14
- adcp/__main__.py +94 -51
- adcp/adagents.py +91 -19
- adcp/client.py +865 -0
- adcp/protocols/a2a.py +84 -0
- adcp/protocols/base.py +101 -0
- adcp/protocols/mcp.py +84 -0
- adcp/server/__init__.py +49 -0
- adcp/server/base.py +368 -0
- adcp/server/content_standards.py +561 -0
- adcp/server/governance.py +491 -0
- adcp/server/mcp_tools.py +471 -0
- adcp/server/proposal.py +334 -0
- adcp/server/sponsored_intelligence.py +444 -0
- adcp/types/__init__.py +111 -23
- adcp/types/_ergonomic.py +35 -14
- adcp/types/_generated.py +346 -52
- adcp/types/aliases.py +13 -20
- adcp/types/base.py +1 -1
- adcp/types/generated_poc/adagents.py +196 -189
- adcp/types/generated_poc/content_standards/__init__.py +3 -0
- adcp/types/generated_poc/content_standards/artifact.py +208 -0
- adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
- adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
- adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
- adcp/types/generated_poc/content_standards/content_standards.py +66 -0
- adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
- adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
- adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
- adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
- adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
- adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
- adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
- adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
- adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
- adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
- adcp/types/generated_poc/core/activation_key.py +9 -9
- adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
- adcp/types/generated_poc/core/assets/css_asset.py +3 -3
- adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/html_asset.py +3 -3
- adcp/types/generated_poc/core/assets/image_asset.py +7 -7
- adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
- adcp/types/generated_poc/core/assets/text_asset.py +3 -3
- adcp/types/generated_poc/core/assets/url_asset.py +4 -4
- adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
- adcp/types/generated_poc/core/assets/video_asset.py +8 -8
- adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
- adcp/types/generated_poc/core/async_response_data.py +3 -3
- adcp/types/generated_poc/core/brand_manifest.py +122 -59
- adcp/types/generated_poc/core/brand_manifest_ref.py +10 -10
- adcp/types/generated_poc/core/context.py +2 -2
- adcp/types/generated_poc/core/creative_asset.py +20 -19
- adcp/types/generated_poc/core/creative_assignment.py +4 -4
- adcp/types/generated_poc/core/creative_filters.py +18 -28
- adcp/types/generated_poc/core/creative_manifest.py +3 -3
- adcp/types/generated_poc/core/creative_policy.py +5 -5
- adcp/types/generated_poc/core/delivery_metrics.py +33 -33
- adcp/types/generated_poc/core/deployment.py +21 -21
- adcp/types/generated_poc/core/destination.py +12 -12
- adcp/types/generated_poc/core/error.py +7 -7
- adcp/types/generated_poc/core/ext.py +2 -2
- adcp/types/generated_poc/core/format.py +66 -66
- adcp/types/generated_poc/core/format_id.py +6 -6
- adcp/types/generated_poc/core/frequency_cap.py +3 -3
- adcp/types/generated_poc/core/identifier.py +3 -3
- adcp/types/generated_poc/core/mcp_webhook_payload.py +11 -11
- adcp/types/generated_poc/core/measurement.py +9 -9
- adcp/types/generated_poc/core/media_buy.py +8 -8
- adcp/types/generated_poc/core/media_buy_features.py +29 -0
- adcp/types/generated_poc/core/offering.py +80 -0
- adcp/types/generated_poc/core/package.py +9 -9
- adcp/types/generated_poc/core/performance_feedback.py +19 -19
- adcp/types/generated_poc/core/placement.py +5 -5
- adcp/types/generated_poc/core/pricing_option.py +9 -15
- adcp/types/generated_poc/core/product.py +21 -21
- adcp/types/generated_poc/core/product_allocation.py +48 -0
- adcp/types/generated_poc/core/product_filters.py +89 -24
- adcp/types/generated_poc/core/promoted_offerings.py +29 -38
- adcp/types/generated_poc/core/promoted_products.py +3 -3
- adcp/types/generated_poc/core/property.py +10 -10
- adcp/types/generated_poc/core/property_id.py +5 -5
- adcp/types/generated_poc/core/property_list_ref.py +5 -5
- adcp/types/generated_poc/core/property_tag.py +5 -5
- adcp/types/generated_poc/core/proposal.py +64 -0
- adcp/types/generated_poc/core/protocol_envelope.py +9 -9
- adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
- adcp/types/generated_poc/core/push_notification_config.py +6 -6
- adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
- adcp/types/generated_poc/core/reporting_webhook.py +70 -0
- adcp/types/generated_poc/core/response.py +5 -5
- adcp/types/generated_poc/core/signal_filters.py +6 -6
- adcp/types/generated_poc/core/start_timing.py +4 -4
- adcp/types/generated_poc/core/sub_asset.py +15 -15
- adcp/types/generated_poc/core/targeting.py +59 -18
- adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
- adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/creative/preview_creative_request.py +25 -25
- adcp/types/generated_poc/creative/preview_creative_response.py +29 -29
- adcp/types/generated_poc/creative/preview_render.py +26 -26
- adcp/types/generated_poc/enums/adcp_domain.py +5 -5
- adcp/types/generated_poc/enums/asset_content_type.py +14 -14
- adcp/types/generated_poc/enums/auth_scheme.py +3 -3
- adcp/types/generated_poc/enums/available_metric.py +10 -10
- adcp/types/generated_poc/enums/channels.py +21 -11
- adcp/types/generated_poc/enums/co_branding_requirement.py +4 -4
- adcp/types/generated_poc/enums/creative_action.py +6 -6
- adcp/types/generated_poc/enums/creative_agent_capability.py +5 -5
- adcp/types/generated_poc/enums/creative_sort_field.py +7 -7
- adcp/types/generated_poc/enums/creative_status.py +6 -5
- adcp/types/generated_poc/enums/daast_tracking_event.py +12 -12
- adcp/types/generated_poc/enums/daast_version.py +3 -3
- adcp/types/generated_poc/enums/delivery_type.py +3 -3
- adcp/types/generated_poc/enums/dimension_unit.py +5 -5
- adcp/types/generated_poc/enums/feed_format.py +4 -4
- adcp/types/generated_poc/enums/feedback_source.py +5 -5
- adcp/types/generated_poc/enums/format_category.py +8 -8
- adcp/types/generated_poc/enums/format_id_parameter.py +3 -3
- adcp/types/generated_poc/enums/frequency_cap_scope.py +4 -4
- adcp/types/generated_poc/enums/geo_level.py +14 -0
- adcp/types/generated_poc/enums/history_entry_type.py +3 -3
- adcp/types/generated_poc/enums/http_method.py +3 -3
- adcp/types/generated_poc/enums/identifier_types.py +20 -20
- adcp/types/generated_poc/enums/javascript_module_type.py +4 -4
- adcp/types/generated_poc/enums/landing_page_requirement.py +4 -4
- adcp/types/generated_poc/enums/markdown_flavor.py +3 -3
- adcp/types/generated_poc/enums/media_buy_status.py +5 -5
- adcp/types/generated_poc/enums/metric_type.py +9 -9
- adcp/types/generated_poc/enums/metro_system.py +15 -0
- adcp/types/generated_poc/enums/notification_type.py +5 -5
- adcp/types/generated_poc/enums/pacing.py +4 -4
- adcp/types/generated_poc/enums/postal_system.py +19 -0
- adcp/types/generated_poc/enums/preview_output_format.py +3 -3
- adcp/types/generated_poc/enums/pricing_model.py +8 -8
- adcp/types/generated_poc/enums/property_type.py +9 -8
- adcp/types/generated_poc/enums/publisher_identifier_types.py +6 -6
- adcp/types/generated_poc/enums/reporting_frequency.py +4 -4
- adcp/types/generated_poc/enums/signal_catalog_type.py +4 -4
- adcp/types/generated_poc/enums/sort_direction.py +3 -3
- adcp/types/generated_poc/enums/task_status.py +10 -10
- adcp/types/generated_poc/enums/task_type.py +12 -12
- adcp/types/generated_poc/enums/update_frequency.py +5 -5
- adcp/types/generated_poc/enums/url_asset_type.py +4 -4
- adcp/types/generated_poc/enums/validation_mode.py +3 -3
- adcp/types/generated_poc/enums/vast_tracking_event.py +17 -17
- adcp/types/generated_poc/enums/vast_version.py +6 -6
- adcp/types/generated_poc/enums/webhook_response_type.py +5 -5
- adcp/types/generated_poc/enums/webhook_security_method.py +4 -4
- adcp/types/generated_poc/extensions/extension_meta.py +20 -12
- adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
- adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/create_media_buy_request.py +65 -37
- adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
- adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
- adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
- adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
- adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
- adcp/types/generated_poc/media_buy/get_products_request.py +14 -5
- adcp/types/generated_poc/media_buy/get_products_response.py +12 -6
- adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
- adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +9 -9
- adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
- adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
- adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
- adcp/types/generated_poc/media_buy/list_creatives_response.py +54 -57
- adcp/types/generated_poc/media_buy/package_request.py +12 -12
- adcp/types/generated_poc/media_buy/package_update.py +119 -0
- adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
- adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
- adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
- adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
- adcp/types/generated_poc/media_buy/update_media_buy_request.py +28 -124
- adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
- adcp/types/generated_poc/pricing_options/cpc_option.py +40 -15
- adcp/types/generated_poc/pricing_options/cpcv_option.py +41 -16
- adcp/types/generated_poc/pricing_options/cpm_option.py +62 -0
- adcp/types/generated_poc/pricing_options/cpp_option.py +46 -23
- adcp/types/generated_poc/pricing_options/cpv_option.py +45 -26
- adcp/types/generated_poc/pricing_options/flat_rate_option.py +53 -47
- adcp/types/generated_poc/pricing_options/vcpm_option.py +70 -0
- adcp/types/generated_poc/property/base_property_source.py +16 -16
- adcp/types/generated_poc/property/create_property_list_request.py +5 -5
- adcp/types/generated_poc/property/create_property_list_response.py +4 -4
- adcp/types/generated_poc/property/delete_property_list_request.py +3 -3
- adcp/types/generated_poc/property/delete_property_list_response.py +4 -4
- adcp/types/generated_poc/property/feature_requirement.py +8 -8
- adcp/types/generated_poc/property/get_property_list_request.py +6 -6
- adcp/types/generated_poc/property/get_property_list_response.py +12 -12
- adcp/types/generated_poc/property/list_property_lists_request.py +6 -6
- adcp/types/generated_poc/property/list_property_lists_response.py +9 -9
- adcp/types/generated_poc/property/property_error.py +11 -11
- adcp/types/generated_poc/property/property_feature.py +5 -5
- adcp/types/generated_poc/property/property_feature_definition.py +19 -19
- adcp/types/generated_poc/property/property_list.py +12 -12
- adcp/types/generated_poc/property/property_list_changed_webhook.py +12 -12
- adcp/types/generated_poc/property/property_list_filters.py +9 -9
- adcp/types/generated_poc/property/update_property_list_request.py +9 -9
- adcp/types/generated_poc/property/update_property_list_response.py +3 -3
- adcp/types/generated_poc/protocol/__init__.py +3 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
- adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
- adcp/types/generated_poc/protocols/adcp_extension.py +14 -17
- adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
- adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
- adcp/types/generated_poc/signals/get_signals_request.py +9 -9
- adcp/types/generated_poc/signals/get_signals_response.py +16 -16
- adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
- adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
- adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
- adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
- adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
- adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
- adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
- adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
- adcp/utils/format_assets.py +5 -5
- adcp/utils/preview_cache.py +2 -2
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
- adcp-3.0.0.dist-info/RECORD +264 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
- adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
- adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -58
- adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
- adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -61
- adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
- adcp/types/generated_poc/property/list_property_features_request.py +0 -25
- adcp/types/generated_poc/property/list_property_features_response.py +0 -24
- adcp-2.19.0.dist-info/RECORD +0 -220
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_capabilities.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Commerce(AdCPBaseModel):
|
|
15
|
+
model_config = ConfigDict(
|
|
16
|
+
extra='allow',
|
|
17
|
+
)
|
|
18
|
+
acp_checkout: Annotated[
|
|
19
|
+
bool | None, Field(description='Supports ACP (Agentic Commerce Protocol) checkout handoff')
|
|
20
|
+
] = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class StandardEnum(Enum):
|
|
24
|
+
text = 'text'
|
|
25
|
+
link = 'link'
|
|
26
|
+
image = 'image'
|
|
27
|
+
product_card = 'product_card'
|
|
28
|
+
carousel = 'carousel'
|
|
29
|
+
action_button = 'action_button'
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class Components(AdCPBaseModel):
|
|
33
|
+
model_config = ConfigDict(
|
|
34
|
+
extra='allow',
|
|
35
|
+
)
|
|
36
|
+
extensions: Annotated[
|
|
37
|
+
dict[str, Any] | None,
|
|
38
|
+
Field(description='Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)'),
|
|
39
|
+
] = None
|
|
40
|
+
standard: Annotated[
|
|
41
|
+
list[StandardEnum] | None,
|
|
42
|
+
Field(description='Standard components that all SI hosts must render'),
|
|
43
|
+
] = None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class Avatar(AdCPBaseModel):
|
|
47
|
+
model_config = ConfigDict(
|
|
48
|
+
extra='allow',
|
|
49
|
+
)
|
|
50
|
+
avatar_id: Annotated[str | None, Field(description='Brand avatar identifier')] = None
|
|
51
|
+
provider: Annotated[
|
|
52
|
+
str | None, Field(description='Avatar provider (d-id, heygen, synthesia, etc.)')
|
|
53
|
+
] = None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class Video(AdCPBaseModel):
|
|
57
|
+
model_config = ConfigDict(
|
|
58
|
+
extra='allow',
|
|
59
|
+
)
|
|
60
|
+
formats: Annotated[
|
|
61
|
+
list[str] | None, Field(description='Supported video formats (mp4, webm, etc.)')
|
|
62
|
+
] = None
|
|
63
|
+
max_duration_seconds: Annotated[int | None, Field(description='Maximum video duration')] = None
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class Voice(AdCPBaseModel):
|
|
67
|
+
model_config = ConfigDict(
|
|
68
|
+
extra='allow',
|
|
69
|
+
)
|
|
70
|
+
provider: Annotated[
|
|
71
|
+
str | None, Field(description='TTS provider (elevenlabs, openai, etc.)')
|
|
72
|
+
] = None
|
|
73
|
+
voice_id: Annotated[str | None, Field(description='Brand voice identifier')] = None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class Modalities(AdCPBaseModel):
|
|
77
|
+
model_config = ConfigDict(
|
|
78
|
+
extra='allow',
|
|
79
|
+
)
|
|
80
|
+
avatar: Annotated[
|
|
81
|
+
bool | Avatar | None, Field(description='Animated video presence with brand avatar')
|
|
82
|
+
] = None
|
|
83
|
+
conversational: Annotated[
|
|
84
|
+
bool | None, Field(description='Pure text exchange - the baseline modality')
|
|
85
|
+
] = True
|
|
86
|
+
video: Annotated[bool | Video | None, Field(description='Brand video content playback')] = None
|
|
87
|
+
voice: Annotated[
|
|
88
|
+
bool | Voice | None, Field(description='Audio-based interaction using brand voice')
|
|
89
|
+
] = None
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class SiCapabilities(AdCPBaseModel):
|
|
93
|
+
model_config = ConfigDict(
|
|
94
|
+
extra='allow',
|
|
95
|
+
)
|
|
96
|
+
commerce: Annotated[Commerce | None, Field(description='Commerce capabilities')] = None
|
|
97
|
+
components: Annotated[Components | None, Field(description='Visual components supported')] = (
|
|
98
|
+
None
|
|
99
|
+
)
|
|
100
|
+
modalities: Annotated[
|
|
101
|
+
Modalities | None, Field(description='Interaction modalities supported')
|
|
102
|
+
] = None
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_get_offering_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class SiGetOfferingRequest(AdCPBaseModel):
|
|
16
|
+
model_config = ConfigDict(
|
|
17
|
+
extra='allow',
|
|
18
|
+
)
|
|
19
|
+
context: Annotated[
|
|
20
|
+
str | None,
|
|
21
|
+
Field(
|
|
22
|
+
description="Optional natural language context about user intent for personalized results (e.g., 'mens size 14 near Cincinnati'). Must be anonymous - no PII."
|
|
23
|
+
),
|
|
24
|
+
] = None
|
|
25
|
+
ext: ext_1.ExtensionObject | None = None
|
|
26
|
+
include_products: Annotated[
|
|
27
|
+
bool | None, Field(description='Whether to include matching products in the response')
|
|
28
|
+
] = False
|
|
29
|
+
offering_id: Annotated[
|
|
30
|
+
str, Field(description='Offering identifier from promoted offerings to get details for')
|
|
31
|
+
]
|
|
32
|
+
product_limit: Annotated[
|
|
33
|
+
int | None, Field(description='Maximum number of matching products to return', ge=1, le=50)
|
|
34
|
+
] = 5
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_get_offering_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import error
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class MatchingProduct(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='allow',
|
|
19
|
+
)
|
|
20
|
+
availability_summary: Annotated[
|
|
21
|
+
str | None,
|
|
22
|
+
Field(
|
|
23
|
+
description="Brief availability info (e.g., 'In stock', 'Size 14 available', '3 left')"
|
|
24
|
+
),
|
|
25
|
+
] = None
|
|
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
|
+
price: Annotated[str | None, Field(description="Display price (e.g., '$129', '$89.99')")] = None
|
|
30
|
+
product_id: Annotated[str, Field(description='Product identifier')]
|
|
31
|
+
url: Annotated[AnyUrl | None, Field(description='Product detail page URL')] = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Offering(AdCPBaseModel):
|
|
35
|
+
model_config = ConfigDict(
|
|
36
|
+
extra='allow',
|
|
37
|
+
)
|
|
38
|
+
expires_at: Annotated[AwareDatetime | None, Field(description='When this offering expires')] = (
|
|
39
|
+
None
|
|
40
|
+
)
|
|
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
|
+
price_hint: Annotated[
|
|
45
|
+
str | None, Field(description="Price indication (e.g., 'from $199', '50% off')")
|
|
46
|
+
] = None
|
|
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
|
+
|
|
51
|
+
|
|
52
|
+
class SiGetOfferingResponse(AdCPBaseModel):
|
|
53
|
+
model_config = ConfigDict(
|
|
54
|
+
extra='allow',
|
|
55
|
+
)
|
|
56
|
+
alternative_offering_ids: Annotated[
|
|
57
|
+
list[str] | None,
|
|
58
|
+
Field(description='Alternative offerings to consider if this one is unavailable'),
|
|
59
|
+
] = None
|
|
60
|
+
available: Annotated[bool, Field(description='Whether the offering is currently available')]
|
|
61
|
+
checked_at: Annotated[
|
|
62
|
+
AwareDatetime | None, Field(description='When this offering information was retrieved')
|
|
63
|
+
] = None
|
|
64
|
+
errors: Annotated[
|
|
65
|
+
list[error.Error] | None, Field(description='Errors during offering lookup')
|
|
66
|
+
] = None
|
|
67
|
+
ext: ext_1.ExtensionObject | None = None
|
|
68
|
+
matching_products: Annotated[
|
|
69
|
+
list[MatchingProduct] | None,
|
|
70
|
+
Field(
|
|
71
|
+
description='Products matching the request context. Only included if include_products was true.'
|
|
72
|
+
),
|
|
73
|
+
] = None
|
|
74
|
+
offering: Annotated[Offering | None, Field(description='Offering details')] = None
|
|
75
|
+
offering_token: Annotated[
|
|
76
|
+
str | None,
|
|
77
|
+
Field(
|
|
78
|
+
description="Token to pass to si_initiate_session for session continuity. Brand stores the full query context server-side (products shown, order, context) so they can resolve references like 'the second one' when the session starts."
|
|
79
|
+
),
|
|
80
|
+
] = None
|
|
81
|
+
total_matching: Annotated[
|
|
82
|
+
int | None,
|
|
83
|
+
Field(
|
|
84
|
+
description='Total number of products matching the context (may be more than returned in matching_products)',
|
|
85
|
+
ge=0,
|
|
86
|
+
),
|
|
87
|
+
] = None
|
|
88
|
+
ttl_seconds: Annotated[
|
|
89
|
+
int | None,
|
|
90
|
+
Field(
|
|
91
|
+
description='How long this offering information is valid (seconds). Host should re-fetch after TTL expires.',
|
|
92
|
+
ge=0,
|
|
93
|
+
),
|
|
94
|
+
] = None
|
|
95
|
+
unavailable_reason: Annotated[
|
|
96
|
+
str | None,
|
|
97
|
+
Field(
|
|
98
|
+
description="If not available, why (e.g., 'expired', 'sold_out', 'region_restricted')"
|
|
99
|
+
),
|
|
100
|
+
] = None
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_identity.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AnyUrl, AwareDatetime, ConfigDict, EmailStr, Field
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ConsentScopeEnum(Enum):
|
|
15
|
+
name = 'name'
|
|
16
|
+
email = 'email'
|
|
17
|
+
shipping_address = 'shipping_address'
|
|
18
|
+
phone = 'phone'
|
|
19
|
+
locale = 'locale'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class PrivacyPolicyAcknowledged(AdCPBaseModel):
|
|
23
|
+
model_config = ConfigDict(
|
|
24
|
+
extra='allow',
|
|
25
|
+
)
|
|
26
|
+
brand_policy_url: Annotated[
|
|
27
|
+
AnyUrl | None, Field(description="URL to brand's privacy policy")
|
|
28
|
+
] = None
|
|
29
|
+
brand_policy_version: Annotated[
|
|
30
|
+
str | None, Field(description='Version of policy acknowledged')
|
|
31
|
+
] = None
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ShippingAddress(AdCPBaseModel):
|
|
35
|
+
model_config = ConfigDict(
|
|
36
|
+
extra='allow',
|
|
37
|
+
)
|
|
38
|
+
city: str | None = None
|
|
39
|
+
country: str | None = None
|
|
40
|
+
postal_code: str | None = None
|
|
41
|
+
state: str | None = None
|
|
42
|
+
street: str | None = None
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class User(AdCPBaseModel):
|
|
46
|
+
model_config = ConfigDict(
|
|
47
|
+
extra='allow',
|
|
48
|
+
)
|
|
49
|
+
email: Annotated[EmailStr | None, Field(description="User's email address")] = None
|
|
50
|
+
locale: Annotated[str | None, Field(description="User's locale (e.g., en-US)")] = None
|
|
51
|
+
name: Annotated[str | None, Field(description="User's display name")] = None
|
|
52
|
+
phone: Annotated[str | None, Field(description="User's phone number")] = None
|
|
53
|
+
shipping_address: Annotated[
|
|
54
|
+
ShippingAddress | None, Field(description="User's shipping address for accurate pricing")
|
|
55
|
+
] = None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class SiIdentity(AdCPBaseModel):
|
|
59
|
+
model_config = ConfigDict(
|
|
60
|
+
extra='allow',
|
|
61
|
+
)
|
|
62
|
+
anonymous_session_id: Annotated[
|
|
63
|
+
str | None,
|
|
64
|
+
Field(description='Session ID for anonymous users (when consent_granted is false)'),
|
|
65
|
+
] = None
|
|
66
|
+
consent_granted: Annotated[bool, Field(description='Whether user consented to share identity')]
|
|
67
|
+
consent_scope: Annotated[
|
|
68
|
+
list[ConsentScopeEnum] | None, Field(description='What data was consented to share')
|
|
69
|
+
] = None
|
|
70
|
+
consent_timestamp: Annotated[
|
|
71
|
+
AwareDatetime | None, Field(description='When consent was granted (ISO 8601)')
|
|
72
|
+
] = None
|
|
73
|
+
privacy_policy_acknowledged: Annotated[
|
|
74
|
+
PrivacyPolicyAcknowledged | None, Field(description='Brand privacy policy acknowledgment')
|
|
75
|
+
] = None
|
|
76
|
+
user: Annotated[
|
|
77
|
+
User | None, Field(description='User data (only present if consent_granted is true)')
|
|
78
|
+
] = None
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_initiate_session_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
from . import si_capabilities, si_identity
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SiInitiateSessionRequest(AdCPBaseModel):
|
|
17
|
+
model_config = ConfigDict(
|
|
18
|
+
extra='allow',
|
|
19
|
+
)
|
|
20
|
+
context: Annotated[
|
|
21
|
+
str, Field(description='Conversation handoff from the host describing what the user needs')
|
|
22
|
+
]
|
|
23
|
+
ext: ext_1.ExtensionObject | None = None
|
|
24
|
+
identity: si_identity.SiIdentity
|
|
25
|
+
media_buy_id: Annotated[
|
|
26
|
+
str | None, Field(description='AdCP media buy ID if session was triggered by advertising')
|
|
27
|
+
] = None
|
|
28
|
+
offering_id: Annotated[
|
|
29
|
+
str | None, Field(description='Brand-specific offering identifier to apply')
|
|
30
|
+
] = None
|
|
31
|
+
offering_token: Annotated[
|
|
32
|
+
str | None,
|
|
33
|
+
Field(
|
|
34
|
+
description="Token from si_get_offering response for session continuity. Brand uses this to recall what products were shown to the user, enabling natural references like 'the second one' or 'that blue shoe'."
|
|
35
|
+
),
|
|
36
|
+
] = None
|
|
37
|
+
placement: Annotated[
|
|
38
|
+
str | None,
|
|
39
|
+
Field(
|
|
40
|
+
description="Where this session was triggered (e.g., 'chatgpt_search', 'claude_chat')"
|
|
41
|
+
),
|
|
42
|
+
] = None
|
|
43
|
+
supported_capabilities: Annotated[
|
|
44
|
+
si_capabilities.SiCapabilities | None,
|
|
45
|
+
Field(description='What capabilities the host supports'),
|
|
46
|
+
] = None
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_initiate_session_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from ..core import error
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
from . import si_capabilities, si_ui_element
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Response(AdCPBaseModel):
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
extra='allow',
|
|
20
|
+
)
|
|
21
|
+
message: Annotated[str | None, Field(description='Conversational message from brand agent')] = (
|
|
22
|
+
None
|
|
23
|
+
)
|
|
24
|
+
ui_elements: Annotated[
|
|
25
|
+
list[si_ui_element.SiUiElement] | None, Field(description='Visual components to render')
|
|
26
|
+
] = None
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SiInitiateSessionResponse(AdCPBaseModel):
|
|
30
|
+
model_config = ConfigDict(
|
|
31
|
+
extra='allow',
|
|
32
|
+
)
|
|
33
|
+
errors: Annotated[
|
|
34
|
+
list[error.Error] | None, Field(description='Errors during session initiation')
|
|
35
|
+
] = None
|
|
36
|
+
ext: ext_1.ExtensionObject | None = None
|
|
37
|
+
negotiated_capabilities: Annotated[
|
|
38
|
+
si_capabilities.SiCapabilities | None,
|
|
39
|
+
Field(description='Intersection of brand and host capabilities for this session'),
|
|
40
|
+
] = None
|
|
41
|
+
response: Annotated[Response | None, Field(description="Brand agent's initial response")] = None
|
|
42
|
+
session_id: Annotated[
|
|
43
|
+
str, Field(description='Unique session identifier for subsequent messages')
|
|
44
|
+
]
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_send_message_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Annotated, Any
|
|
8
|
+
|
|
9
|
+
from adcp.types.base import AdCPBaseModel
|
|
10
|
+
from pydantic import ConfigDict, Field, RootModel
|
|
11
|
+
|
|
12
|
+
from ..core import ext as ext_1
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ActionResponse(AdCPBaseModel):
|
|
16
|
+
model_config = ConfigDict(
|
|
17
|
+
extra='allow',
|
|
18
|
+
)
|
|
19
|
+
action: Annotated[str | None, Field(description='The action that was triggered')] = None
|
|
20
|
+
payload: Annotated[
|
|
21
|
+
dict[str, Any] | None, Field(description='Action-specific response data')
|
|
22
|
+
] = None
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class SiSendMessageRequest1(AdCPBaseModel):
|
|
26
|
+
model_config = ConfigDict(
|
|
27
|
+
extra='allow',
|
|
28
|
+
)
|
|
29
|
+
action_response: Annotated[
|
|
30
|
+
ActionResponse | None,
|
|
31
|
+
Field(description='Response to a previous action_button (e.g., user clicked checkout)'),
|
|
32
|
+
] = None
|
|
33
|
+
ext: ext_1.ExtensionObject | None = None
|
|
34
|
+
message: Annotated[str, Field(description="User's message to the brand agent")]
|
|
35
|
+
session_id: Annotated[str, Field(description='Active session identifier')]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class SiSendMessageRequest2(AdCPBaseModel):
|
|
39
|
+
model_config = ConfigDict(
|
|
40
|
+
extra='allow',
|
|
41
|
+
)
|
|
42
|
+
action_response: Annotated[
|
|
43
|
+
ActionResponse,
|
|
44
|
+
Field(description='Response to a previous action_button (e.g., user clicked checkout)'),
|
|
45
|
+
]
|
|
46
|
+
ext: ext_1.ExtensionObject | None = None
|
|
47
|
+
message: Annotated[str | None, Field(description="User's message to the brand agent")] = None
|
|
48
|
+
session_id: Annotated[str, Field(description='Active session identifier')]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class SiSendMessageRequest(RootModel[SiSendMessageRequest1 | SiSendMessageRequest2]):
|
|
52
|
+
root: Annotated[
|
|
53
|
+
SiSendMessageRequest1 | SiSendMessageRequest2,
|
|
54
|
+
Field(
|
|
55
|
+
description='Send a message to the brand agent within an active session',
|
|
56
|
+
title='SI Send Message Request',
|
|
57
|
+
),
|
|
58
|
+
]
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_send_message_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
from . import si_ui_element
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ContextForCheckout(AdCPBaseModel):
|
|
19
|
+
model_config = ConfigDict(
|
|
20
|
+
extra='allow',
|
|
21
|
+
)
|
|
22
|
+
applied_offers: Annotated[
|
|
23
|
+
list[str] | None, Field(description='Offer IDs that were applied during the conversation')
|
|
24
|
+
] = None
|
|
25
|
+
conversation_summary: Annotated[
|
|
26
|
+
str | None, Field(description='Summary of the conversation leading to purchase')
|
|
27
|
+
] = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Price(AdCPBaseModel):
|
|
31
|
+
amount: float | None = None
|
|
32
|
+
currency: str | None = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Intent(AdCPBaseModel):
|
|
36
|
+
model_config = ConfigDict(
|
|
37
|
+
extra='allow',
|
|
38
|
+
)
|
|
39
|
+
action: Annotated[str | None, Field(description="The commerce action (e.g., 'purchase')")] = (
|
|
40
|
+
None
|
|
41
|
+
)
|
|
42
|
+
price: Annotated[Price | None, Field(description='Price information')] = None
|
|
43
|
+
product: Annotated[dict[str, Any] | None, Field(description='Product details for checkout')] = (
|
|
44
|
+
None
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class Type(Enum):
|
|
49
|
+
transaction = 'transaction'
|
|
50
|
+
complete = 'complete'
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class Handoff(AdCPBaseModel):
|
|
54
|
+
model_config = ConfigDict(
|
|
55
|
+
extra='allow',
|
|
56
|
+
)
|
|
57
|
+
context_for_checkout: Annotated[
|
|
58
|
+
ContextForCheckout | None, Field(description='Context to pass to ACP for seamless checkout')
|
|
59
|
+
] = None
|
|
60
|
+
intent: Annotated[
|
|
61
|
+
Intent | None,
|
|
62
|
+
Field(description='For transaction handoffs: what the user wants to purchase'),
|
|
63
|
+
] = None
|
|
64
|
+
type: Annotated[
|
|
65
|
+
Type | None,
|
|
66
|
+
Field(
|
|
67
|
+
description='Type of handoff: transaction (ready for ACP checkout) or complete (conversation done)'
|
|
68
|
+
),
|
|
69
|
+
] = None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class SessionStatus(Enum):
|
|
73
|
+
active = 'active'
|
|
74
|
+
pending_handoff = 'pending_handoff'
|
|
75
|
+
complete = 'complete'
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class Response(AdCPBaseModel):
|
|
79
|
+
model_config = ConfigDict(
|
|
80
|
+
extra='allow',
|
|
81
|
+
)
|
|
82
|
+
message: Annotated[str | None, Field(description='Conversational message from brand agent')] = (
|
|
83
|
+
None
|
|
84
|
+
)
|
|
85
|
+
ui_elements: Annotated[
|
|
86
|
+
list[si_ui_element.SiUiElement] | None, Field(description='Visual components to render')
|
|
87
|
+
] = None
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class SiSendMessageResponse(AdCPBaseModel):
|
|
91
|
+
model_config = ConfigDict(
|
|
92
|
+
extra='allow',
|
|
93
|
+
)
|
|
94
|
+
errors: list[error.Error] | None = None
|
|
95
|
+
ext: ext_1.ExtensionObject | None = None
|
|
96
|
+
handoff: Annotated[
|
|
97
|
+
Handoff | None, Field(description='Handoff request when session_status is pending_handoff')
|
|
98
|
+
] = None
|
|
99
|
+
response: Annotated[Response | None, Field(description="Brand agent's response")] = None
|
|
100
|
+
session_id: Annotated[str, Field(description='Session identifier')]
|
|
101
|
+
session_status: Annotated[SessionStatus, Field(description='Current session status')]
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_terminate_session_request.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import ext as ext_1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Reason(Enum):
|
|
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
|
+
|
|
23
|
+
|
|
24
|
+
class Action(Enum):
|
|
25
|
+
purchase = 'purchase'
|
|
26
|
+
subscribe = 'subscribe'
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class TransactionIntent(AdCPBaseModel):
|
|
30
|
+
model_config = ConfigDict(
|
|
31
|
+
extra='allow',
|
|
32
|
+
)
|
|
33
|
+
action: Action | None = None
|
|
34
|
+
product: Annotated[dict[str, Any] | None, Field(description='Product/service details')] = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class TerminationContext(AdCPBaseModel):
|
|
38
|
+
model_config = ConfigDict(
|
|
39
|
+
extra='allow',
|
|
40
|
+
)
|
|
41
|
+
cause: Annotated[
|
|
42
|
+
str | None, Field(description='For host_terminated - why host ended session')
|
|
43
|
+
] = None
|
|
44
|
+
summary: Annotated[str | None, Field(description='Summary of the conversation')] = None
|
|
45
|
+
transaction_intent: Annotated[
|
|
46
|
+
TransactionIntent | None,
|
|
47
|
+
Field(description='For handoff_transaction - what user wants to buy'),
|
|
48
|
+
] = None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class SiTerminateSessionRequest(AdCPBaseModel):
|
|
52
|
+
model_config = ConfigDict(
|
|
53
|
+
extra='allow',
|
|
54
|
+
)
|
|
55
|
+
ext: ext_1.ExtensionObject | None = None
|
|
56
|
+
reason: Annotated[Reason, Field(description='Reason for termination')]
|
|
57
|
+
session_id: Annotated[str, Field(description='Session identifier to terminate')]
|
|
58
|
+
termination_context: Annotated[
|
|
59
|
+
TerminationContext | None, Field(description='Context for the termination')
|
|
60
|
+
] = None
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: sponsored_intelligence/si_terminate_session_response.json
|
|
3
|
+
# timestamp: 2026-01-25T21:17:54+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Annotated, Any
|
|
9
|
+
|
|
10
|
+
from adcp.types.base import AdCPBaseModel
|
|
11
|
+
from pydantic import AnyUrl, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from ..core import error
|
|
14
|
+
from ..core import ext as ext_1
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class AcpHandoff(AdCPBaseModel):
|
|
18
|
+
model_config = ConfigDict(
|
|
19
|
+
extra='allow',
|
|
20
|
+
)
|
|
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
|
+
None
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Action(Enum):
|
|
29
|
+
save_for_later = 'save_for_later'
|
|
30
|
+
set_reminder = 'set_reminder'
|
|
31
|
+
subscribe_updates = 'subscribe_updates'
|
|
32
|
+
none = 'none'
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class FollowUp(AdCPBaseModel):
|
|
36
|
+
model_config = ConfigDict(
|
|
37
|
+
extra='allow',
|
|
38
|
+
)
|
|
39
|
+
action: Action | None = None
|
|
40
|
+
data: Annotated[dict[str, Any] | None, Field(description='Data for follow-up action')] = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class SiTerminateSessionResponse(AdCPBaseModel):
|
|
44
|
+
model_config = ConfigDict(
|
|
45
|
+
extra='allow',
|
|
46
|
+
)
|
|
47
|
+
acp_handoff: Annotated[
|
|
48
|
+
AcpHandoff | None, Field(description='ACP checkout handoff data (for handoff_transaction)')
|
|
49
|
+
] = None
|
|
50
|
+
errors: list[error.Error] | None = None
|
|
51
|
+
ext: ext_1.ExtensionObject | None = None
|
|
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')]
|