adcp 3.0.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 (243) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +13 -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 +14 -6
  17. adcp/types/_generated.py +44 -27
  18. adcp/types/aliases.py +55 -0
  19. adcp/types/base.py +7 -7
  20. adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
  21. adcp/types/generated_poc/a2ui/component.py +24 -0
  22. adcp/types/generated_poc/a2ui/surface.py +33 -0
  23. adcp/types/generated_poc/account/__init__.py +3 -0
  24. adcp/types/generated_poc/account/list_accounts_request.py +30 -0
  25. adcp/types/generated_poc/account/list_accounts_response.py +30 -0
  26. adcp/types/generated_poc/adagents.py +192 -195
  27. adcp/types/generated_poc/content_standards/artifact.py +69 -69
  28. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
  29. adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
  30. adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
  31. adcp/types/generated_poc/content_standards/content_standards.py +8 -8
  32. adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
  33. adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
  34. adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
  35. adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
  36. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
  37. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
  38. adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
  39. adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
  40. adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
  41. adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
  42. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
  43. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
  44. adcp/types/generated_poc/core/account.py +54 -0
  45. adcp/types/generated_poc/core/activation_key.py +8 -8
  46. adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
  47. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  48. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  49. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  50. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  51. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  52. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  53. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  54. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  55. adcp/types/generated_poc/core/assets/video_asset.py +126 -10
  56. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  57. adcp/types/generated_poc/core/async_response_data.py +2 -2
  58. adcp/types/generated_poc/core/brand_manifest.py +66 -66
  59. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  60. adcp/types/generated_poc/core/context.py +1 -1
  61. adcp/types/generated_poc/core/creative_asset.py +12 -12
  62. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  63. adcp/types/generated_poc/core/creative_filters.py +23 -17
  64. adcp/types/generated_poc/core/creative_manifest.py +4 -4
  65. adcp/types/generated_poc/core/creative_policy.py +4 -4
  66. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  67. adcp/types/generated_poc/core/deployment.py +20 -20
  68. adcp/types/generated_poc/core/destination.py +11 -11
  69. adcp/types/generated_poc/core/error.py +6 -6
  70. adcp/types/generated_poc/core/ext.py +1 -1
  71. adcp/types/generated_poc/core/format.py +49 -124
  72. adcp/types/generated_poc/core/format_id.py +5 -5
  73. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  74. adcp/types/generated_poc/core/identifier.py +2 -2
  75. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  76. adcp/types/generated_poc/core/measurement.py +8 -8
  77. adcp/types/generated_poc/core/media_buy.py +12 -8
  78. adcp/types/generated_poc/core/media_buy_features.py +3 -3
  79. adcp/types/generated_poc/core/offering.py +9 -9
  80. adcp/types/generated_poc/core/package.py +8 -8
  81. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  82. adcp/types/generated_poc/core/placement.py +4 -4
  83. adcp/types/generated_poc/core/pricing_option.py +1 -1
  84. adcp/types/generated_poc/core/product.py +27 -21
  85. adcp/types/generated_poc/core/product_allocation.py +5 -5
  86. adcp/types/generated_poc/core/product_filters.py +27 -27
  87. adcp/types/generated_poc/core/promoted_offerings.py +18 -18
  88. adcp/types/generated_poc/core/promoted_products.py +2 -2
  89. adcp/types/generated_poc/core/property.py +10 -10
  90. adcp/types/generated_poc/core/property_id.py +4 -4
  91. adcp/types/generated_poc/core/property_list_ref.py +4 -4
  92. adcp/types/generated_poc/core/property_tag.py +4 -4
  93. adcp/types/generated_poc/core/proposal.py +13 -13
  94. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  95. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  96. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  97. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  98. adcp/types/generated_poc/core/reporting_webhook.py +10 -10
  99. adcp/types/generated_poc/core/response.py +4 -4
  100. adcp/types/generated_poc/core/signal_filters.py +5 -5
  101. adcp/types/generated_poc/core/start_timing.py +3 -3
  102. adcp/types/generated_poc/core/sub_asset.py +14 -14
  103. adcp/types/generated_poc/core/targeting.py +17 -10
  104. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  105. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  106. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  107. adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
  108. adcp/types/generated_poc/creative/preview_render.py +25 -25
  109. adcp/types/generated_poc/enums/adcp_domain.py +4 -4
  110. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  111. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  112. adcp/types/generated_poc/enums/available_metric.py +9 -9
  113. adcp/types/generated_poc/enums/channels.py +19 -19
  114. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  115. adcp/types/generated_poc/enums/creative_action.py +5 -5
  116. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  117. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  118. adcp/types/generated_poc/enums/creative_status.py +5 -5
  119. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  120. adcp/types/generated_poc/enums/daast_version.py +2 -2
  121. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  122. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  123. adcp/types/generated_poc/enums/feed_format.py +3 -3
  124. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  125. adcp/types/generated_poc/enums/format_category.py +7 -7
  126. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  127. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  128. adcp/types/generated_poc/enums/geo_level.py +4 -4
  129. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  130. adcp/types/generated_poc/enums/http_method.py +2 -2
  131. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  132. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  133. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  134. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  135. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  136. adcp/types/generated_poc/enums/metric_type.py +8 -8
  137. adcp/types/generated_poc/enums/metro_system.py +5 -5
  138. adcp/types/generated_poc/enums/notification_type.py +4 -4
  139. adcp/types/generated_poc/enums/pacing.py +3 -3
  140. adcp/types/generated_poc/enums/postal_system.py +9 -9
  141. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  142. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  143. adcp/types/generated_poc/enums/property_type.py +8 -8
  144. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  145. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  146. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  147. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  148. adcp/types/generated_poc/enums/task_status.py +9 -9
  149. adcp/types/generated_poc/enums/task_type.py +11 -12
  150. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  151. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  152. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  153. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  154. adcp/types/generated_poc/enums/vast_version.py +5 -5
  155. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  156. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  157. adcp/types/generated_poc/extensions/extension_meta.py +14 -14
  158. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  159. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  160. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  161. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  162. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  163. adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
  164. adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
  165. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  166. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  167. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  168. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  169. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  170. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  171. adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
  172. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  173. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  174. adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
  175. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
  176. adcp/types/generated_poc/media_buy/package_request.py +8 -8
  177. adcp/types/generated_poc/media_buy/package_update.py +16 -16
  178. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  179. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  181. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  182. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  183. adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
  184. adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  186. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  187. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  188. adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
  189. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  190. adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
  191. adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
  192. adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
  193. adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
  194. adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
  195. adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
  196. adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
  197. adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
  198. adcp/types/generated_poc/property/base_property_source.py +15 -15
  199. adcp/types/generated_poc/property/create_property_list_request.py +4 -4
  200. adcp/types/generated_poc/property/create_property_list_response.py +3 -3
  201. adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
  202. adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
  203. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  204. adcp/types/generated_poc/property/get_property_list_request.py +5 -5
  205. adcp/types/generated_poc/property/get_property_list_response.py +11 -11
  206. adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
  207. adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
  208. adcp/types/generated_poc/property/property_error.py +10 -10
  209. adcp/types/generated_poc/property/property_feature.py +4 -4
  210. adcp/types/generated_poc/property/property_feature_definition.py +18 -18
  211. adcp/types/generated_poc/property/property_list.py +11 -11
  212. adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
  213. adcp/types/generated_poc/property/property_list_filters.py +7 -7
  214. adcp/types/generated_poc/property/update_property_list_request.py +8 -8
  215. adcp/types/generated_poc/property/update_property_list_response.py +2 -2
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
  217. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
  218. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  219. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  220. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  221. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  222. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
  224. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
  225. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
  227. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
  229. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
  231. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
  232. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
  233. adcp/utils/format_assets.py +32 -32
  234. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
  235. adcp-3.2.0.dist-info/RECORD +268 -0
  236. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
  237. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
  238. adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
  239. adcp-3.0.0.dist-info/RECORD +0 -264
  240. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
  241. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
  242. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
  243. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
adcp/ADCP_VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0-beta.1
1
+ 3.0.0-beta.2
adcp/__init__.py CHANGED
@@ -94,8 +94,8 @@ from adcp.types import (
94
94
  GetProductsResponse,
95
95
  GetSignalsRequest,
96
96
  GetSignalsResponse,
97
- ListAuthorizedPropertiesRequest,
98
- ListAuthorizedPropertiesResponse,
97
+ ListAccountsRequest,
98
+ ListAccountsResponse,
99
99
  ListCreativeFormatsRequest,
100
100
  ListCreativeFormatsResponse,
101
101
  ListCreativesRequest,
@@ -139,6 +139,8 @@ from adcp.types.aliases import (
139
139
  BuildCreativeSuccessResponse,
140
140
  CreateMediaBuyErrorResponse,
141
141
  CreateMediaBuySuccessResponse,
142
+ Deployment,
143
+ Destination,
142
144
  HtmlPreviewRender,
143
145
  InlineDaastAsset,
144
146
  InlineVastAsset,
@@ -149,10 +151,12 @@ from adcp.types.aliases import (
149
151
  PreviewCreativeInteractiveResponse,
150
152
  PreviewCreativeManifestRequest,
151
153
  PreviewCreativeStaticResponse,
154
+ PricingOption,
152
155
  PropertyId,
153
156
  PropertyTag,
154
157
  ProvidePerformanceFeedbackErrorResponse,
155
158
  ProvidePerformanceFeedbackSuccessResponse,
159
+ PublisherProperties,
156
160
  PublisherPropertiesAll,
157
161
  PublisherPropertiesById,
158
162
  PublisherPropertiesByTag,
@@ -193,7 +197,7 @@ from adcp.webhooks import (
193
197
  get_adcp_signed_headers_for_webhook,
194
198
  )
195
199
 
196
- __version__ = "3.0.0"
200
+ __version__ = "3.2.0"
197
201
 
198
202
 
199
203
  def get_adcp_version() -> str:
@@ -259,8 +263,8 @@ __all__ = [
259
263
  "GetSignalsRequest",
260
264
  "GetSignalsResponse",
261
265
  "SignalFilters",
262
- "ListAuthorizedPropertiesRequest",
263
- "ListAuthorizedPropertiesResponse",
266
+ "ListAccountsRequest",
267
+ "ListAccountsResponse",
264
268
  "ProvidePerformanceFeedbackRequest",
265
269
  "ProvidePerformanceFeedbackResponse",
266
270
  "Error",
@@ -362,6 +366,8 @@ __all__ = [
362
366
  "BuildCreativeErrorResponse",
363
367
  "CreateMediaBuySuccessResponse",
364
368
  "CreateMediaBuyErrorResponse",
369
+ "Deployment",
370
+ "Destination",
365
371
  "HtmlPreviewRender",
366
372
  "InlineDaastAsset",
367
373
  "InlineVastAsset",
@@ -372,10 +378,12 @@ __all__ = [
372
378
  "PreviewCreativeManifestRequest",
373
379
  "PreviewCreativeStaticResponse",
374
380
  "PreviewCreativeInteractiveResponse",
381
+ "PricingOption",
375
382
  "PropertyId",
376
383
  "PropertyTag",
377
384
  "ProvidePerformanceFeedbackSuccessResponse",
378
385
  "ProvidePerformanceFeedbackErrorResponse",
386
+ "PublisherProperties",
379
387
  "PublisherPropertiesAll",
380
388
  "PublisherPropertiesById",
381
389
  "PublisherPropertiesByTag",
adcp/__main__.py CHANGED
@@ -193,9 +193,9 @@ def _get_dispatch_table() -> dict[str, tuple[str, type | None]]:
193
193
  "create_media_buy": ("create_media_buy", gen.CreateMediaBuyRequest),
194
194
  "update_media_buy": ("update_media_buy", gen.UpdateMediaBuyRequest),
195
195
  "get_media_buy_delivery": ("get_media_buy_delivery", gen.GetMediaBuyDeliveryRequest),
196
- "list_authorized_properties": (
197
- "list_authorized_properties",
198
- gen.ListAuthorizedPropertiesRequest,
196
+ "list_accounts": (
197
+ "list_accounts",
198
+ gen.ListAccountsRequest,
199
199
  ),
200
200
  # Signals
201
201
  "get_signals": ("get_signals", gen.GetSignalsRequest),
@@ -491,7 +491,7 @@ def main() -> None:
491
491
  print(" adcp https://agent.example.com list_tools")
492
492
  print("\nV3 Protocol Examples:")
493
493
  print(" adcp myagent get_adcp_capabilities")
494
- print(" adcp cs-agent calibrate_content '{\"content_standards_id\":\"cs-123\"}'")
494
+ print(' adcp cs-agent calibrate_content \'{"content_standards_id":"cs-123"}\'')
495
495
  print(" adcp si-agent si_get_offering")
496
496
  print(" adcp gov-agent list_property_lists")
497
497
  sys.exit(0)
adcp/adagents.py CHANGED
@@ -330,9 +330,7 @@ async def fetch_adagents(
330
330
  for depth in range(MAX_REDIRECT_DEPTH + 1):
331
331
  # Check for redirect loop
332
332
  if url in visited_urls:
333
- raise AdagentsValidationError(
334
- f"Circular redirect detected: {url} already visited"
335
- )
333
+ raise AdagentsValidationError(f"Circular redirect detected: {url} already visited")
336
334
  visited_urls.add(url)
337
335
 
338
336
  data = await _fetch_adagents_url(url, timeout, user_agent, client)
@@ -427,9 +425,7 @@ async def _fetch_adagents_url(
427
425
  try:
428
426
  validate_adagents(data)
429
427
  except ValidationError as e:
430
- raise AdagentsValidationError(
431
- f"Invalid adagents.json structure: {e}"
432
- ) from e
428
+ raise AdagentsValidationError(f"Invalid adagents.json structure: {e}") from e
433
429
  elif "authoritative_location" not in data:
434
430
  # Neither authorized_agents nor authoritative_location
435
431
  raise AdagentsValidationError(
@@ -693,8 +689,8 @@ async def fetch_agent_authorizations(
693
689
  properties your agent can access.
694
690
 
695
691
  This is the "pull" approach - you query publishers to see if they've authorized you.
696
- For the "push" approach where the agent tells you what it's authorized for,
697
- use the agent's list_authorized_properties endpoint via ADCPClient.
692
+ For the "push" approach where the agent tells you what billing accounts you can use,
693
+ use the agent's list_accounts endpoint via ADCPClient.
698
694
 
699
695
  Args:
700
696
  agent_url: URL of your sales agent
@@ -718,7 +714,7 @@ async def fetch_agent_authorizations(
718
714
  ... print(f" Tags: {ctx.property_tags}")
719
715
 
720
716
  See Also:
721
- ADCPClient.list_authorized_properties: "Push" approach using the agent's API
717
+ ADCPClient.list_accounts: "Push" approach using the agent's API to list billing accounts
722
718
 
723
719
  Notes:
724
720
  - Silently skips domains where adagents.json is not found or invalid
adcp/client.py CHANGED
@@ -32,8 +32,8 @@ from adcp.types import (
32
32
  GetProductsResponse,
33
33
  GetSignalsRequest,
34
34
  GetSignalsResponse,
35
- ListAuthorizedPropertiesRequest,
36
- ListAuthorizedPropertiesResponse,
35
+ ListAccountsRequest,
36
+ ListAccountsResponse,
37
37
  ListCreativeFormatsRequest,
38
38
  ListCreativeFormatsResponse,
39
39
  ListCreativesRequest,
@@ -525,18 +525,20 @@ class ADCPClient:
525
525
 
526
526
  return self.adapter._parse_response(raw_result, GetMediaBuyDeliveryResponse)
527
527
 
528
- async def list_authorized_properties(
528
+ async def list_accounts(
529
529
  self,
530
- request: ListAuthorizedPropertiesRequest,
531
- ) -> TaskResult[ListAuthorizedPropertiesResponse]:
530
+ request: ListAccountsRequest,
531
+ ) -> TaskResult[ListAccountsResponse]:
532
532
  """
533
- List Authorized Properties.
533
+ List Accounts.
534
+
535
+ Lists billing accounts accessible to the authenticated agent.
534
536
 
535
537
  Args:
536
538
  request: Request parameters
537
539
 
538
540
  Returns:
539
- TaskResult containing ListAuthorizedPropertiesResponse
541
+ TaskResult containing ListAccountsResponse
540
542
  """
541
543
  operation_id = create_operation_id()
542
544
  params = request.model_dump(exclude_none=True)
@@ -546,25 +548,25 @@ class ADCPClient:
546
548
  type=ActivityType.PROTOCOL_REQUEST,
547
549
  operation_id=operation_id,
548
550
  agent_id=self.agent_config.id,
549
- task_type="list_authorized_properties",
551
+ task_type="list_accounts",
550
552
  timestamp=datetime.now(timezone.utc).isoformat(),
551
553
  )
552
554
  )
553
555
 
554
- raw_result = await self.adapter.list_authorized_properties(params)
556
+ raw_result = await self.adapter.list_accounts(params)
555
557
 
556
558
  self._emit_activity(
557
559
  Activity(
558
560
  type=ActivityType.PROTOCOL_RESPONSE,
559
561
  operation_id=operation_id,
560
562
  agent_id=self.agent_config.id,
561
- task_type="list_authorized_properties",
563
+ task_type="list_accounts",
562
564
  status=raw_result.status,
563
565
  timestamp=datetime.now(timezone.utc).isoformat(),
564
566
  )
565
567
  )
566
568
 
567
- return self.adapter._parse_response(raw_result, ListAuthorizedPropertiesResponse)
569
+ return self.adapter._parse_response(raw_result, ListAccountsResponse)
568
570
 
569
571
  async def get_signals(
570
572
  self,
@@ -1759,7 +1761,7 @@ class ADCPClient:
1759
1761
  "sync_creatives": SyncCreativesResponse, # Union type
1760
1762
  "list_creatives": ListCreativesResponse,
1761
1763
  "get_media_buy_delivery": GetMediaBuyDeliveryResponse,
1762
- "list_authorized_properties": ListAuthorizedPropertiesResponse,
1764
+ "list_accounts": ListAccountsResponse,
1763
1765
  "get_signals": GetSignalsResponse,
1764
1766
  "activate_signal": ActivateSignalResponse, # Union type
1765
1767
  "provide_performance_feedback": ProvidePerformanceFeedbackResponse,
adcp/protocols/a2a.py CHANGED
@@ -437,9 +437,9 @@ class A2AAdapter(ProtocolAdapter):
437
437
  """Get media buy delivery."""
438
438
  return await self._call_a2a_tool("get_media_buy_delivery", params)
439
439
 
440
- async def list_authorized_properties(self, params: dict[str, Any]) -> TaskResult[Any]:
441
- """List authorized properties."""
442
- return await self._call_a2a_tool("list_authorized_properties", params)
440
+ async def list_accounts(self, params: dict[str, Any]) -> TaskResult[Any]:
441
+ """List billing accounts accessible to the authenticated agent."""
442
+ return await self._call_a2a_tool("list_accounts", params)
443
443
 
444
444
  async def get_signals(self, params: dict[str, Any]) -> TaskResult[Any]:
445
445
  """Get signals."""
adcp/protocols/base.py CHANGED
@@ -120,8 +120,8 @@ class ProtocolAdapter(ABC):
120
120
  pass
121
121
 
122
122
  @abstractmethod
123
- async def list_authorized_properties(self, params: dict[str, Any]) -> TaskResult[Any]:
124
- """List authorized properties."""
123
+ async def list_accounts(self, params: dict[str, Any]) -> TaskResult[Any]:
124
+ """List billing accounts accessible to the authenticated agent."""
125
125
  pass
126
126
 
127
127
  @abstractmethod
adcp/protocols/mcp.py CHANGED
@@ -432,9 +432,9 @@ class MCPAdapter(ProtocolAdapter):
432
432
  """Get media buy delivery."""
433
433
  return await self._call_mcp_tool("get_media_buy_delivery", params)
434
434
 
435
- async def list_authorized_properties(self, params: dict[str, Any]) -> TaskResult[Any]:
436
- """List authorized properties."""
437
- return await self._call_mcp_tool("list_authorized_properties", params)
435
+ async def list_accounts(self, params: dict[str, Any]) -> TaskResult[Any]:
436
+ """List billing accounts accessible to the authenticated agent."""
437
+ return await self._call_mcp_tool("list_accounts", params)
438
438
 
439
439
  async def get_signals(self, params: dict[str, Any]) -> TaskResult[Any]:
440
440
  """Get signals."""
adcp/server/base.py CHANGED
@@ -74,9 +74,7 @@ class ADCPHandler(ABC):
74
74
  # Core Catalog Operations
75
75
  # ========================================================================
76
76
 
77
- async def get_products(
78
- self, params: dict[str, Any], context: ToolContext | None = None
79
- ) -> Any:
77
+ async def get_products(self, params: dict[str, Any], context: ToolContext | None = None) -> Any:
80
78
  """Get advertising products.
81
79
 
82
80
  Override this to provide product catalog functionality.
@@ -92,14 +90,14 @@ class ADCPHandler(ABC):
92
90
  """
93
91
  return not_supported("list_creative_formats is not implemented by this agent")
94
92
 
95
- async def list_authorized_properties(
93
+ async def list_accounts(
96
94
  self, params: dict[str, Any], context: ToolContext | None = None
97
95
  ) -> Any:
98
- """List authorized properties.
96
+ """List billing accounts accessible to the authenticated agent.
99
97
 
100
- Override this to provide property authorization information.
98
+ Override this to provide account information.
101
99
  """
102
- return not_supported("list_authorized_properties is not implemented by this agent")
100
+ return not_supported("list_accounts is not implemented by this agent")
103
101
 
104
102
  # ========================================================================
105
103
  # Creative Operations
@@ -167,9 +165,7 @@ class ADCPHandler(ABC):
167
165
  # Signal Operations
168
166
  # ========================================================================
169
167
 
170
- async def get_signals(
171
- self, params: dict[str, Any], context: ToolContext | None = None
172
- ) -> Any:
168
+ async def get_signals(self, params: dict[str, Any], context: ToolContext | None = None) -> Any:
173
169
  """Get available signals.
174
170
 
175
171
  Override this to provide signal catalog.
@@ -393,41 +393,31 @@ class ContentStandardsHandler(ADCPHandler):
393
393
  self, params: dict[str, Any], context: ToolContext | None = None
394
394
  ) -> NotImplementedResponse:
395
395
  """Not supported by Content Standards agents."""
396
- return not_supported(
397
- "list_creative_formats is not supported by Content Standards agents."
398
- )
396
+ return not_supported("list_creative_formats is not supported by Content Standards agents.")
399
397
 
400
- async def list_authorized_properties(
398
+ async def list_accounts(
401
399
  self, params: dict[str, Any], context: ToolContext | None = None
402
400
  ) -> NotImplementedResponse:
403
401
  """Not supported by Content Standards agents."""
404
- return not_supported(
405
- "list_authorized_properties is not supported by Content Standards agents."
406
- )
402
+ return not_supported("list_accounts is not supported by Content Standards agents.")
407
403
 
408
404
  async def sync_creatives(
409
405
  self, params: dict[str, Any], context: ToolContext | None = None
410
406
  ) -> NotImplementedResponse:
411
407
  """Not supported by Content Standards agents."""
412
- return not_supported(
413
- "sync_creatives is not supported by Content Standards agents."
414
- )
408
+ return not_supported("sync_creatives is not supported by Content Standards agents.")
415
409
 
416
410
  async def list_creatives(
417
411
  self, params: dict[str, Any], context: ToolContext | None = None
418
412
  ) -> NotImplementedResponse:
419
413
  """Not supported by Content Standards agents."""
420
- return not_supported(
421
- "list_creatives is not supported by Content Standards agents."
422
- )
414
+ return not_supported("list_creatives is not supported by Content Standards agents.")
423
415
 
424
416
  async def build_creative(
425
417
  self, params: dict[str, Any], context: ToolContext | None = None
426
418
  ) -> NotImplementedResponse:
427
419
  """Not supported by Content Standards agents."""
428
- return not_supported(
429
- "build_creative is not supported by Content Standards agents."
430
- )
420
+ return not_supported("build_creative is not supported by Content Standards agents.")
431
421
 
432
422
  async def create_media_buy(
433
423
  self, params: dict[str, Any], context: ToolContext | None = None
@@ -442,33 +432,25 @@ class ContentStandardsHandler(ADCPHandler):
442
432
  self, params: dict[str, Any], context: ToolContext | None = None
443
433
  ) -> NotImplementedResponse:
444
434
  """Not supported by Content Standards agents."""
445
- return not_supported(
446
- "update_media_buy is not supported by Content Standards agents."
447
- )
435
+ return not_supported("update_media_buy is not supported by Content Standards agents.")
448
436
 
449
437
  async def get_media_buy_delivery(
450
438
  self, params: dict[str, Any], context: ToolContext | None = None
451
439
  ) -> NotImplementedResponse:
452
440
  """Not supported by Content Standards agents."""
453
- return not_supported(
454
- "get_media_buy_delivery is not supported by Content Standards agents."
455
- )
441
+ return not_supported("get_media_buy_delivery is not supported by Content Standards agents.")
456
442
 
457
443
  async def get_signals(
458
444
  self, params: dict[str, Any], context: ToolContext | None = None
459
445
  ) -> NotImplementedResponse:
460
446
  """Not supported by Content Standards agents."""
461
- return not_supported(
462
- "get_signals is not supported by Content Standards agents."
463
- )
447
+ return not_supported("get_signals is not supported by Content Standards agents.")
464
448
 
465
449
  async def activate_signal(
466
450
  self, params: dict[str, Any], context: ToolContext | None = None
467
451
  ) -> NotImplementedResponse:
468
452
  """Not supported by Content Standards agents."""
469
- return not_supported(
470
- "activate_signal is not supported by Content Standards agents."
471
- )
453
+ return not_supported("activate_signal is not supported by Content Standards agents.")
472
454
 
473
455
  async def provide_performance_feedback(
474
456
  self, params: dict[str, Any], context: ToolContext | None = None
@@ -495,25 +477,19 @@ class ContentStandardsHandler(ADCPHandler):
495
477
  self, params: dict[str, Any], context: ToolContext | None = None
496
478
  ) -> NotImplementedResponse:
497
479
  """Not supported by Content Standards agents."""
498
- return not_supported(
499
- "si_initiate_session is not supported by Content Standards agents."
500
- )
480
+ return not_supported("si_initiate_session is not supported by Content Standards agents.")
501
481
 
502
482
  async def si_send_message(
503
483
  self, params: dict[str, Any], context: ToolContext | None = None
504
484
  ) -> NotImplementedResponse:
505
485
  """Not supported by Content Standards agents."""
506
- return not_supported(
507
- "si_send_message is not supported by Content Standards agents."
508
- )
486
+ return not_supported("si_send_message is not supported by Content Standards agents.")
509
487
 
510
488
  async def si_terminate_session(
511
489
  self, params: dict[str, Any], context: ToolContext | None = None
512
490
  ) -> NotImplementedResponse:
513
491
  """Not supported by Content Standards agents."""
514
- return not_supported(
515
- "si_terminate_session is not supported by Content Standards agents."
516
- )
492
+ return not_supported("si_terminate_session is not supported by Content Standards agents.")
517
493
 
518
494
  # ========================================================================
519
495
  # V3 Governance (Property Lists) - Not supported
@@ -532,30 +508,22 @@ class ContentStandardsHandler(ADCPHandler):
532
508
  self, params: dict[str, Any], context: ToolContext | None = None
533
509
  ) -> NotImplementedResponse:
534
510
  """Not supported by Content Standards agents."""
535
- return not_supported(
536
- "get_property_list is not supported by Content Standards agents."
537
- )
511
+ return not_supported("get_property_list is not supported by Content Standards agents.")
538
512
 
539
513
  async def list_property_lists(
540
514
  self, params: dict[str, Any], context: ToolContext | None = None
541
515
  ) -> NotImplementedResponse:
542
516
  """Not supported by Content Standards agents."""
543
- return not_supported(
544
- "list_property_lists is not supported by Content Standards agents."
545
- )
517
+ return not_supported("list_property_lists is not supported by Content Standards agents.")
546
518
 
547
519
  async def update_property_list(
548
520
  self, params: dict[str, Any], context: ToolContext | None = None
549
521
  ) -> NotImplementedResponse:
550
522
  """Not supported by Content Standards agents."""
551
- return not_supported(
552
- "update_property_list is not supported by Content Standards agents."
553
- )
523
+ return not_supported("update_property_list is not supported by Content Standards agents.")
554
524
 
555
525
  async def delete_property_list(
556
526
  self, params: dict[str, Any], context: ToolContext | None = None
557
527
  ) -> NotImplementedResponse:
558
528
  """Not supported by Content Standards agents."""
559
- return not_supported(
560
- "delete_property_list is not supported by Content Standards agents."
561
- )
529
+ return not_supported("delete_property_list is not supported by Content Standards agents.")
adcp/server/governance.py CHANGED
@@ -306,42 +306,31 @@ class GovernanceHandler(ADCPHandler):
306
306
  self, params: dict[str, Any], context: ToolContext | None = None
307
307
  ) -> NotImplementedResponse:
308
308
  """Not supported by Governance agents."""
309
- return not_supported(
310
- "list_creative_formats is not supported by Governance agents."
311
- )
309
+ return not_supported("list_creative_formats is not supported by Governance agents.")
312
310
 
313
- async def list_authorized_properties(
311
+ async def list_accounts(
314
312
  self, params: dict[str, Any], context: ToolContext | None = None
315
313
  ) -> NotImplementedResponse:
316
314
  """Not supported by Governance agents."""
317
- return not_supported(
318
- "list_authorized_properties is not supported by Governance agents. "
319
- "Use get_property_list with resolve=true instead."
320
- )
315
+ return not_supported("list_accounts is not supported by Governance agents.")
321
316
 
322
317
  async def sync_creatives(
323
318
  self, params: dict[str, Any], context: ToolContext | None = None
324
319
  ) -> NotImplementedResponse:
325
320
  """Not supported by Governance agents."""
326
- return not_supported(
327
- "sync_creatives is not supported by Governance agents."
328
- )
321
+ return not_supported("sync_creatives is not supported by Governance agents.")
329
322
 
330
323
  async def list_creatives(
331
324
  self, params: dict[str, Any], context: ToolContext | None = None
332
325
  ) -> NotImplementedResponse:
333
326
  """Not supported by Governance agents."""
334
- return not_supported(
335
- "list_creatives is not supported by Governance agents."
336
- )
327
+ return not_supported("list_creatives is not supported by Governance agents.")
337
328
 
338
329
  async def build_creative(
339
330
  self, params: dict[str, Any], context: ToolContext | None = None
340
331
  ) -> NotImplementedResponse:
341
332
  """Not supported by Governance agents."""
342
- return not_supported(
343
- "build_creative is not supported by Governance agents."
344
- )
333
+ return not_supported("build_creative is not supported by Governance agents.")
345
334
 
346
335
  async def create_media_buy(
347
336
  self, params: dict[str, Any], context: ToolContext | None = None
@@ -356,41 +345,31 @@ class GovernanceHandler(ADCPHandler):
356
345
  self, params: dict[str, Any], context: ToolContext | None = None
357
346
  ) -> NotImplementedResponse:
358
347
  """Not supported by Governance agents."""
359
- return not_supported(
360
- "update_media_buy is not supported by Governance agents."
361
- )
348
+ return not_supported("update_media_buy is not supported by Governance agents.")
362
349
 
363
350
  async def get_media_buy_delivery(
364
351
  self, params: dict[str, Any], context: ToolContext | None = None
365
352
  ) -> NotImplementedResponse:
366
353
  """Not supported by Governance agents."""
367
- return not_supported(
368
- "get_media_buy_delivery is not supported by Governance agents."
369
- )
354
+ return not_supported("get_media_buy_delivery is not supported by Governance agents.")
370
355
 
371
356
  async def get_signals(
372
357
  self, params: dict[str, Any], context: ToolContext | None = None
373
358
  ) -> NotImplementedResponse:
374
359
  """Not supported by Governance agents."""
375
- return not_supported(
376
- "get_signals is not supported by Governance agents."
377
- )
360
+ return not_supported("get_signals is not supported by Governance agents.")
378
361
 
379
362
  async def activate_signal(
380
363
  self, params: dict[str, Any], context: ToolContext | None = None
381
364
  ) -> NotImplementedResponse:
382
365
  """Not supported by Governance agents."""
383
- return not_supported(
384
- "activate_signal is not supported by Governance agents."
385
- )
366
+ return not_supported("activate_signal is not supported by Governance agents.")
386
367
 
387
368
  async def provide_performance_feedback(
388
369
  self, params: dict[str, Any], context: ToolContext | None = None
389
370
  ) -> NotImplementedResponse:
390
371
  """Not supported by Governance agents."""
391
- return not_supported(
392
- "provide_performance_feedback is not supported by Governance agents."
393
- )
372
+ return not_supported("provide_performance_feedback is not supported by Governance agents.")
394
373
 
395
374
  # ========================================================================
396
375
  # V3 Content Standards - Not supported
@@ -409,49 +388,37 @@ class GovernanceHandler(ADCPHandler):
409
388
  self, params: dict[str, Any], context: ToolContext | None = None
410
389
  ) -> NotImplementedResponse:
411
390
  """Not supported by Governance agents."""
412
- return not_supported(
413
- "get_content_standards is not supported by Governance agents."
414
- )
391
+ return not_supported("get_content_standards is not supported by Governance agents.")
415
392
 
416
393
  async def list_content_standards(
417
394
  self, params: dict[str, Any], context: ToolContext | None = None
418
395
  ) -> NotImplementedResponse:
419
396
  """Not supported by Governance agents."""
420
- return not_supported(
421
- "list_content_standards is not supported by Governance agents."
422
- )
397
+ return not_supported("list_content_standards is not supported by Governance agents.")
423
398
 
424
399
  async def update_content_standards(
425
400
  self, params: dict[str, Any], context: ToolContext | None = None
426
401
  ) -> NotImplementedResponse:
427
402
  """Not supported by Governance agents."""
428
- return not_supported(
429
- "update_content_standards is not supported by Governance agents."
430
- )
403
+ return not_supported("update_content_standards is not supported by Governance agents.")
431
404
 
432
405
  async def calibrate_content(
433
406
  self, params: dict[str, Any], context: ToolContext | None = None
434
407
  ) -> NotImplementedResponse:
435
408
  """Not supported by Governance agents."""
436
- return not_supported(
437
- "calibrate_content is not supported by Governance agents."
438
- )
409
+ return not_supported("calibrate_content is not supported by Governance agents.")
439
410
 
440
411
  async def validate_content_delivery(
441
412
  self, params: dict[str, Any], context: ToolContext | None = None
442
413
  ) -> NotImplementedResponse:
443
414
  """Not supported by Governance agents."""
444
- return not_supported(
445
- "validate_content_delivery is not supported by Governance agents."
446
- )
415
+ return not_supported("validate_content_delivery is not supported by Governance agents.")
447
416
 
448
417
  async def get_media_buy_artifacts(
449
418
  self, params: dict[str, Any], context: ToolContext | None = None
450
419
  ) -> NotImplementedResponse:
451
420
  """Not supported by Governance agents."""
452
- return not_supported(
453
- "get_media_buy_artifacts is not supported by Governance agents."
454
- )
421
+ return not_supported("get_media_buy_artifacts is not supported by Governance agents.")
455
422
 
456
423
  # ========================================================================
457
424
  # V3 Sponsored Intelligence - Not supported
@@ -470,22 +437,16 @@ class GovernanceHandler(ADCPHandler):
470
437
  self, params: dict[str, Any], context: ToolContext | None = None
471
438
  ) -> NotImplementedResponse:
472
439
  """Not supported by Governance agents."""
473
- return not_supported(
474
- "si_initiate_session is not supported by Governance agents."
475
- )
440
+ return not_supported("si_initiate_session is not supported by Governance agents.")
476
441
 
477
442
  async def si_send_message(
478
443
  self, params: dict[str, Any], context: ToolContext | None = None
479
444
  ) -> NotImplementedResponse:
480
445
  """Not supported by Governance agents."""
481
- return not_supported(
482
- "si_send_message is not supported by Governance agents."
483
- )
446
+ return not_supported("si_send_message is not supported by Governance agents.")
484
447
 
485
448
  async def si_terminate_session(
486
449
  self, params: dict[str, Any], context: ToolContext | None = None
487
450
  ) -> NotImplementedResponse:
488
451
  """Not supported by Governance agents."""
489
- return not_supported(
490
- "si_terminate_session is not supported by Governance agents."
491
- )
452
+ return not_supported("si_terminate_session is not supported by Governance agents.")
adcp/server/mcp_tools.py CHANGED
@@ -43,13 +43,17 @@ ADCP_TOOL_DEFINITIONS: list[dict[str, Any]] = [
43
43
  },
44
44
  },
45
45
  {
46
- "name": "list_authorized_properties",
47
- "description": "List properties authorized for ad placement",
46
+ "name": "list_accounts",
47
+ "description": "List billing accounts accessible to the authenticated agent",
48
48
  "inputSchema": {
49
49
  "type": "object",
50
50
  "properties": {
51
- "filters": {"type": "object"},
52
- "pagination": {"type": "object"},
51
+ "status": {
52
+ "type": "string",
53
+ "enum": ["active", "suspended", "closed", "all"],
54
+ "default": "active",
55
+ "description": "Filter accounts by status",
56
+ },
53
57
  },
54
58
  },
55
59
  },