adcp 2.18.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 (245) 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 +87 -1
  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 -18
  18. adcp/types/_generated.py +419 -44
  19. adcp/types/aliases.py +13 -20
  20. adcp/types/base.py +1 -1
  21. adcp/types/generated_poc/adagents.py +103 -6
  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 +1 -1
  41. adcp/types/generated_poc/core/assets/audio_asset.py +1 -1
  42. adcp/types/generated_poc/core/assets/css_asset.py +1 -1
  43. adcp/types/generated_poc/core/assets/daast_asset.py +1 -1
  44. adcp/types/generated_poc/core/assets/html_asset.py +1 -1
  45. adcp/types/generated_poc/core/assets/image_asset.py +1 -1
  46. adcp/types/generated_poc/core/assets/javascript_asset.py +1 -1
  47. adcp/types/generated_poc/core/assets/text_asset.py +1 -1
  48. adcp/types/generated_poc/core/assets/url_asset.py +1 -1
  49. adcp/types/generated_poc/core/assets/vast_asset.py +1 -1
  50. adcp/types/generated_poc/core/assets/video_asset.py +1 -1
  51. adcp/types/generated_poc/core/assets/webhook_asset.py +1 -1
  52. adcp/types/generated_poc/core/async_response_data.py +1 -1
  53. adcp/types/generated_poc/core/brand_manifest.py +68 -5
  54. adcp/types/generated_poc/core/brand_manifest_ref.py +1 -1
  55. adcp/types/generated_poc/core/context.py +1 -1
  56. adcp/types/generated_poc/core/creative_asset.py +8 -7
  57. adcp/types/generated_poc/core/creative_assignment.py +1 -1
  58. adcp/types/generated_poc/core/creative_filters.py +4 -14
  59. adcp/types/generated_poc/core/creative_manifest.py +1 -1
  60. adcp/types/generated_poc/core/creative_policy.py +1 -1
  61. adcp/types/generated_poc/core/delivery_metrics.py +1 -1
  62. adcp/types/generated_poc/core/deployment.py +1 -1
  63. adcp/types/generated_poc/core/destination.py +1 -1
  64. adcp/types/generated_poc/core/error.py +1 -1
  65. adcp/types/generated_poc/core/ext.py +1 -1
  66. adcp/types/generated_poc/core/format.py +6 -5
  67. adcp/types/generated_poc/core/format_id.py +1 -1
  68. adcp/types/generated_poc/core/frequency_cap.py +1 -1
  69. adcp/types/generated_poc/core/identifier.py +27 -0
  70. adcp/types/generated_poc/core/mcp_webhook_payload.py +1 -1
  71. adcp/types/generated_poc/core/measurement.py +1 -1
  72. adcp/types/generated_poc/core/media_buy.py +1 -1
  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 +1 -1
  76. adcp/types/generated_poc/core/performance_feedback.py +1 -1
  77. adcp/types/generated_poc/core/placement.py +1 -1
  78. adcp/types/generated_poc/core/pricing_option.py +8 -14
  79. adcp/types/generated_poc/core/product.py +1 -1
  80. adcp/types/generated_poc/core/product_allocation.py +48 -0
  81. adcp/types/generated_poc/core/product_filters.py +72 -7
  82. adcp/types/generated_poc/core/promoted_offerings.py +12 -21
  83. adcp/types/generated_poc/core/promoted_products.py +1 -1
  84. adcp/types/generated_poc/core/property.py +1 -1
  85. adcp/types/generated_poc/core/property_id.py +1 -1
  86. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  87. adcp/types/generated_poc/core/property_tag.py +1 -1
  88. adcp/types/generated_poc/core/proposal.py +64 -0
  89. adcp/types/generated_poc/core/protocol_envelope.py +1 -1
  90. adcp/types/generated_poc/core/publisher_property_selector.py +1 -1
  91. adcp/types/generated_poc/core/push_notification_config.py +1 -1
  92. adcp/types/generated_poc/core/reporting_capabilities.py +1 -1
  93. adcp/types/generated_poc/core/reporting_webhook.py +70 -0
  94. adcp/types/generated_poc/core/response.py +1 -1
  95. adcp/types/generated_poc/core/signal_filters.py +1 -1
  96. adcp/types/generated_poc/core/start_timing.py +4 -4
  97. adcp/types/generated_poc/core/sub_asset.py +1 -1
  98. adcp/types/generated_poc/core/targeting.py +55 -14
  99. adcp/types/generated_poc/creative/list_creative_formats_request.py +1 -1
  100. adcp/types/generated_poc/creative/list_creative_formats_response.py +1 -1
  101. adcp/types/generated_poc/creative/preview_creative_request.py +1 -1
  102. adcp/types/generated_poc/creative/preview_creative_response.py +3 -2
  103. adcp/types/generated_poc/creative/preview_render.py +1 -1
  104. adcp/types/generated_poc/enums/adcp_domain.py +3 -1
  105. adcp/types/generated_poc/enums/asset_content_type.py +1 -1
  106. adcp/types/generated_poc/enums/auth_scheme.py +1 -1
  107. adcp/types/generated_poc/enums/available_metric.py +1 -1
  108. adcp/types/generated_poc/enums/channels.py +18 -8
  109. adcp/types/generated_poc/enums/co_branding_requirement.py +1 -1
  110. adcp/types/generated_poc/enums/creative_action.py +1 -1
  111. adcp/types/generated_poc/enums/creative_agent_capability.py +1 -1
  112. adcp/types/generated_poc/enums/creative_sort_field.py +1 -1
  113. adcp/types/generated_poc/enums/creative_status.py +2 -1
  114. adcp/types/generated_poc/enums/daast_tracking_event.py +1 -1
  115. adcp/types/generated_poc/enums/daast_version.py +1 -1
  116. adcp/types/generated_poc/enums/delivery_type.py +1 -1
  117. adcp/types/generated_poc/enums/dimension_unit.py +1 -1
  118. adcp/types/generated_poc/enums/feed_format.py +1 -1
  119. adcp/types/generated_poc/enums/feedback_source.py +1 -1
  120. adcp/types/generated_poc/enums/format_category.py +1 -1
  121. adcp/types/generated_poc/enums/format_id_parameter.py +1 -1
  122. adcp/types/generated_poc/enums/frequency_cap_scope.py +1 -1
  123. adcp/types/generated_poc/enums/geo_level.py +14 -0
  124. adcp/types/generated_poc/enums/history_entry_type.py +1 -1
  125. adcp/types/generated_poc/enums/http_method.py +1 -1
  126. adcp/types/generated_poc/enums/identifier_types.py +1 -1
  127. adcp/types/generated_poc/enums/javascript_module_type.py +1 -1
  128. adcp/types/generated_poc/enums/landing_page_requirement.py +1 -1
  129. adcp/types/generated_poc/enums/markdown_flavor.py +1 -1
  130. adcp/types/generated_poc/enums/media_buy_status.py +1 -1
  131. adcp/types/generated_poc/enums/metric_type.py +1 -1
  132. adcp/types/generated_poc/enums/metro_system.py +15 -0
  133. adcp/types/generated_poc/enums/notification_type.py +1 -1
  134. adcp/types/generated_poc/enums/pacing.py +1 -1
  135. adcp/types/generated_poc/enums/postal_system.py +19 -0
  136. adcp/types/generated_poc/enums/preview_output_format.py +1 -1
  137. adcp/types/generated_poc/enums/pricing_model.py +1 -1
  138. adcp/types/generated_poc/enums/property_type.py +2 -1
  139. adcp/types/generated_poc/enums/publisher_identifier_types.py +1 -1
  140. adcp/types/generated_poc/enums/reporting_frequency.py +1 -1
  141. adcp/types/generated_poc/enums/signal_catalog_type.py +1 -1
  142. adcp/types/generated_poc/enums/sort_direction.py +1 -1
  143. adcp/types/generated_poc/enums/task_status.py +1 -1
  144. adcp/types/generated_poc/enums/task_type.py +7 -1
  145. adcp/types/generated_poc/enums/update_frequency.py +1 -1
  146. adcp/types/generated_poc/enums/url_asset_type.py +1 -1
  147. adcp/types/generated_poc/enums/validation_mode.py +1 -1
  148. adcp/types/generated_poc/enums/vast_tracking_event.py +1 -1
  149. adcp/types/generated_poc/enums/vast_version.py +1 -1
  150. adcp/types/generated_poc/enums/webhook_response_type.py +1 -1
  151. adcp/types/generated_poc/enums/webhook_security_method.py +1 -1
  152. adcp/types/generated_poc/extensions/__init__.py +3 -0
  153. adcp/types/generated_poc/extensions/extension_meta.py +58 -0
  154. adcp/types/generated_poc/media_buy/build_creative_request.py +1 -1
  155. adcp/types/generated_poc/media_buy/build_creative_response.py +1 -1
  156. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +1 -1
  157. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  158. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +1 -1
  159. adcp/types/generated_poc/media_buy/create_media_buy_request.py +54 -26
  160. adcp/types/generated_poc/media_buy/create_media_buy_response.py +1 -1
  161. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +1 -1
  162. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +1 -1
  163. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +1 -1
  164. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +1 -1
  165. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +1 -1
  166. adcp/types/generated_poc/media_buy/get_products_request.py +18 -3
  167. adcp/types/generated_poc/media_buy/get_products_response.py +14 -2
  168. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +1 -1
  169. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +2 -2
  170. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +1 -1
  171. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +1 -1
  172. adcp/types/generated_poc/media_buy/list_creatives_request.py +2 -2
  173. adcp/types/generated_poc/media_buy/list_creatives_response.py +7 -10
  174. adcp/types/generated_poc/media_buy/package_request.py +15 -6
  175. adcp/types/generated_poc/media_buy/package_update.py +119 -0
  176. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +1 -1
  177. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +1 -1
  178. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +1 -1
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +1 -1
  181. adcp/types/generated_poc/media_buy/sync_creatives_request.py +1 -1
  182. adcp/types/generated_poc/media_buy/sync_creatives_response.py +1 -1
  183. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +1 -1
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +1 -1
  186. adcp/types/generated_poc/media_buy/update_media_buy_request.py +20 -108
  187. adcp/types/generated_poc/media_buy/update_media_buy_response.py +1 -1
  188. adcp/types/generated_poc/pricing_options/cpc_option.py +35 -10
  189. adcp/types/generated_poc/pricing_options/cpcv_option.py +35 -10
  190. adcp/types/generated_poc/pricing_options/{cpm_auction_option.py → cpm_option.py} +23 -19
  191. adcp/types/generated_poc/pricing_options/cpp_option.py +39 -16
  192. adcp/types/generated_poc/pricing_options/cpv_option.py +37 -18
  193. adcp/types/generated_poc/pricing_options/flat_rate_option.py +45 -39
  194. adcp/types/generated_poc/pricing_options/{vcpm_auction_option.py → vcpm_option.py} +23 -14
  195. adcp/types/generated_poc/property/__init__.py +3 -0
  196. adcp/types/generated_poc/property/base_property_source.py +86 -0
  197. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  198. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  199. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  200. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  201. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  202. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  203. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  204. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  205. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  206. adcp/types/generated_poc/property/property_error.py +33 -0
  207. adcp/types/generated_poc/property/property_feature.py +22 -0
  208. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  209. adcp/types/generated_poc/property/property_list.py +62 -0
  210. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  211. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  212. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  213. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  214. adcp/types/generated_poc/protocol/__init__.py +3 -0
  215. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
  217. adcp/types/generated_poc/protocols/adcp_extension.py +18 -5
  218. adcp/types/generated_poc/signals/activate_signal_request.py +1 -1
  219. adcp/types/generated_poc/signals/activate_signal_response.py +1 -1
  220. adcp/types/generated_poc/signals/get_signals_request.py +1 -1
  221. adcp/types/generated_poc/signals/get_signals_response.py +1 -1
  222. adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
  223. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
  224. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
  225. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
  226. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
  227. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
  228. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
  229. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
  230. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
  231. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
  232. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
  233. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
  234. adcp/utils/format_assets.py +5 -5
  235. adcp/utils/preview_cache.py +2 -2
  236. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
  237. adcp-3.0.0.dist-info/RECORD +264 -0
  238. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
  239. adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
  240. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
  241. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
  242. adcp-2.18.0.dist-info/RECORD +0 -195
  243. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
  244. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
  245. {adcp-2.18.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/pricing_model.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/property_type.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -11,6 +11,7 @@ class PropertyType(Enum):
11
11
  website = 'website'
12
12
  mobile_app = 'mobile_app'
13
13
  ctv_app = 'ctv_app'
14
+ desktop_app = 'desktop_app'
14
15
  dooh = 'dooh'
15
16
  podcast = 'podcast'
16
17
  radio = 'radio'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/publisher_identifier_types.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/reporting_frequency.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/signal_catalog_type.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/sort_direction.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/task_status.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/task_type.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -13,3 +13,9 @@ class TaskType(Enum):
13
13
  sync_creatives = 'sync_creatives'
14
14
  activate_signal = 'activate_signal'
15
15
  get_signals = 'get_signals'
16
+ list_property_features = 'list_property_features'
17
+ create_property_list = 'create_property_list'
18
+ update_property_list = 'update_property_list'
19
+ get_property_list = 'get_property_list'
20
+ list_property_lists = 'list_property_lists'
21
+ delete_property_list = 'delete_property_list'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/update_frequency.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/url_asset_type.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/validation_mode.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/vast_tracking_event.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/vast_version.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/webhook_response_type.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/webhook_security_method.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2026-01-14T17:08:13+00:00
@@ -0,0 +1,58 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: extensions/extension_meta.json
3
+ # timestamp: 2026-01-26T11:59:53+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated, Any, Literal
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AnyUrl, Field
11
+
12
+
13
+ class AdcpExtensionFileSchema(AdCPBaseModel):
14
+ field_id: Annotated[
15
+ str,
16
+ Field(
17
+ alias='$id',
18
+ description='Extension ID following pattern /schemas/extensions/{namespace}.json',
19
+ pattern='^/schemas/extensions/[a-z][a-z0-9_]*\\.json$',
20
+ ),
21
+ ]
22
+ field_schema: Annotated[
23
+ Literal['http://json-schema.org/draft-07/schema#'], Field(alias='$schema')
24
+ ]
25
+ additionalProperties: Annotated[
26
+ Any | None,
27
+ Field(description='Whether additional properties are allowed in the extension data'),
28
+ ] = None
29
+ description: Annotated[str, Field(description='Description of what this extension provides')]
30
+ docs_url: Annotated[
31
+ AnyUrl | None, Field(description='URL to documentation for implementors of this extension')
32
+ ] = None
33
+ properties: Annotated[
34
+ dict[str, Any],
35
+ Field(description='Schema properties defining the structure of ext.{namespace} data'),
36
+ ]
37
+ required: Annotated[
38
+ list[str] | None, Field(description='Required properties within the extension data')
39
+ ] = None
40
+ title: Annotated[str, Field(description='Human-readable title for the extension')]
41
+ type: Annotated[
42
+ Literal['object'],
43
+ Field(description='Extensions must be objects (data within ext.{namespace})'),
44
+ ]
45
+ valid_from: Annotated[
46
+ str,
47
+ Field(
48
+ description="Minimum AdCP version this extension is compatible with (e.g., '2.5'). Extension will be included in all versioned schema builds >= this version.",
49
+ pattern='^\\d+\\.\\d+$',
50
+ ),
51
+ ]
52
+ valid_until: Annotated[
53
+ str | None,
54
+ Field(
55
+ description="Last AdCP version this extension is compatible with (e.g., '3.0'). Omit if extension is still valid for current and future versions.",
56
+ pattern='^\\d+\\.\\d+$',
57
+ ),
58
+ ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/build_creative_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/build_creative_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/create_media_buy_async_response_input_required.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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/create_media_buy_async_response_submitted.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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/create_media_buy_async_response_working.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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/create_media_buy_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
 
@@ -13,6 +13,7 @@ from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field
13
13
  from ..core import brand_manifest_ref
14
14
  from ..core import context as context_1
15
15
  from ..core import ext as ext_1
16
+ from ..core import reporting_webhook as reporting_webhook_1
16
17
  from ..core import start_timing
17
18
  from ..enums import auth_scheme
18
19
  from . import package_request
@@ -39,25 +40,17 @@ class Authentication(AdCPBaseModel):
39
40
  ]
40
41
 
41
42
 
42
- class ReportingFrequency(Enum):
43
+ class BatchFrequency(Enum):
43
44
  hourly = 'hourly'
44
45
  daily = 'daily'
45
- monthly = 'monthly'
46
46
 
47
47
 
48
- class RequestedMetric(Enum):
49
- impressions = 'impressions'
50
- spend = 'spend'
51
- clicks = 'clicks'
52
- ctr = 'ctr'
53
- video_completions = 'video_completions'
54
- completion_rate = 'completion_rate'
55
- conversions = 'conversions'
56
- viewability = 'viewability'
57
- engagement_rate = 'engagement_rate'
48
+ class DeliveryMode(Enum):
49
+ realtime = 'realtime'
50
+ batched = 'batched'
58
51
 
59
52
 
60
- class ReportingWebhook(AdCPBaseModel):
53
+ class ArtifactWebhook(AdCPBaseModel):
61
54
  model_config = ConfigDict(
62
55
  extra='allow',
63
56
  )
@@ -65,16 +58,24 @@ class ReportingWebhook(AdCPBaseModel):
65
58
  Authentication,
66
59
  Field(description='Authentication configuration for webhook delivery (A2A-compatible)'),
67
60
  ]
68
- reporting_frequency: Annotated[
69
- ReportingFrequency,
61
+ batch_frequency: Annotated[
62
+ BatchFrequency | None,
70
63
  Field(
71
- description='Frequency for automated reporting delivery. Must be supported by all products in the media buy.'
64
+ description="For batched delivery, how often to push artifacts. Required when delivery_mode is 'batched'."
65
+ ),
66
+ ] = None
67
+ delivery_mode: Annotated[
68
+ DeliveryMode,
69
+ Field(
70
+ description="How artifacts are delivered. 'realtime' pushes artifacts as impressions occur. 'batched' aggregates artifacts and pushes periodically (see batch_frequency)."
72
71
  ),
73
72
  ]
74
- requested_metrics: Annotated[
75
- list[RequestedMetric] | None,
73
+ sampling_rate: Annotated[
74
+ float | None,
76
75
  Field(
77
- description="Optional list of metrics to include in webhook notifications. If omitted, all available metrics are included. Must be subset of product's available_metrics."
76
+ description='Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0',
77
+ ge=0.0,
78
+ le=1.0,
78
79
  ),
79
80
  ] = None
80
81
  token: Annotated[
@@ -84,13 +85,27 @@ class ReportingWebhook(AdCPBaseModel):
84
85
  min_length=16,
85
86
  ),
86
87
  ] = None
87
- url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for reporting notifications')]
88
+ url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for artifact delivery')]
89
+
90
+
91
+ class TotalBudget(AdCPBaseModel):
92
+ model_config = ConfigDict(
93
+ extra='forbid',
94
+ )
95
+ amount: Annotated[float, Field(description='Total budget amount', ge=0.0)]
96
+ currency: Annotated[str, Field(description='ISO 4217 currency code')]
88
97
 
89
98
 
90
99
  class CreateMediaBuyRequest(AdCPBaseModel):
91
100
  model_config = ConfigDict(
92
101
  extra='allow',
93
102
  )
103
+ artifact_webhook: Annotated[
104
+ ArtifactWebhook | None,
105
+ Field(
106
+ description='Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation.'
107
+ ),
108
+ ] = None
94
109
  brand_manifest: Annotated[
95
110
  brand_manifest_ref.BrandManifestReference,
96
111
  Field(
@@ -104,13 +119,26 @@ class CreateMediaBuyRequest(AdCPBaseModel):
104
119
  ]
105
120
  ext: ext_1.ExtensionObject | None = None
106
121
  packages: Annotated[
107
- list[package_request.PackageRequest], Field(description='Array of package configurations')
108
- ]
122
+ list[package_request.PackageRequest] | None,
123
+ Field(
124
+ description="Array of package configurations. Required when not using proposal_id. When executing a proposal, this can be omitted and packages will be derived from the proposal's allocations."
125
+ ),
126
+ ] = None
109
127
  po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None
110
- reporting_webhook: Annotated[
111
- ReportingWebhook | None,
128
+ proposal_id: Annotated[
129
+ str | None,
112
130
  Field(
113
- description='Optional webhook configuration for automated reporting delivery. Combines push_notification_config structure with reporting-specific fields.'
131
+ description="ID of a proposal from get_products to execute. When provided with total_budget, the publisher converts the proposal's allocation percentages into packages automatically. Alternative to providing packages array."
114
132
  ),
115
133
  ] = None
134
+ reporting_webhook: Annotated[
135
+ reporting_webhook_1.ReportingWebhook | None,
136
+ Field(description='Optional webhook configuration for automated reporting delivery'),
137
+ ] = None
116
138
  start_time: start_timing.StartTiming
139
+ total_budget: Annotated[
140
+ TotalBudget | None,
141
+ Field(
142
+ description="Total budget for the media buy when executing a proposal. The publisher applies the proposal's allocation percentages to this amount to derive package budgets."
143
+ ),
144
+ ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/create_media_buy_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_media_buy_delivery_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_media_buy_delivery_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_products_async_response_input_required.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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_products_async_response_submitted.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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_products_async_response_working.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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_products_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
 
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
12
12
  from ..core import brand_manifest_ref
13
13
  from ..core import context as context_1
14
14
  from ..core import ext as ext_1
15
- from ..core import product_filters
15
+ from ..core import product_filters, property_list_ref
16
16
 
17
17
 
18
18
  class GetProductsRequest(AdCPBaseModel):
@@ -26,8 +26,23 @@ class GetProductsRequest(AdCPBaseModel):
26
26
  ),
27
27
  ] = None
28
28
  brief: Annotated[
29
- str | None, Field(description='Natural language description of campaign requirements')
29
+ str | None,
30
+ Field(
31
+ description="Natural language description of campaign requirements. When refining a proposal, can include instructions like 'focus more on German speakers' or 'increase mobile allocation'."
32
+ ),
30
33
  ] = None
31
34
  context: context_1.ContextObject | None = None
32
35
  ext: ext_1.ExtensionObject | None = None
33
36
  filters: product_filters.ProductFilters | None = None
37
+ property_list: Annotated[
38
+ property_list_ref.PropertyListReference | None,
39
+ Field(
40
+ description='[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list.'
41
+ ),
42
+ ] = None
43
+ proposal_id: Annotated[
44
+ str | None,
45
+ Field(
46
+ description='Optional proposal ID to refine. When provided with a brief, the publisher will use the brief as refinement instructions for the specified proposal and return an updated version.'
47
+ ),
48
+ ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_products_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
 
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
12
12
  from ..core import context as context_1
13
13
  from ..core import error
14
14
  from ..core import ext as ext_1
15
- from ..core import product
15
+ from ..core import product, proposal
16
16
 
17
17
 
18
18
  class GetProductsResponse(AdCPBaseModel):
@@ -26,3 +26,15 @@ class GetProductsResponse(AdCPBaseModel):
26
26
  ] = None
27
27
  ext: ext_1.ExtensionObject | None = None
28
28
  products: Annotated[list[product.Product], Field(description='Array of matching products')]
29
+ property_list_applied: Annotated[
30
+ bool | None,
31
+ Field(
32
+ description='[AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent.'
33
+ ),
34
+ ] = None
35
+ proposals: Annotated[
36
+ list[proposal.Proposal] | None,
37
+ Field(
38
+ description='Optional array of proposed media plans with budget allocations across products. Publishers include proposals when they can provide strategic guidance based on the brief. Proposals are actionable - buyers can refine them via subsequent get_products calls or execute them directly via create_media_buy.'
39
+ ),
40
+ ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_authorized_properties_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_authorized_properties_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
 
@@ -62,7 +62,7 @@ class ListAuthorizedPropertiesResponse(AdCPBaseModel):
62
62
  ),
63
63
  ] = None
64
64
  primary_channels: Annotated[
65
- list[channels.AdvertisingChannels] | None,
65
+ list[channels.MediaChannel] | None,
66
66
  Field(
67
67
  description='Primary advertising channels represented in this property portfolio. Helps buying agents quickly filter relevance.',
68
68
  min_length=1,
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_creative_formats_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_creative_formats_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
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_creatives_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
 
@@ -19,7 +19,7 @@ from ..enums import creative_sort_field, sort_direction
19
19
  class FieldModel(Enum):
20
20
  creative_id = 'creative_id'
21
21
  name = 'name'
22
- format = 'format'
22
+ format_ = 'format'
23
23
  status = 'status'
24
24
  created_date = 'created_date'
25
25
  updated_date = 'updated_date'
@@ -1,10 +1,9 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_creatives_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
 
7
- from enum import Enum
8
7
  from typing import Annotated
9
8
 
10
9
  from adcp.types.base import AdCPBaseModel
@@ -29,20 +28,15 @@ from ..core.assets import (
29
28
  from ..enums import creative_status, sort_direction
30
29
 
31
30
 
32
- class Status(Enum):
33
- active = 'active'
34
- paused = 'paused'
35
- ended = 'ended'
36
-
37
-
38
31
  class AssignedPackage(AdCPBaseModel):
39
32
  model_config = ConfigDict(
40
33
  extra='allow',
41
34
  )
42
35
  assigned_date: Annotated[AwareDatetime, Field(description='When this assignment was created')]
36
+ buyer_ref: Annotated[
37
+ str | None, Field(description="Buyer's reference identifier for this package")
38
+ ] = None
43
39
  package_id: Annotated[str, Field(description='Package identifier')]
44
- package_name: Annotated[str | None, Field(description='Human-readable package name')] = None
45
- status: Annotated[Status, Field(description='Status of this specific assignment')]
46
40
 
47
41
 
48
42
  class Assignments(AdCPBaseModel):
@@ -106,6 +100,9 @@ class StatusSummary(AdCPBaseModel):
106
100
  pending_review: Annotated[
107
101
  int | None, Field(description='Number of creatives pending review', ge=0)
108
102
  ] = None
103
+ processing: Annotated[
104
+ int | None, Field(description='Number of creatives being processed', ge=0)
105
+ ] = None
109
106
  rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
110
107
 
111
108