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.
Files changed (247) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +6 -14
  3. adcp/__main__.py +94 -51
  4. adcp/adagents.py +91 -19
  5. adcp/client.py +865 -0
  6. adcp/protocols/a2a.py +84 -0
  7. adcp/protocols/base.py +101 -0
  8. adcp/protocols/mcp.py +84 -0
  9. adcp/server/__init__.py +49 -0
  10. adcp/server/base.py +368 -0
  11. adcp/server/content_standards.py +561 -0
  12. adcp/server/governance.py +491 -0
  13. adcp/server/mcp_tools.py +471 -0
  14. adcp/server/proposal.py +334 -0
  15. adcp/server/sponsored_intelligence.py +444 -0
  16. adcp/types/__init__.py +111 -23
  17. adcp/types/_ergonomic.py +35 -14
  18. adcp/types/_generated.py +346 -52
  19. adcp/types/aliases.py +13 -20
  20. adcp/types/base.py +1 -1
  21. adcp/types/generated_poc/adagents.py +196 -189
  22. adcp/types/generated_poc/content_standards/__init__.py +3 -0
  23. adcp/types/generated_poc/content_standards/artifact.py +208 -0
  24. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
  25. adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
  26. adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
  27. adcp/types/generated_poc/content_standards/content_standards.py +66 -0
  28. adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
  29. adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
  30. adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
  31. adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
  32. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
  33. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
  34. adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
  35. adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
  36. adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
  37. adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
  38. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
  39. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
  40. adcp/types/generated_poc/core/activation_key.py +9 -9
  41. adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
  42. adcp/types/generated_poc/core/assets/css_asset.py +3 -3
  43. adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
  44. adcp/types/generated_poc/core/assets/html_asset.py +3 -3
  45. adcp/types/generated_poc/core/assets/image_asset.py +7 -7
  46. adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
  47. adcp/types/generated_poc/core/assets/text_asset.py +3 -3
  48. adcp/types/generated_poc/core/assets/url_asset.py +4 -4
  49. adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
  50. adcp/types/generated_poc/core/assets/video_asset.py +8 -8
  51. adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
  52. adcp/types/generated_poc/core/async_response_data.py +3 -3
  53. adcp/types/generated_poc/core/brand_manifest.py +122 -59
  54. adcp/types/generated_poc/core/brand_manifest_ref.py +10 -10
  55. adcp/types/generated_poc/core/context.py +2 -2
  56. adcp/types/generated_poc/core/creative_asset.py +20 -19
  57. adcp/types/generated_poc/core/creative_assignment.py +4 -4
  58. adcp/types/generated_poc/core/creative_filters.py +18 -28
  59. adcp/types/generated_poc/core/creative_manifest.py +3 -3
  60. adcp/types/generated_poc/core/creative_policy.py +5 -5
  61. adcp/types/generated_poc/core/delivery_metrics.py +33 -33
  62. adcp/types/generated_poc/core/deployment.py +21 -21
  63. adcp/types/generated_poc/core/destination.py +12 -12
  64. adcp/types/generated_poc/core/error.py +7 -7
  65. adcp/types/generated_poc/core/ext.py +2 -2
  66. adcp/types/generated_poc/core/format.py +66 -66
  67. adcp/types/generated_poc/core/format_id.py +6 -6
  68. adcp/types/generated_poc/core/frequency_cap.py +3 -3
  69. adcp/types/generated_poc/core/identifier.py +3 -3
  70. adcp/types/generated_poc/core/mcp_webhook_payload.py +11 -11
  71. adcp/types/generated_poc/core/measurement.py +9 -9
  72. adcp/types/generated_poc/core/media_buy.py +8 -8
  73. adcp/types/generated_poc/core/media_buy_features.py +29 -0
  74. adcp/types/generated_poc/core/offering.py +80 -0
  75. adcp/types/generated_poc/core/package.py +9 -9
  76. adcp/types/generated_poc/core/performance_feedback.py +19 -19
  77. adcp/types/generated_poc/core/placement.py +5 -5
  78. adcp/types/generated_poc/core/pricing_option.py +9 -15
  79. adcp/types/generated_poc/core/product.py +21 -21
  80. adcp/types/generated_poc/core/product_allocation.py +48 -0
  81. adcp/types/generated_poc/core/product_filters.py +89 -24
  82. adcp/types/generated_poc/core/promoted_offerings.py +29 -38
  83. adcp/types/generated_poc/core/promoted_products.py +3 -3
  84. adcp/types/generated_poc/core/property.py +10 -10
  85. adcp/types/generated_poc/core/property_id.py +5 -5
  86. adcp/types/generated_poc/core/property_list_ref.py +5 -5
  87. adcp/types/generated_poc/core/property_tag.py +5 -5
  88. adcp/types/generated_poc/core/proposal.py +64 -0
  89. adcp/types/generated_poc/core/protocol_envelope.py +9 -9
  90. adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
  91. adcp/types/generated_poc/core/push_notification_config.py +6 -6
  92. adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
  93. adcp/types/generated_poc/core/reporting_webhook.py +70 -0
  94. adcp/types/generated_poc/core/response.py +5 -5
  95. adcp/types/generated_poc/core/signal_filters.py +6 -6
  96. adcp/types/generated_poc/core/start_timing.py +4 -4
  97. adcp/types/generated_poc/core/sub_asset.py +15 -15
  98. adcp/types/generated_poc/core/targeting.py +59 -18
  99. adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
  100. adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
  101. adcp/types/generated_poc/creative/preview_creative_request.py +25 -25
  102. adcp/types/generated_poc/creative/preview_creative_response.py +29 -29
  103. adcp/types/generated_poc/creative/preview_render.py +26 -26
  104. adcp/types/generated_poc/enums/adcp_domain.py +5 -5
  105. adcp/types/generated_poc/enums/asset_content_type.py +14 -14
  106. adcp/types/generated_poc/enums/auth_scheme.py +3 -3
  107. adcp/types/generated_poc/enums/available_metric.py +10 -10
  108. adcp/types/generated_poc/enums/channels.py +21 -11
  109. adcp/types/generated_poc/enums/co_branding_requirement.py +4 -4
  110. adcp/types/generated_poc/enums/creative_action.py +6 -6
  111. adcp/types/generated_poc/enums/creative_agent_capability.py +5 -5
  112. adcp/types/generated_poc/enums/creative_sort_field.py +7 -7
  113. adcp/types/generated_poc/enums/creative_status.py +6 -5
  114. adcp/types/generated_poc/enums/daast_tracking_event.py +12 -12
  115. adcp/types/generated_poc/enums/daast_version.py +3 -3
  116. adcp/types/generated_poc/enums/delivery_type.py +3 -3
  117. adcp/types/generated_poc/enums/dimension_unit.py +5 -5
  118. adcp/types/generated_poc/enums/feed_format.py +4 -4
  119. adcp/types/generated_poc/enums/feedback_source.py +5 -5
  120. adcp/types/generated_poc/enums/format_category.py +8 -8
  121. adcp/types/generated_poc/enums/format_id_parameter.py +3 -3
  122. adcp/types/generated_poc/enums/frequency_cap_scope.py +4 -4
  123. adcp/types/generated_poc/enums/geo_level.py +14 -0
  124. adcp/types/generated_poc/enums/history_entry_type.py +3 -3
  125. adcp/types/generated_poc/enums/http_method.py +3 -3
  126. adcp/types/generated_poc/enums/identifier_types.py +20 -20
  127. adcp/types/generated_poc/enums/javascript_module_type.py +4 -4
  128. adcp/types/generated_poc/enums/landing_page_requirement.py +4 -4
  129. adcp/types/generated_poc/enums/markdown_flavor.py +3 -3
  130. adcp/types/generated_poc/enums/media_buy_status.py +5 -5
  131. adcp/types/generated_poc/enums/metric_type.py +9 -9
  132. adcp/types/generated_poc/enums/metro_system.py +15 -0
  133. adcp/types/generated_poc/enums/notification_type.py +5 -5
  134. adcp/types/generated_poc/enums/pacing.py +4 -4
  135. adcp/types/generated_poc/enums/postal_system.py +19 -0
  136. adcp/types/generated_poc/enums/preview_output_format.py +3 -3
  137. adcp/types/generated_poc/enums/pricing_model.py +8 -8
  138. adcp/types/generated_poc/enums/property_type.py +9 -8
  139. adcp/types/generated_poc/enums/publisher_identifier_types.py +6 -6
  140. adcp/types/generated_poc/enums/reporting_frequency.py +4 -4
  141. adcp/types/generated_poc/enums/signal_catalog_type.py +4 -4
  142. adcp/types/generated_poc/enums/sort_direction.py +3 -3
  143. adcp/types/generated_poc/enums/task_status.py +10 -10
  144. adcp/types/generated_poc/enums/task_type.py +12 -12
  145. adcp/types/generated_poc/enums/update_frequency.py +5 -5
  146. adcp/types/generated_poc/enums/url_asset_type.py +4 -4
  147. adcp/types/generated_poc/enums/validation_mode.py +3 -3
  148. adcp/types/generated_poc/enums/vast_tracking_event.py +17 -17
  149. adcp/types/generated_poc/enums/vast_version.py +6 -6
  150. adcp/types/generated_poc/enums/webhook_response_type.py +5 -5
  151. adcp/types/generated_poc/enums/webhook_security_method.py +4 -4
  152. adcp/types/generated_poc/extensions/extension_meta.py +20 -12
  153. adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
  154. adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
  155. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
  156. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
  157. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
  158. adcp/types/generated_poc/media_buy/create_media_buy_request.py +65 -37
  159. adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
  160. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
  161. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
  162. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
  163. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
  164. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
  165. adcp/types/generated_poc/media_buy/get_products_request.py +14 -5
  166. adcp/types/generated_poc/media_buy/get_products_response.py +12 -6
  167. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
  168. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +9 -9
  169. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
  170. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
  171. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  172. adcp/types/generated_poc/media_buy/list_creatives_response.py +54 -57
  173. adcp/types/generated_poc/media_buy/package_request.py +12 -12
  174. adcp/types/generated_poc/media_buy/package_update.py +119 -0
  175. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
  176. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
  177. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
  178. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
  180. adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
  181. adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
  182. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
  183. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
  185. adcp/types/generated_poc/media_buy/update_media_buy_request.py +28 -124
  186. adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
  187. adcp/types/generated_poc/pricing_options/cpc_option.py +40 -15
  188. adcp/types/generated_poc/pricing_options/cpcv_option.py +41 -16
  189. adcp/types/generated_poc/pricing_options/cpm_option.py +62 -0
  190. adcp/types/generated_poc/pricing_options/cpp_option.py +46 -23
  191. adcp/types/generated_poc/pricing_options/cpv_option.py +45 -26
  192. adcp/types/generated_poc/pricing_options/flat_rate_option.py +53 -47
  193. adcp/types/generated_poc/pricing_options/vcpm_option.py +70 -0
  194. adcp/types/generated_poc/property/base_property_source.py +16 -16
  195. adcp/types/generated_poc/property/create_property_list_request.py +5 -5
  196. adcp/types/generated_poc/property/create_property_list_response.py +4 -4
  197. adcp/types/generated_poc/property/delete_property_list_request.py +3 -3
  198. adcp/types/generated_poc/property/delete_property_list_response.py +4 -4
  199. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  200. adcp/types/generated_poc/property/get_property_list_request.py +6 -6
  201. adcp/types/generated_poc/property/get_property_list_response.py +12 -12
  202. adcp/types/generated_poc/property/list_property_lists_request.py +6 -6
  203. adcp/types/generated_poc/property/list_property_lists_response.py +9 -9
  204. adcp/types/generated_poc/property/property_error.py +11 -11
  205. adcp/types/generated_poc/property/property_feature.py +5 -5
  206. adcp/types/generated_poc/property/property_feature_definition.py +19 -19
  207. adcp/types/generated_poc/property/property_list.py +12 -12
  208. adcp/types/generated_poc/property/property_list_changed_webhook.py +12 -12
  209. adcp/types/generated_poc/property/property_list_filters.py +9 -9
  210. adcp/types/generated_poc/property/update_property_list_request.py +9 -9
  211. adcp/types/generated_poc/property/update_property_list_response.py +3 -3
  212. adcp/types/generated_poc/protocol/__init__.py +3 -0
  213. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
  214. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
  215. adcp/types/generated_poc/protocols/adcp_extension.py +14 -17
  216. adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
  217. adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
  218. adcp/types/generated_poc/signals/get_signals_request.py +9 -9
  219. adcp/types/generated_poc/signals/get_signals_response.py +16 -16
  220. adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
  221. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
  222. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
  224. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
  225. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
  227. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
  229. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
  231. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
  232. adcp/utils/format_assets.py +5 -5
  233. adcp/utils/preview_cache.py +2 -2
  234. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
  235. adcp-3.0.0.dist-info/RECORD +264 -0
  236. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
  237. adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
  238. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -58
  239. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
  240. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -61
  241. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
  242. adcp/types/generated_poc/property/list_property_features_request.py +0 -25
  243. adcp/types/generated_poc/property/list_property_features_response.py +0 -24
  244. adcp-2.19.0.dist-info/RECORD +0 -220
  245. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
  246. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
  247. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,353 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: protocol/get_adcp_capabilities_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
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, RootModel
12
+
13
+ from ..core import context as context_1
14
+ from ..core import error
15
+ from ..core import ext as ext_1
16
+ from ..core import media_buy_features
17
+ from ..enums import channels
18
+ from ..sponsored_intelligence import si_capabilities
19
+
20
+
21
+ class MajorVersion(RootModel[int]):
22
+ root: Annotated[int, Field(ge=1)]
23
+
24
+
25
+ class Adcp(AdCPBaseModel):
26
+ major_versions: Annotated[
27
+ list[MajorVersion],
28
+ Field(
29
+ description='AdCP major versions supported by this seller. Major versions indicate breaking changes.',
30
+ min_length=1,
31
+ ),
32
+ ]
33
+
34
+
35
+ class ExtensionsSupportedItem(RootModel[str]):
36
+ root: Annotated[
37
+ str,
38
+ Field(
39
+ description="Extension namespace (lowercase alphanumeric with underscores, e.g., 'scope3', 'garm', 'iab_tcf')",
40
+ pattern='^[a-z][a-z0-9_]*$',
41
+ ),
42
+ ]
43
+
44
+
45
+ class Range(AdCPBaseModel):
46
+ max: Annotated[float, Field(description='Maximum value')]
47
+ min: Annotated[float, Field(description='Minimum value')]
48
+
49
+
50
+ class Type(Enum):
51
+ binary = 'binary'
52
+ quantitative = 'quantitative'
53
+ categorical = 'categorical'
54
+
55
+
56
+ class PropertyFeature(AdCPBaseModel):
57
+ categories: Annotated[
58
+ list[str] | None, Field(description='For categorical features, the valid values')
59
+ ] = None
60
+ description: Annotated[
61
+ str | None, Field(description='Human-readable description of what this feature measures')
62
+ ] = None
63
+ feature_id: Annotated[
64
+ str,
65
+ Field(
66
+ description="Unique identifier for this feature (e.g., 'consent_quality', 'coppa_certified', 'carbon_score')"
67
+ ),
68
+ ]
69
+ methodology_url: Annotated[
70
+ AnyUrl | None,
71
+ Field(
72
+ description='URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors.'
73
+ ),
74
+ ] = None
75
+ range: Annotated[
76
+ Range | None, Field(description='For quantitative features, the valid range')
77
+ ] = None
78
+ type: Annotated[
79
+ Type,
80
+ Field(
81
+ description="Data type: 'binary' for yes/no, 'quantitative' for numeric scores, 'categorical' for enum values"
82
+ ),
83
+ ]
84
+
85
+
86
+ class Governance(AdCPBaseModel):
87
+ property_features: Annotated[
88
+ list[PropertyFeature] | None,
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.'
91
+ ),
92
+ ] = None
93
+
94
+
95
+ class MraidVersion(RootModel[str]):
96
+ root: Annotated[str, Field(pattern='^[0-9]+\\.[0-9]+$')]
97
+
98
+
99
+ class VastVersion(MraidVersion):
100
+ pass
101
+
102
+
103
+ class CreativeSpecs(AdCPBaseModel):
104
+ mraid_versions: Annotated[
105
+ list[MraidVersion] | None,
106
+ Field(description='MRAID versions supported for rich media mobile creatives'),
107
+ ] = None
108
+ simid: Annotated[bool | None, Field(description='SIMID support for interactive video ads')] = (
109
+ None
110
+ )
111
+ vast_versions: Annotated[
112
+ list[VastVersion] | None, Field(description='VAST versions supported for video creatives')
113
+ ] = None
114
+ vpaid: Annotated[bool | None, Field(description='VPAID support for interactive video ads')] = (
115
+ None
116
+ )
117
+
118
+
119
+ class GeoMetros(AdCPBaseModel):
120
+ eurostat_nuts2: Annotated[
121
+ bool | None, Field(description='Supports Eurostat NUTS Level 2 regions (EU)')
122
+ ] = None
123
+ nielsen_dma: Annotated[
124
+ bool | None,
125
+ Field(description="Supports Nielsen DMA codes (US market, e.g., '501' for NYC)"),
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
129
+
130
+
131
+ class GeoPostalAreas(AdCPBaseModel):
132
+ au_postcode: Annotated[
133
+ bool | None, Field(description="Australian postcode, 4 digits (e.g., '2000')")
134
+ ] = None
135
+ ca_fsa: Annotated[
136
+ bool | None, Field(description="Canadian Forward Sortation Area (e.g., 'K1A')")
137
+ ] = None
138
+ ca_full: Annotated[
139
+ bool | None, Field(description="Canadian full postal code (e.g., 'K1A 0B1')")
140
+ ] = None
141
+ de_plz: Annotated[
142
+ bool | None, Field(description="German Postleitzahl, 5 digits (e.g., '10115')")
143
+ ] = None
144
+ fr_code_postal: Annotated[
145
+ bool | None, Field(description="French code postal, 5 digits (e.g., '75001')")
146
+ ] = None
147
+ gb_full: Annotated[bool | None, Field(description="UK full postcode (e.g., 'SW1A 1AA')")] = None
148
+ gb_outward: Annotated[
149
+ bool | None, Field(description="UK postcode district / outward code (e.g., 'SW1', 'EC1')")
150
+ ] = None
151
+ us_zip: Annotated[bool | None, Field(description="US 5-digit ZIP codes (e.g., '10001')")] = None
152
+ us_zip_plus_four: Annotated[
153
+ bool | None, Field(description="US 9-digit ZIP+4 codes (e.g., '10001-1234')")
154
+ ] = None
155
+
156
+
157
+ class Targeting(AdCPBaseModel):
158
+ geo_countries: Annotated[
159
+ bool | None,
160
+ Field(
161
+ description="Supports country-level geo targeting using ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE')"
162
+ ),
163
+ ] = None
164
+ geo_metros: Annotated[
165
+ GeoMetros | None,
166
+ Field(
167
+ description='Metro area targeting support. Specifies which classification systems are supported.'
168
+ ),
169
+ ] = None
170
+ geo_postal_areas: Annotated[
171
+ GeoPostalAreas | None,
172
+ Field(
173
+ description='Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision.'
174
+ ),
175
+ ] = None
176
+ geo_regions: Annotated[
177
+ bool | None,
178
+ Field(
179
+ description="Supports region/state-level geo targeting using ISO 3166-2 subdivision codes (e.g., 'US-NY', 'GB-SCT', 'DE-BY')"
180
+ ),
181
+ ] = None
182
+
183
+
184
+ class Execution(AdCPBaseModel):
185
+ axe_integrations: Annotated[
186
+ list[AnyUrl] | None,
187
+ Field(
188
+ description='Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through.'
189
+ ),
190
+ ] = None
191
+ creative_specs: Annotated[
192
+ CreativeSpecs | None, Field(description='Creative specification support')
193
+ ] = None
194
+ targeting: Annotated[
195
+ Targeting | None,
196
+ Field(
197
+ description='Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them.'
198
+ ),
199
+ ] = None
200
+
201
+
202
+ class PrimaryCountry(RootModel[str]):
203
+ root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
204
+
205
+
206
+ class PublisherDomain(RootModel[str]):
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])?)*$')
209
+ ]
210
+
211
+
212
+ class Portfolio(AdCPBaseModel):
213
+ advertising_policies: Annotated[
214
+ str | None,
215
+ Field(
216
+ description='Advertising content policies, restrictions, and guidelines',
217
+ max_length=10000,
218
+ ),
219
+ ] = None
220
+ description: Annotated[
221
+ str | None,
222
+ Field(
223
+ description='Markdown-formatted description of the inventory portfolio', max_length=5000
224
+ ),
225
+ ] = None
226
+ primary_channels: Annotated[
227
+ list[channels.MediaChannel] | None,
228
+ Field(description='Primary advertising channels in this portfolio'),
229
+ ] = None
230
+ primary_countries: Annotated[
231
+ list[PrimaryCountry] | None,
232
+ Field(description='Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated'),
233
+ ] = None
234
+ publisher_domains: Annotated[
235
+ list[PublisherDomain],
236
+ Field(
237
+ description="Publisher domains this seller is authorized to represent. Buyers should fetch each publisher's adagents.json for property definitions.",
238
+ min_length=1,
239
+ ),
240
+ ]
241
+
242
+
243
+ class Signals(AdCPBaseModel):
244
+ features: Annotated[
245
+ dict[str, bool] | None, Field(description='Optional signals features supported')
246
+ ] = None
247
+
248
+
249
+ class Preferred(Enum):
250
+ mcp = 'mcp'
251
+ a2a = 'a2a'
252
+
253
+
254
+ class Transport(AdCPBaseModel):
255
+ model_config = ConfigDict(
256
+ extra='allow',
257
+ )
258
+ type: Annotated[Preferred, Field(description='Protocol transport type')]
259
+ url: Annotated[AnyUrl, Field(description='Agent endpoint URL for this transport')]
260
+
261
+
262
+ class Endpoint(AdCPBaseModel):
263
+ preferred: Annotated[
264
+ Preferred | None, Field(description='Preferred transport when host supports multiple')
265
+ ] = None
266
+ transports: Annotated[
267
+ list[Transport],
268
+ Field(
269
+ description='Available protocol transports. Hosts select based on their capabilities.',
270
+ min_length=1,
271
+ ),
272
+ ]
273
+
274
+
275
+ class SupportedProtocol(Enum):
276
+ media_buy = 'media_buy'
277
+ signals = 'signals'
278
+ governance = 'governance'
279
+ sponsored_intelligence = 'sponsored_intelligence'
280
+
281
+
282
+ class MediaBuy(AdCPBaseModel):
283
+ execution: Annotated[
284
+ Execution | None, Field(description='Technical execution capabilities for media buying')
285
+ ] = None
286
+ features: media_buy_features.MediaBuyFeatures | None = None
287
+ portfolio: Annotated[
288
+ Portfolio | None,
289
+ Field(description="Information about the seller's media inventory portfolio"),
290
+ ] = None
291
+
292
+
293
+ class SponsoredIntelligence(AdCPBaseModel):
294
+ brand_manifest_url: Annotated[
295
+ AnyUrl | None, Field(description='URL to brand manifest with colors, fonts, logos, tone')
296
+ ] = None
297
+ capabilities: Annotated[
298
+ si_capabilities.SiCapabilities,
299
+ Field(description='Modalities, components, and commerce capabilities'),
300
+ ]
301
+ endpoint: Annotated[Endpoint, Field(description='SI agent endpoint configuration')]
302
+
303
+
304
+ class GetAdcpCapabilitiesResponse(AdCPBaseModel):
305
+ model_config = ConfigDict(
306
+ extra='allow',
307
+ )
308
+ adcp: Annotated[Adcp, Field(description='Core AdCP protocol information')]
309
+ context: context_1.ContextObject | None = None
310
+ errors: Annotated[
311
+ list[error.Error] | None, Field(description='Task-specific errors and warnings')
312
+ ] = None
313
+ ext: ext_1.ExtensionObject | None = None
314
+ extensions_supported: Annotated[
315
+ list[ExtensionsSupportedItem] | None,
316
+ 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
+ ),
319
+ ] = None
320
+ governance: Annotated[
321
+ Governance | None,
322
+ 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
+ ),
325
+ ] = None
326
+ last_updated: Annotated[
327
+ AwareDatetime | None,
328
+ Field(
329
+ description='ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation.'
330
+ ),
331
+ ] = None
332
+ media_buy: Annotated[
333
+ MediaBuy | None,
334
+ Field(
335
+ description='Media-buy protocol capabilities. Only present if media_buy is in supported_protocols.'
336
+ ),
337
+ ] = None
338
+ signals: Annotated[
339
+ Signals | None,
340
+ Field(
341
+ description='Signals protocol capabilities. Only present if signals is in supported_protocols. Reserved for future use.'
342
+ ),
343
+ ] = None
344
+ sponsored_intelligence: Annotated[
345
+ SponsoredIntelligence | None,
346
+ Field(
347
+ description='Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences.'
348
+ ),
349
+ ] = None
350
+ supported_protocols: Annotated[
351
+ list[SupportedProtocol],
352
+ Field(description='Which AdCP domain protocols this seller supports', min_length=1),
353
+ ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: protocols/adcp_extension.json
3
- # timestamp: 2026-01-14T17:08:13+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,42 +12,39 @@ from pydantic import ConfigDict, Field, RootModel
12
12
 
13
13
 
14
14
  class ExtensionsSupportedItem(RootModel[str]):
15
- root: Annotated[
16
- str,
17
- Field(
18
- description="Extension namespace (e.g., 'sustainability'). Must be lowercase alphanumeric with underscores.",
19
- pattern="^[a-z][a-z0-9_]*$",
20
- ),
21
- ]
15
+ root: Annotated[str, Field(pattern='^[a-z][a-z0-9_]*$')]
22
16
 
23
17
 
24
18
  class ProtocolsSupportedEnum(Enum):
25
- media_buy = "media_buy"
26
- creative = "creative"
27
- signals = "signals"
19
+ media_buy = 'media_buy'
20
+ creative = 'creative'
21
+ signals = 'signals'
28
22
 
29
23
 
30
- class AdcpAgentCardExtensionParams(AdCPBaseModel):
24
+ class AdcpAgentCardExtensionParamsDeprecated(AdCPBaseModel):
31
25
  model_config = ConfigDict(
32
- extra="allow",
26
+ extra='allow',
33
27
  )
34
28
  adcp_version: Annotated[
35
29
  str,
36
30
  Field(
37
- description="Semantic version of the AdCP specification this agent implements (e.g., '2.5.0'). Extension schemas are versioned along with the AdCP spec.",
38
- pattern="^\\d+\\.\\d+\\.\\d+$",
31
+ deprecated=True,
32
+ description='DEPRECATED: Use get_adcp_capabilities response adcp.major_versions instead.',
33
+ pattern='^\\d+\\.\\d+\\.\\d+$',
39
34
  ),
40
35
  ]
41
36
  extensions_supported: Annotated[
42
37
  list[ExtensionsSupportedItem] | None,
43
38
  Field(
44
- description="Typed extensions this agent supports. Each extension has a formal schema in /schemas/extensions/. Extension version is determined by adcp_version."
39
+ deprecated=True,
40
+ description='DEPRECATED: Typed extensions can be declared in get_adcp_capabilities ext field.',
45
41
  ),
46
42
  ] = None
47
43
  protocols_supported: Annotated[
48
44
  list[ProtocolsSupportedEnum],
49
45
  Field(
50
- description="AdCP protocol domains supported by this agent. At least one must be specified.",
46
+ deprecated=True,
47
+ description='DEPRECATED: Use get_adcp_capabilities response supported_protocols instead.',
51
48
  min_length=1,
52
49
  ),
53
50
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: signals/activate_signal_request.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -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
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: signals/activate_signal_response.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -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
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: signals/get_signals_request.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -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
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: signals/get_signals_response.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -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')]
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2026-01-25T21:17:54+00:00