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.
Files changed (242) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +5 -5
  3. adcp/__main__.py +4 -4
  4. adcp/adagents.py +5 -9
  5. adcp/client.py +14 -12
  6. adcp/protocols/a2a.py +3 -3
  7. adcp/protocols/base.py +2 -2
  8. adcp/protocols/mcp.py +3 -3
  9. adcp/server/base.py +6 -10
  10. adcp/server/content_standards.py +17 -49
  11. adcp/server/governance.py +20 -59
  12. adcp/server/mcp_tools.py +8 -4
  13. adcp/server/proposal.py +1 -3
  14. adcp/server/sponsored_intelligence.py +10 -28
  15. adcp/simple.py +10 -10
  16. adcp/types/__init__.py +10 -6
  17. adcp/types/_generated.py +44 -27
  18. adcp/types/base.py +7 -7
  19. adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
  20. adcp/types/generated_poc/a2ui/component.py +24 -0
  21. adcp/types/generated_poc/a2ui/surface.py +33 -0
  22. adcp/types/generated_poc/account/__init__.py +3 -0
  23. adcp/types/generated_poc/account/list_accounts_request.py +30 -0
  24. adcp/types/generated_poc/account/list_accounts_response.py +30 -0
  25. adcp/types/generated_poc/adagents.py +192 -195
  26. adcp/types/generated_poc/content_standards/artifact.py +69 -69
  27. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
  28. adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
  29. adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
  30. adcp/types/generated_poc/content_standards/content_standards.py +8 -8
  31. adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
  32. adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
  33. adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
  34. adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
  35. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
  36. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
  37. adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
  38. adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
  39. adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
  40. adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
  41. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
  42. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
  43. adcp/types/generated_poc/core/account.py +54 -0
  44. adcp/types/generated_poc/core/activation_key.py +8 -8
  45. adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
  46. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  47. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  48. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  49. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  50. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  51. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  52. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  53. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  54. adcp/types/generated_poc/core/assets/video_asset.py +126 -10
  55. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  56. adcp/types/generated_poc/core/async_response_data.py +2 -2
  57. adcp/types/generated_poc/core/brand_manifest.py +66 -66
  58. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  59. adcp/types/generated_poc/core/context.py +1 -1
  60. adcp/types/generated_poc/core/creative_asset.py +12 -12
  61. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  62. adcp/types/generated_poc/core/creative_filters.py +23 -17
  63. adcp/types/generated_poc/core/creative_manifest.py +4 -4
  64. adcp/types/generated_poc/core/creative_policy.py +4 -4
  65. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  66. adcp/types/generated_poc/core/deployment.py +20 -20
  67. adcp/types/generated_poc/core/destination.py +11 -11
  68. adcp/types/generated_poc/core/error.py +6 -6
  69. adcp/types/generated_poc/core/ext.py +1 -1
  70. adcp/types/generated_poc/core/format.py +49 -124
  71. adcp/types/generated_poc/core/format_id.py +5 -5
  72. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  73. adcp/types/generated_poc/core/identifier.py +2 -2
  74. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  75. adcp/types/generated_poc/core/measurement.py +8 -8
  76. adcp/types/generated_poc/core/media_buy.py +12 -8
  77. adcp/types/generated_poc/core/media_buy_features.py +3 -3
  78. adcp/types/generated_poc/core/offering.py +9 -9
  79. adcp/types/generated_poc/core/package.py +8 -8
  80. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  81. adcp/types/generated_poc/core/placement.py +4 -4
  82. adcp/types/generated_poc/core/pricing_option.py +1 -1
  83. adcp/types/generated_poc/core/product.py +27 -21
  84. adcp/types/generated_poc/core/product_allocation.py +5 -5
  85. adcp/types/generated_poc/core/product_filters.py +27 -27
  86. adcp/types/generated_poc/core/promoted_offerings.py +18 -18
  87. adcp/types/generated_poc/core/promoted_products.py +2 -2
  88. adcp/types/generated_poc/core/property.py +10 -10
  89. adcp/types/generated_poc/core/property_id.py +4 -4
  90. adcp/types/generated_poc/core/property_list_ref.py +4 -4
  91. adcp/types/generated_poc/core/property_tag.py +4 -4
  92. adcp/types/generated_poc/core/proposal.py +13 -13
  93. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  94. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  95. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  96. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  97. adcp/types/generated_poc/core/reporting_webhook.py +10 -10
  98. adcp/types/generated_poc/core/response.py +4 -4
  99. adcp/types/generated_poc/core/signal_filters.py +5 -5
  100. adcp/types/generated_poc/core/start_timing.py +3 -3
  101. adcp/types/generated_poc/core/sub_asset.py +14 -14
  102. adcp/types/generated_poc/core/targeting.py +17 -10
  103. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  104. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  105. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  106. adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
  107. adcp/types/generated_poc/creative/preview_render.py +25 -25
  108. adcp/types/generated_poc/enums/adcp_domain.py +4 -4
  109. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  110. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  111. adcp/types/generated_poc/enums/available_metric.py +9 -9
  112. adcp/types/generated_poc/enums/channels.py +19 -19
  113. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  114. adcp/types/generated_poc/enums/creative_action.py +5 -5
  115. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  116. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  117. adcp/types/generated_poc/enums/creative_status.py +5 -5
  118. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  119. adcp/types/generated_poc/enums/daast_version.py +2 -2
  120. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  121. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  122. adcp/types/generated_poc/enums/feed_format.py +3 -3
  123. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  124. adcp/types/generated_poc/enums/format_category.py +7 -7
  125. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  126. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  127. adcp/types/generated_poc/enums/geo_level.py +4 -4
  128. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  129. adcp/types/generated_poc/enums/http_method.py +2 -2
  130. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  131. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  132. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  133. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  134. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  135. adcp/types/generated_poc/enums/metric_type.py +8 -8
  136. adcp/types/generated_poc/enums/metro_system.py +5 -5
  137. adcp/types/generated_poc/enums/notification_type.py +4 -4
  138. adcp/types/generated_poc/enums/pacing.py +3 -3
  139. adcp/types/generated_poc/enums/postal_system.py +9 -9
  140. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  141. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  142. adcp/types/generated_poc/enums/property_type.py +8 -8
  143. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  144. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  145. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  146. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  147. adcp/types/generated_poc/enums/task_status.py +9 -9
  148. adcp/types/generated_poc/enums/task_type.py +11 -12
  149. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  150. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  151. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  152. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  153. adcp/types/generated_poc/enums/vast_version.py +5 -5
  154. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  155. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  156. adcp/types/generated_poc/extensions/extension_meta.py +14 -14
  157. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  158. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  159. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  160. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  161. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  162. adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
  163. adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
  164. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  165. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  166. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  167. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  168. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  169. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  170. adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
  171. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  172. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  173. adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
  174. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
  175. adcp/types/generated_poc/media_buy/package_request.py +8 -8
  176. adcp/types/generated_poc/media_buy/package_update.py +16 -16
  177. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  178. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  181. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  182. adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
  183. adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  186. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  187. adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
  188. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  189. adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
  190. adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
  191. adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
  192. adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
  193. adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
  194. adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
  195. adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
  196. adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
  197. adcp/types/generated_poc/property/base_property_source.py +15 -15
  198. adcp/types/generated_poc/property/create_property_list_request.py +4 -4
  199. adcp/types/generated_poc/property/create_property_list_response.py +3 -3
  200. adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
  201. adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
  202. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  203. adcp/types/generated_poc/property/get_property_list_request.py +5 -5
  204. adcp/types/generated_poc/property/get_property_list_response.py +11 -11
  205. adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
  206. adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
  207. adcp/types/generated_poc/property/property_error.py +10 -10
  208. adcp/types/generated_poc/property/property_feature.py +4 -4
  209. adcp/types/generated_poc/property/property_feature_definition.py +18 -18
  210. adcp/types/generated_poc/property/property_list.py +11 -11
  211. adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
  212. adcp/types/generated_poc/property/property_list_filters.py +7 -7
  213. adcp/types/generated_poc/property/update_property_list_request.py +8 -8
  214. adcp/types/generated_poc/property/update_property_list_response.py +2 -2
  215. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
  217. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  218. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  219. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  220. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  221. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
  222. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
  224. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
  225. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
  227. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
  229. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
  231. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
  232. adcp/utils/format_assets.py +32 -32
  233. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
  234. adcp-3.2.0.dist-info/RECORD +268 -0
  235. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
  236. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
  237. adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
  238. adcp-3.1.0.dist-info/RECORD +0 -264
  239. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
  240. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
  241. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
  242. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: protocol/get_adcp_capabilities_response.json
3
- # timestamp: 2026-01-25T21:17:54+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -26,7 +26,7 @@ class Adcp(AdCPBaseModel):
26
26
  major_versions: Annotated[
27
27
  list[MajorVersion],
28
28
  Field(
29
- description='AdCP major versions supported by this seller. Major versions indicate breaking changes.',
29
+ description="AdCP major versions supported by this seller. Major versions indicate breaking changes.",
30
30
  min_length=1,
31
31
  ),
32
32
  ]
@@ -37,28 +37,28 @@ class ExtensionsSupportedItem(RootModel[str]):
37
37
  str,
38
38
  Field(
39
39
  description="Extension namespace (lowercase alphanumeric with underscores, e.g., 'scope3', 'garm', 'iab_tcf')",
40
- pattern='^[a-z][a-z0-9_]*$',
40
+ pattern="^[a-z][a-z0-9_]*$",
41
41
  ),
42
42
  ]
43
43
 
44
44
 
45
45
  class Range(AdCPBaseModel):
46
- max: Annotated[float, Field(description='Maximum value')]
47
- min: Annotated[float, Field(description='Minimum value')]
46
+ max: Annotated[float, Field(description="Maximum value")]
47
+ min: Annotated[float, Field(description="Minimum value")]
48
48
 
49
49
 
50
50
  class Type(Enum):
51
- binary = 'binary'
52
- quantitative = 'quantitative'
53
- categorical = 'categorical'
51
+ binary = "binary"
52
+ quantitative = "quantitative"
53
+ categorical = "categorical"
54
54
 
55
55
 
56
56
  class PropertyFeature(AdCPBaseModel):
57
57
  categories: Annotated[
58
- list[str] | None, Field(description='For categorical features, the valid values')
58
+ list[str] | None, Field(description="For categorical features, the valid values")
59
59
  ] = None
60
60
  description: Annotated[
61
- str | None, Field(description='Human-readable description of what this feature measures')
61
+ str | None, Field(description="Human-readable description of what this feature measures")
62
62
  ] = None
63
63
  feature_id: Annotated[
64
64
  str,
@@ -69,11 +69,11 @@ class PropertyFeature(AdCPBaseModel):
69
69
  methodology_url: Annotated[
70
70
  AnyUrl | None,
71
71
  Field(
72
- description='URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors.'
72
+ description="URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors."
73
73
  ),
74
74
  ] = None
75
75
  range: Annotated[
76
- Range | None, Field(description='For quantitative features, the valid range')
76
+ Range | None, Field(description="For quantitative features, the valid range")
77
77
  ] = None
78
78
  type: Annotated[
79
79
  Type,
@@ -87,13 +87,13 @@ class Governance(AdCPBaseModel):
87
87
  property_features: Annotated[
88
88
  list[PropertyFeature] | None,
89
89
  Field(
90
- description='Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties.'
90
+ description="Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties."
91
91
  ),
92
92
  ] = None
93
93
 
94
94
 
95
95
  class MraidVersion(RootModel[str]):
96
- root: Annotated[str, Field(pattern='^[0-9]+\\.[0-9]+$')]
96
+ root: Annotated[str, Field(pattern="^[0-9]+\\.[0-9]+$")]
97
97
 
98
98
 
99
99
  class VastVersion(MraidVersion):
@@ -103,29 +103,29 @@ class VastVersion(MraidVersion):
103
103
  class CreativeSpecs(AdCPBaseModel):
104
104
  mraid_versions: Annotated[
105
105
  list[MraidVersion] | None,
106
- Field(description='MRAID versions supported for rich media mobile creatives'),
106
+ Field(description="MRAID versions supported for rich media mobile creatives"),
107
107
  ] = None
108
- simid: Annotated[bool | None, Field(description='SIMID support for interactive video ads')] = (
108
+ simid: Annotated[bool | None, Field(description="SIMID support for interactive video ads")] = (
109
109
  None
110
110
  )
111
111
  vast_versions: Annotated[
112
- list[VastVersion] | None, Field(description='VAST versions supported for video creatives')
112
+ list[VastVersion] | None, Field(description="VAST versions supported for video creatives")
113
113
  ] = None
114
- vpaid: Annotated[bool | None, Field(description='VPAID support for interactive video ads')] = (
114
+ vpaid: Annotated[bool | None, Field(description="VPAID support for interactive video ads")] = (
115
115
  None
116
116
  )
117
117
 
118
118
 
119
119
  class GeoMetros(AdCPBaseModel):
120
120
  eurostat_nuts2: Annotated[
121
- bool | None, Field(description='Supports Eurostat NUTS Level 2 regions (EU)')
121
+ bool | None, Field(description="Supports Eurostat NUTS Level 2 regions (EU)")
122
122
  ] = None
123
123
  nielsen_dma: Annotated[
124
124
  bool | None,
125
125
  Field(description="Supports Nielsen DMA codes (US market, e.g., '501' for NYC)"),
126
126
  ] = None
127
- uk_itl1: Annotated[bool | None, Field(description='Supports UK ITL Level 1 regions')] = None
128
- uk_itl2: Annotated[bool | None, Field(description='Supports UK ITL Level 2 regions')] = None
127
+ uk_itl1: Annotated[bool | None, Field(description="Supports UK ITL Level 1 regions")] = None
128
+ uk_itl2: Annotated[bool | None, Field(description="Supports UK ITL Level 2 regions")] = None
129
129
 
130
130
 
131
131
  class GeoPostalAreas(AdCPBaseModel):
@@ -164,13 +164,13 @@ class Targeting(AdCPBaseModel):
164
164
  geo_metros: Annotated[
165
165
  GeoMetros | None,
166
166
  Field(
167
- description='Metro area targeting support. Specifies which classification systems are supported.'
167
+ description="Metro area targeting support. Specifies which classification systems are supported."
168
168
  ),
169
169
  ] = None
170
170
  geo_postal_areas: Annotated[
171
171
  GeoPostalAreas | None,
172
172
  Field(
173
- description='Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision.'
173
+ description="Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision."
174
174
  ),
175
175
  ] = None
176
176
  geo_regions: Annotated[
@@ -185,27 +185,27 @@ class Execution(AdCPBaseModel):
185
185
  axe_integrations: Annotated[
186
186
  list[AnyUrl] | None,
187
187
  Field(
188
- description='Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through.'
188
+ description="Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through."
189
189
  ),
190
190
  ] = None
191
191
  creative_specs: Annotated[
192
- CreativeSpecs | None, Field(description='Creative specification support')
192
+ CreativeSpecs | None, Field(description="Creative specification support")
193
193
  ] = None
194
194
  targeting: Annotated[
195
195
  Targeting | None,
196
196
  Field(
197
- description='Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them.'
197
+ description="Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them."
198
198
  ),
199
199
  ] = None
200
200
 
201
201
 
202
202
  class PrimaryCountry(RootModel[str]):
203
- root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
203
+ root: Annotated[str, Field(pattern="^[A-Z]{2}$")]
204
204
 
205
205
 
206
206
  class PublisherDomain(RootModel[str]):
207
207
  root: Annotated[
208
- str, Field(pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$')
208
+ str, Field(pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$")
209
209
  ]
210
210
 
211
211
 
@@ -213,23 +213,23 @@ class Portfolio(AdCPBaseModel):
213
213
  advertising_policies: Annotated[
214
214
  str | None,
215
215
  Field(
216
- description='Advertising content policies, restrictions, and guidelines',
216
+ description="Advertising content policies, restrictions, and guidelines",
217
217
  max_length=10000,
218
218
  ),
219
219
  ] = None
220
220
  description: Annotated[
221
221
  str | None,
222
222
  Field(
223
- description='Markdown-formatted description of the inventory portfolio', max_length=5000
223
+ description="Markdown-formatted description of the inventory portfolio", max_length=5000
224
224
  ),
225
225
  ] = None
226
226
  primary_channels: Annotated[
227
227
  list[channels.MediaChannel] | None,
228
- Field(description='Primary advertising channels in this portfolio'),
228
+ Field(description="Primary advertising channels in this portfolio"),
229
229
  ] = None
230
230
  primary_countries: Annotated[
231
231
  list[PrimaryCountry] | None,
232
- Field(description='Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated'),
232
+ Field(description="Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated"),
233
233
  ] = None
234
234
  publisher_domains: Annotated[
235
235
  list[PublisherDomain],
@@ -242,46 +242,47 @@ class Portfolio(AdCPBaseModel):
242
242
 
243
243
  class Signals(AdCPBaseModel):
244
244
  features: Annotated[
245
- dict[str, bool] | None, Field(description='Optional signals features supported')
245
+ dict[str, bool] | None, Field(description="Optional signals features supported")
246
246
  ] = None
247
247
 
248
248
 
249
249
  class Preferred(Enum):
250
- mcp = 'mcp'
251
- a2a = 'a2a'
250
+ mcp = "mcp"
251
+ a2a = "a2a"
252
252
 
253
253
 
254
254
  class Transport(AdCPBaseModel):
255
255
  model_config = ConfigDict(
256
- extra='allow',
256
+ extra="allow",
257
257
  )
258
- type: Annotated[Preferred, Field(description='Protocol transport type')]
259
- url: Annotated[AnyUrl, Field(description='Agent endpoint URL for this transport')]
258
+ type: Annotated[Preferred, Field(description="Protocol transport type")]
259
+ url: Annotated[AnyUrl, Field(description="Agent endpoint URL for this transport")]
260
260
 
261
261
 
262
262
  class Endpoint(AdCPBaseModel):
263
263
  preferred: Annotated[
264
- Preferred | None, Field(description='Preferred transport when host supports multiple')
264
+ Preferred | None, Field(description="Preferred transport when host supports multiple")
265
265
  ] = None
266
266
  transports: Annotated[
267
267
  list[Transport],
268
268
  Field(
269
- description='Available protocol transports. Hosts select based on their capabilities.',
269
+ description="Available protocol transports. Hosts select based on their capabilities.",
270
270
  min_length=1,
271
271
  ),
272
272
  ]
273
273
 
274
274
 
275
275
  class SupportedProtocol(Enum):
276
- media_buy = 'media_buy'
277
- signals = 'signals'
278
- governance = 'governance'
279
- sponsored_intelligence = 'sponsored_intelligence'
276
+ media_buy = "media_buy"
277
+ signals = "signals"
278
+ governance = "governance"
279
+ sponsored_intelligence = "sponsored_intelligence"
280
+ creative = "creative"
280
281
 
281
282
 
282
283
  class MediaBuy(AdCPBaseModel):
283
284
  execution: Annotated[
284
- Execution | None, Field(description='Technical execution capabilities for media buying')
285
+ Execution | None, Field(description="Technical execution capabilities for media buying")
285
286
  ] = None
286
287
  features: media_buy_features.MediaBuyFeatures | None = None
287
288
  portfolio: Annotated[
@@ -292,62 +293,62 @@ class MediaBuy(AdCPBaseModel):
292
293
 
293
294
  class SponsoredIntelligence(AdCPBaseModel):
294
295
  brand_manifest_url: Annotated[
295
- AnyUrl | None, Field(description='URL to brand manifest with colors, fonts, logos, tone')
296
+ AnyUrl | None, Field(description="URL to brand manifest with colors, fonts, logos, tone")
296
297
  ] = None
297
298
  capabilities: Annotated[
298
299
  si_capabilities.SiCapabilities,
299
- Field(description='Modalities, components, and commerce capabilities'),
300
+ Field(description="Modalities, components, and commerce capabilities"),
300
301
  ]
301
- endpoint: Annotated[Endpoint, Field(description='SI agent endpoint configuration')]
302
+ endpoint: Annotated[Endpoint, Field(description="SI agent endpoint configuration")]
302
303
 
303
304
 
304
305
  class GetAdcpCapabilitiesResponse(AdCPBaseModel):
305
306
  model_config = ConfigDict(
306
- extra='allow',
307
+ extra="allow",
307
308
  )
308
- adcp: Annotated[Adcp, Field(description='Core AdCP protocol information')]
309
+ adcp: Annotated[Adcp, Field(description="Core AdCP protocol information")]
309
310
  context: context_1.ContextObject | None = None
310
311
  errors: Annotated[
311
- list[error.Error] | None, Field(description='Task-specific errors and warnings')
312
+ list[error.Error] | None, Field(description="Task-specific errors and warnings")
312
313
  ] = None
313
314
  ext: ext_1.ExtensionObject | None = None
314
315
  extensions_supported: Annotated[
315
316
  list[ExtensionsSupportedItem] | None,
316
317
  Field(
317
- description='Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry.'
318
+ description="Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry."
318
319
  ),
319
320
  ] = None
320
321
  governance: Annotated[
321
322
  Governance | None,
322
323
  Field(
323
- description='Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property data like compliance scores, brand safety ratings, and sustainability metrics.'
324
+ description="Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property data like compliance scores, brand safety ratings, and sustainability metrics."
324
325
  ),
325
326
  ] = None
326
327
  last_updated: Annotated[
327
328
  AwareDatetime | None,
328
329
  Field(
329
- description='ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation.'
330
+ description="ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation."
330
331
  ),
331
332
  ] = None
332
333
  media_buy: Annotated[
333
334
  MediaBuy | None,
334
335
  Field(
335
- description='Media-buy protocol capabilities. Only present if media_buy is in supported_protocols.'
336
+ description="Media-buy protocol capabilities. Only present if media_buy is in supported_protocols."
336
337
  ),
337
338
  ] = None
338
339
  signals: Annotated[
339
340
  Signals | None,
340
341
  Field(
341
- description='Signals protocol capabilities. Only present if signals is in supported_protocols. Reserved for future use.'
342
+ description="Signals protocol capabilities. Only present if signals is in supported_protocols. Reserved for future use."
342
343
  ),
343
344
  ] = None
344
345
  sponsored_intelligence: Annotated[
345
346
  SponsoredIntelligence | None,
346
347
  Field(
347
- description='Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences.'
348
+ description="Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences."
348
349
  ),
349
350
  ] = None
350
351
  supported_protocols: Annotated[
351
352
  list[SupportedProtocol],
352
- Field(description='Which AdCP domain protocols this seller supports', min_length=1),
353
+ Field(description="Which AdCP domain protocols this seller supports", min_length=1),
353
354
  ]
@@ -16,17 +16,17 @@ from ..core import ext as ext_1
16
16
 
17
17
  class ActivateSignalRequest(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='allow',
19
+ extra="allow",
20
20
  )
21
21
  context: context_1.ContextObject | None = None
22
22
  deployments: Annotated[
23
23
  list[destination.Destination],
24
24
  Field(
25
- description='Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.',
25
+ description="Target deployment(s) for activation. If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.",
26
26
  min_length=1,
27
27
  ),
28
28
  ]
29
29
  ext: ext_1.ExtensionObject | None = None
30
30
  signal_agent_segment_id: Annotated[
31
- str, Field(description='The universal identifier for the signal to activate')
31
+ str, Field(description="The universal identifier for the signal to activate")
32
32
  ]
@@ -16,25 +16,25 @@ from ..core import ext as ext_1
16
16
 
17
17
  class ActivateSignalResponse1(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='allow',
19
+ extra="allow",
20
20
  )
21
21
  context: context_1.ContextObject | None = None
22
22
  deployments: Annotated[
23
23
  list[deployment.Deployment],
24
- Field(description='Array of deployment results for each deployment target'),
24
+ Field(description="Array of deployment results for each deployment target"),
25
25
  ]
26
26
  ext: ext_1.ExtensionObject | None = None
27
27
 
28
28
 
29
29
  class ActivateSignalResponse2(AdCPBaseModel):
30
30
  model_config = ConfigDict(
31
- extra='allow',
31
+ extra="allow",
32
32
  )
33
33
  context: context_1.ContextObject | None = None
34
34
  errors: Annotated[
35
35
  list[error.Error],
36
36
  Field(
37
- description='Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)',
37
+ description="Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)",
38
38
  min_length=1,
39
39
  ),
40
40
  ]
@@ -45,7 +45,7 @@ class ActivateSignalResponse(RootModel[ActivateSignalResponse1 | ActivateSignalR
45
45
  root: Annotated[
46
46
  ActivateSignalResponse1 | ActivateSignalResponse2,
47
47
  Field(
48
- description='Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.',
49
- title='Activate Signal Response',
48
+ description="Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.",
49
+ title="Activate Signal Response",
50
50
  ),
51
51
  ]
@@ -16,20 +16,20 @@ from ..core import signal_filters
16
16
 
17
17
 
18
18
  class Country(RootModel[str]):
19
- root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
19
+ root: Annotated[str, Field(pattern="^[A-Z]{2}$")]
20
20
 
21
21
 
22
22
  class DeliverTo(AdCPBaseModel):
23
23
  model_config = ConfigDict(
24
- extra='allow',
24
+ extra="allow",
25
25
  )
26
26
  countries: Annotated[
27
- list[Country], Field(description='Countries where signals will be used (ISO codes)')
27
+ list[Country], Field(description="Countries where signals will be used (ISO codes)")
28
28
  ]
29
29
  deployments: Annotated[
30
30
  list[destination.Destination],
31
31
  Field(
32
- description='List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.',
32
+ description="List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.",
33
33
  min_length=1,
34
34
  ),
35
35
  ]
@@ -37,17 +37,17 @@ class DeliverTo(AdCPBaseModel):
37
37
 
38
38
  class GetSignalsRequest(AdCPBaseModel):
39
39
  model_config = ConfigDict(
40
- extra='allow',
40
+ extra="allow",
41
41
  )
42
42
  context: context_1.ContextObject | None = None
43
43
  deliver_to: Annotated[
44
- DeliverTo, Field(description='Deployment targets where signals need to be activated')
44
+ DeliverTo, Field(description="Deployment targets where signals need to be activated")
45
45
  ]
46
46
  ext: ext_1.ExtensionObject | None = None
47
47
  filters: signal_filters.SignalFilters | None = None
48
48
  max_results: Annotated[
49
- int | None, Field(description='Maximum number of results to return', ge=1)
49
+ int | None, Field(description="Maximum number of results to return", ge=1)
50
50
  ] = None
51
51
  signal_spec: Annotated[
52
- str, Field(description='Natural language description of the desired signals')
52
+ str, Field(description="Natural language description of the desired signals")
53
53
  ]
@@ -17,42 +17,42 @@ from ..enums import signal_catalog_type
17
17
 
18
18
  class Pricing(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='allow',
20
+ extra="allow",
21
21
  )
22
- cpm: Annotated[float, Field(description='Cost per thousand impressions', ge=0.0)]
23
- currency: Annotated[str, Field(description='Currency code', pattern='^[A-Z]{3}$')]
22
+ cpm: Annotated[float, Field(description="Cost per thousand impressions", ge=0.0)]
23
+ currency: Annotated[str, Field(description="Currency code", pattern="^[A-Z]{3}$")]
24
24
 
25
25
 
26
26
  class Signal(AdCPBaseModel):
27
27
  model_config = ConfigDict(
28
- extra='allow',
28
+ extra="allow",
29
29
  )
30
30
  coverage_percentage: Annotated[
31
- float, Field(description='Percentage of audience coverage', ge=0.0, le=100.0)
31
+ float, Field(description="Percentage of audience coverage", ge=0.0, le=100.0)
32
32
  ]
33
- data_provider: Annotated[str, Field(description='Name of the data provider')]
33
+ data_provider: Annotated[str, Field(description="Name of the data provider")]
34
34
  deployments: Annotated[
35
- list[deployment.Deployment], Field(description='Array of deployment targets')
35
+ list[deployment.Deployment], Field(description="Array of deployment targets")
36
36
  ]
37
- description: Annotated[str, Field(description='Detailed signal description')]
38
- name: Annotated[str, Field(description='Human-readable signal name')]
39
- pricing: Annotated[Pricing, Field(description='Pricing information')]
40
- signal_agent_segment_id: Annotated[str, Field(description='Unique identifier for the signal')]
37
+ description: Annotated[str, Field(description="Detailed signal description")]
38
+ name: Annotated[str, Field(description="Human-readable signal name")]
39
+ pricing: Annotated[Pricing, Field(description="Pricing information")]
40
+ signal_agent_segment_id: Annotated[str, Field(description="Unique identifier for the signal")]
41
41
  signal_type: Annotated[
42
- signal_catalog_type.SignalCatalogType, Field(description='Type of signal')
42
+ signal_catalog_type.SignalCatalogType, Field(description="Type of signal")
43
43
  ]
44
44
 
45
45
 
46
46
  class GetSignalsResponse(AdCPBaseModel):
47
47
  model_config = ConfigDict(
48
- extra='allow',
48
+ extra="allow",
49
49
  )
50
50
  context: context_1.ContextObject | None = None
51
51
  errors: Annotated[
52
52
  list[error.Error] | None,
53
53
  Field(
54
- description='Task-specific errors and warnings (e.g., signal discovery or pricing issues)'
54
+ description="Task-specific errors and warnings (e.g., signal discovery or pricing issues)"
55
55
  ),
56
56
  ] = None
57
57
  ext: ext_1.ExtensionObject | None = None
58
- signals: Annotated[list[Signal], Field(description='Array of matching signals')]
58
+ signals: Annotated[list[Signal], Field(description="Array of matching signals")]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: sponsored_intelligence/si_capabilities.json
3
- # timestamp: 2026-01-25T21:17:54+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -11,92 +11,107 @@ from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import ConfigDict, Field
12
12
 
13
13
 
14
+ class A2ui(AdCPBaseModel):
15
+ model_config = ConfigDict(
16
+ extra="allow",
17
+ )
18
+ catalogs: Annotated[
19
+ list[str] | None,
20
+ Field(description="Supported A2UI component catalogs (e.g., 'si-standard', 'standard')"),
21
+ ] = None
22
+ supported: Annotated[bool | None, Field(description="Supports A2UI surface rendering")] = False
23
+
24
+
14
25
  class Commerce(AdCPBaseModel):
15
26
  model_config = ConfigDict(
16
- extra='allow',
27
+ extra="allow",
17
28
  )
18
29
  acp_checkout: Annotated[
19
- bool | None, Field(description='Supports ACP (Agentic Commerce Protocol) checkout handoff')
30
+ bool | None, Field(description="Supports ACP (Agentic Commerce Protocol) checkout handoff")
20
31
  ] = None
21
32
 
22
33
 
23
34
  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'
35
+ text = "text"
36
+ link = "link"
37
+ image = "image"
38
+ product_card = "product_card"
39
+ carousel = "carousel"
40
+ action_button = "action_button"
30
41
 
31
42
 
32
43
  class Components(AdCPBaseModel):
33
44
  model_config = ConfigDict(
34
- extra='allow',
45
+ extra="allow",
35
46
  )
36
47
  extensions: Annotated[
37
48
  dict[str, Any] | None,
38
- Field(description='Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)'),
49
+ Field(description="Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)"),
39
50
  ] = None
40
51
  standard: Annotated[
41
52
  list[StandardEnum] | None,
42
- Field(description='Standard components that all SI hosts must render'),
53
+ Field(description="Standard components that all SI hosts must render"),
43
54
  ] = None
44
55
 
45
56
 
46
57
  class Avatar(AdCPBaseModel):
47
58
  model_config = ConfigDict(
48
- extra='allow',
59
+ extra="allow",
49
60
  )
50
- avatar_id: Annotated[str | None, Field(description='Brand avatar identifier')] = None
61
+ avatar_id: Annotated[str | None, Field(description="Brand avatar identifier")] = None
51
62
  provider: Annotated[
52
- str | None, Field(description='Avatar provider (d-id, heygen, synthesia, etc.)')
63
+ str | None, Field(description="Avatar provider (d-id, heygen, synthesia, etc.)")
53
64
  ] = None
54
65
 
55
66
 
56
67
  class Video(AdCPBaseModel):
57
68
  model_config = ConfigDict(
58
- extra='allow',
69
+ extra="allow",
59
70
  )
60
71
  formats: Annotated[
61
- list[str] | None, Field(description='Supported video formats (mp4, webm, etc.)')
72
+ list[str] | None, Field(description="Supported video formats (mp4, webm, etc.)")
62
73
  ] = None
63
- max_duration_seconds: Annotated[int | None, Field(description='Maximum video duration')] = None
74
+ max_duration_seconds: Annotated[int | None, Field(description="Maximum video duration")] = None
64
75
 
65
76
 
66
77
  class Voice(AdCPBaseModel):
67
78
  model_config = ConfigDict(
68
- extra='allow',
79
+ extra="allow",
69
80
  )
70
81
  provider: Annotated[
71
- str | None, Field(description='TTS provider (elevenlabs, openai, etc.)')
82
+ str | None, Field(description="TTS provider (elevenlabs, openai, etc.)")
72
83
  ] = None
73
- voice_id: Annotated[str | None, Field(description='Brand voice identifier')] = None
84
+ voice_id: Annotated[str | None, Field(description="Brand voice identifier")] = None
74
85
 
75
86
 
76
87
  class Modalities(AdCPBaseModel):
77
88
  model_config = ConfigDict(
78
- extra='allow',
89
+ extra="allow",
79
90
  )
80
91
  avatar: Annotated[
81
- bool | Avatar | None, Field(description='Animated video presence with brand avatar')
92
+ bool | Avatar | None, Field(description="Animated video presence with brand avatar")
82
93
  ] = None
83
94
  conversational: Annotated[
84
- bool | None, Field(description='Pure text exchange - the baseline modality')
95
+ bool | None, Field(description="Pure text exchange - the baseline modality")
85
96
  ] = True
86
- video: Annotated[bool | Video | None, Field(description='Brand video content playback')] = None
97
+ video: Annotated[bool | Video | None, Field(description="Brand video content playback")] = None
87
98
  voice: Annotated[
88
- bool | Voice | None, Field(description='Audio-based interaction using brand voice')
99
+ bool | Voice | None, Field(description="Audio-based interaction using brand voice")
89
100
  ] = None
90
101
 
91
102
 
92
103
  class SiCapabilities(AdCPBaseModel):
93
104
  model_config = ConfigDict(
94
- extra='allow',
105
+ extra="allow",
95
106
  )
96
- commerce: Annotated[Commerce | None, Field(description='Commerce capabilities')] = None
97
- components: Annotated[Components | None, Field(description='Visual components supported')] = (
107
+ a2ui: Annotated[A2ui | None, Field(description="A2UI (Agent-to-UI) capabilities")] = None
108
+ commerce: Annotated[Commerce | None, Field(description="Commerce capabilities")] = None
109
+ components: Annotated[Components | None, Field(description="Visual components supported")] = (
98
110
  None
99
111
  )
112
+ mcp_apps: Annotated[
113
+ bool | None, Field(description="Supports MCP Apps for rendering A2UI surfaces in iframes")
114
+ ] = False
100
115
  modalities: Annotated[
101
- Modalities | None, Field(description='Interaction modalities supported')
116
+ Modalities | None, Field(description="Interaction modalities supported")
102
117
  ] = None