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
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/task_type.json
3
- # timestamp: 2026-01-25T21:17:54+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,14 +8,13 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class TaskType(Enum):
11
- create_media_buy = 'create_media_buy'
12
- update_media_buy = 'update_media_buy'
13
- sync_creatives = 'sync_creatives'
14
- activate_signal = 'activate_signal'
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'
11
+ create_media_buy = "create_media_buy"
12
+ update_media_buy = "update_media_buy"
13
+ sync_creatives = "sync_creatives"
14
+ activate_signal = "activate_signal"
15
+ get_signals = "get_signals"
16
+ create_property_list = "create_property_list"
17
+ update_property_list = "update_property_list"
18
+ get_property_list = "get_property_list"
19
+ list_property_lists = "list_property_lists"
20
+ delete_property_list = "delete_property_list"
@@ -8,7 +8,7 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class UpdateFrequency(Enum):
11
- realtime = 'realtime'
12
- hourly = 'hourly'
13
- daily = 'daily'
14
- weekly = 'weekly'
11
+ realtime = "realtime"
12
+ hourly = "hourly"
13
+ daily = "daily"
14
+ weekly = "weekly"
@@ -8,6 +8,6 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class UrlAssetType(Enum):
11
- clickthrough = 'clickthrough'
12
- tracker_pixel = 'tracker_pixel'
13
- tracker_script = 'tracker_script'
11
+ clickthrough = "clickthrough"
12
+ tracker_pixel = "tracker_pixel"
13
+ tracker_script = "tracker_script"
@@ -8,5 +8,5 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class ValidationMode(Enum):
11
- strict = 'strict'
12
- lenient = 'lenient'
11
+ strict = "strict"
12
+ lenient = "lenient"
@@ -8,19 +8,19 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class VastTrackingEvent(Enum):
11
- start = 'start'
12
- firstQuartile = 'firstQuartile'
13
- midpoint = 'midpoint'
14
- thirdQuartile = 'thirdQuartile'
15
- complete = 'complete'
16
- impression = 'impression'
17
- click = 'click'
18
- pause = 'pause'
19
- resume = 'resume'
20
- skip = 'skip'
21
- mute = 'mute'
22
- unmute = 'unmute'
23
- fullscreen = 'fullscreen'
24
- exitFullscreen = 'exitFullscreen'
25
- playerExpand = 'playerExpand'
26
- playerCollapse = 'playerCollapse'
11
+ start = "start"
12
+ firstQuartile = "firstQuartile"
13
+ midpoint = "midpoint"
14
+ thirdQuartile = "thirdQuartile"
15
+ complete = "complete"
16
+ impression = "impression"
17
+ click = "click"
18
+ pause = "pause"
19
+ resume = "resume"
20
+ skip = "skip"
21
+ mute = "mute"
22
+ unmute = "unmute"
23
+ fullscreen = "fullscreen"
24
+ exitFullscreen = "exitFullscreen"
25
+ playerExpand = "playerExpand"
26
+ playerCollapse = "playerCollapse"
@@ -8,8 +8,8 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class VastVersion(Enum):
11
- field_2_0 = '2.0'
12
- field_3_0 = '3.0'
13
- field_4_0 = '4.0'
14
- field_4_1 = '4.1'
15
- field_4_2 = '4.2'
11
+ field_2_0 = "2.0"
12
+ field_3_0 = "3.0"
13
+ field_4_0 = "4.0"
14
+ field_4_1 = "4.1"
15
+ field_4_2 = "4.2"
@@ -8,7 +8,7 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class WebhookResponseType(Enum):
11
- html = 'html'
12
- json = 'json'
13
- xml = 'xml'
14
- javascript = 'javascript'
11
+ html = "html"
12
+ json = "json"
13
+ xml = "xml"
14
+ javascript = "javascript"
@@ -8,6 +8,6 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class WebhookSecurityMethod(Enum):
11
- hmac_sha256 = 'hmac_sha256'
12
- api_key = 'api_key'
13
- none = 'none'
11
+ hmac_sha256 = "hmac_sha256"
12
+ api_key = "api_key"
13
+ none = "none"
@@ -14,45 +14,45 @@ class AdcpExtensionFileSchema(AdCPBaseModel):
14
14
  field_id: Annotated[
15
15
  str,
16
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$',
17
+ alias="$id",
18
+ description="Extension ID following pattern /schemas/extensions/{namespace}.json",
19
+ pattern="^/schemas/extensions/[a-z][a-z0-9_]*\\.json$",
20
20
  ),
21
21
  ]
22
22
  field_schema: Annotated[
23
- Literal['http://json-schema.org/draft-07/schema#'], Field(alias='$schema')
23
+ Literal["http://json-schema.org/draft-07/schema#"], Field(alias="$schema")
24
24
  ]
25
25
  additionalProperties: Annotated[
26
26
  Any | None,
27
- Field(description='Whether additional properties are allowed in the extension data'),
27
+ Field(description="Whether additional properties are allowed in the extension data"),
28
28
  ] = None
29
- description: Annotated[str, Field(description='Description of what this extension provides')]
29
+ description: Annotated[str, Field(description="Description of what this extension provides")]
30
30
  docs_url: Annotated[
31
- AnyUrl | None, Field(description='URL to documentation for implementors of this extension')
31
+ AnyUrl | None, Field(description="URL to documentation for implementors of this extension")
32
32
  ] = None
33
33
  properties: Annotated[
34
34
  dict[str, Any],
35
- Field(description='Schema properties defining the structure of ext.{namespace} data'),
35
+ Field(description="Schema properties defining the structure of ext.{namespace} data"),
36
36
  ]
37
37
  required: Annotated[
38
- list[str] | None, Field(description='Required properties within the extension data')
38
+ list[str] | None, Field(description="Required properties within the extension data")
39
39
  ] = None
40
- title: Annotated[str, Field(description='Human-readable title for the extension')]
40
+ title: Annotated[str, Field(description="Human-readable title for the extension")]
41
41
  type: Annotated[
42
- Literal['object'],
43
- Field(description='Extensions must be objects (data within ext.{namespace})'),
42
+ Literal["object"],
43
+ Field(description="Extensions must be objects (data within ext.{namespace})"),
44
44
  ]
45
45
  valid_from: Annotated[
46
46
  str,
47
47
  Field(
48
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+$',
49
+ pattern="^\\d+\\.\\d+$",
50
50
  ),
51
51
  ]
52
52
  valid_until: Annotated[
53
53
  str | None,
54
54
  Field(
55
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+$',
56
+ pattern="^\\d+\\.\\d+$",
57
57
  ),
58
58
  ] = None
@@ -17,25 +17,25 @@ from ..core import format_id
17
17
 
18
18
  class BuildCreativeRequest(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='allow',
20
+ extra="allow",
21
21
  )
22
22
  context: context_1.ContextObject | None = None
23
23
  creative_manifest: Annotated[
24
24
  creative_manifest_1.CreativeManifest | None,
25
25
  Field(
26
- description='Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets (e.g., promoted_offerings for generative formats). For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.'
26
+ description="Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets (e.g., promoted_offerings for generative formats). For transformation (e.g., resizing, reformatting), this is the complete creative to adapt."
27
27
  ),
28
28
  ] = None
29
29
  ext: ext_1.ExtensionObject | None = None
30
30
  message: Annotated[
31
31
  str | None,
32
32
  Field(
33
- description='Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative.'
33
+ description="Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative."
34
34
  ),
35
35
  ] = None
36
36
  target_format_id: Annotated[
37
37
  format_id.FormatId,
38
38
  Field(
39
- description='Format ID to generate. The format definition specifies required input assets and output structure.'
39
+ description="Format ID to generate. The format definition specifies required input assets and output structure."
40
40
  ),
41
41
  ]
@@ -17,13 +17,13 @@ from ..core import ext as ext_1
17
17
 
18
18
  class BuildCreativeResponse2(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='allow',
20
+ extra="allow",
21
21
  )
22
22
  context: context_1.ContextObject | None = None
23
23
  errors: Annotated[
24
24
  list[error.Error],
25
25
  Field(
26
- description='Array of errors explaining why creative generation failed', min_length=1
26
+ description="Array of errors explaining why creative generation failed", min_length=1
27
27
  ),
28
28
  ]
29
29
  ext: ext_1.ExtensionObject | None = None
@@ -31,12 +31,12 @@ class BuildCreativeResponse2(AdCPBaseModel):
31
31
 
32
32
  class BuildCreativeResponse1(AdCPBaseModel):
33
33
  model_config = ConfigDict(
34
- extra='allow',
34
+ extra="allow",
35
35
  )
36
36
  context: context_1.ContextObject | None = None
37
37
  creative_manifest: Annotated[
38
38
  creative_manifest_1.CreativeManifest,
39
- Field(description='The generated or transformed creative manifest'),
39
+ Field(description="The generated or transformed creative manifest"),
40
40
  ]
41
41
  ext: ext_1.ExtensionObject | None = None
42
42
 
@@ -45,7 +45,7 @@ class BuildCreativeResponse(RootModel[BuildCreativeResponse1 | BuildCreativeResp
45
45
  root: Annotated[
46
46
  BuildCreativeResponse1 | BuildCreativeResponse2,
47
47
  Field(
48
- description='Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.',
49
- title='Build Creative Response',
48
+ description="Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.",
49
+ title="Build Creative Response",
50
50
  ),
51
51
  ]
@@ -16,22 +16,22 @@ from ..core import ext as ext_1
16
16
 
17
17
 
18
18
  class Reason(Enum):
19
- APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
20
- BUDGET_EXCEEDS_LIMIT = 'BUDGET_EXCEEDS_LIMIT'
19
+ APPROVAL_REQUIRED = "APPROVAL_REQUIRED"
20
+ BUDGET_EXCEEDS_LIMIT = "BUDGET_EXCEEDS_LIMIT"
21
21
 
22
22
 
23
23
  class CreateMediaBuyInputRequired(AdCPBaseModel):
24
24
  model_config = ConfigDict(
25
- extra='allow',
25
+ extra="allow",
26
26
  )
27
27
  context: context_1.ContextObject | None = None
28
28
  errors: Annotated[
29
29
  list[error.Error] | None,
30
30
  Field(
31
- description='Optional validation errors or warnings for debugging purposes. Helps explain why input is required.'
31
+ description="Optional validation errors or warnings for debugging purposes. Helps explain why input is required."
32
32
  ),
33
33
  ] = None
34
34
  ext: ext_1.ExtensionObject | None = None
35
35
  reason: Annotated[
36
- Reason | None, Field(description='Reason code indicating why input is needed')
36
+ Reason | None, Field(description="Reason code indicating why input is needed")
37
37
  ] = None
@@ -13,7 +13,7 @@ from ..core import ext as ext_1
13
13
 
14
14
  class CreateMediaBuySubmitted(AdCPBaseModel):
15
15
  model_config = ConfigDict(
16
- extra='allow',
16
+ extra="allow",
17
17
  )
18
18
  context: context_1.ContextObject | None = None
19
19
  ext: ext_1.ExtensionObject | None = None
@@ -15,17 +15,17 @@ from ..core import ext as ext_1
15
15
 
16
16
  class CreateMediaBuyWorking(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='allow',
18
+ extra="allow",
19
19
  )
20
20
  context: context_1.ContextObject | None = None
21
21
  current_step: Annotated[
22
- str | None, Field(description='Current step or phase of the operation')
22
+ str | None, Field(description="Current step or phase of the operation")
23
23
  ] = None
24
24
  ext: ext_1.ExtensionObject | None = None
25
25
  percentage: Annotated[
26
- float | None, Field(description='Completion percentage (0-100)', ge=0.0, le=100.0)
26
+ float | None, Field(description="Completion percentage (0-100)", ge=0.0, le=100.0)
27
27
  ] = None
28
- step_number: Annotated[int | None, Field(description='Current step number', ge=1)] = None
28
+ step_number: Annotated[int | None, Field(description="Current step number", ge=1)] = None
29
29
  total_steps: Annotated[
30
- int | None, Field(description='Total number of steps in the operation', ge=1)
30
+ int | None, Field(description="Total number of steps in the operation", ge=1)
31
31
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/create_media_buy_request.json
3
- # timestamp: 2026-01-25T21:17:54+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -21,12 +21,12 @@ from . import package_request
21
21
 
22
22
  class Authentication(AdCPBaseModel):
23
23
  model_config = ConfigDict(
24
- extra='forbid',
24
+ extra="forbid",
25
25
  )
26
26
  credentials: Annotated[
27
27
  str,
28
28
  Field(
29
- description='Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.',
29
+ description="Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.",
30
30
  min_length=32,
31
31
  ),
32
32
  ]
@@ -41,22 +41,22 @@ class Authentication(AdCPBaseModel):
41
41
 
42
42
 
43
43
  class BatchFrequency(Enum):
44
- hourly = 'hourly'
45
- daily = 'daily'
44
+ hourly = "hourly"
45
+ daily = "daily"
46
46
 
47
47
 
48
48
  class DeliveryMode(Enum):
49
- realtime = 'realtime'
50
- batched = 'batched'
49
+ realtime = "realtime"
50
+ batched = "batched"
51
51
 
52
52
 
53
53
  class ArtifactWebhook(AdCPBaseModel):
54
54
  model_config = ConfigDict(
55
- extra='allow',
55
+ extra="allow",
56
56
  )
57
57
  authentication: Annotated[
58
58
  Authentication,
59
- Field(description='Authentication configuration for webhook delivery (A2A-compatible)'),
59
+ Field(description="Authentication configuration for webhook delivery (A2A-compatible)"),
60
60
  ]
61
61
  batch_frequency: Annotated[
62
62
  BatchFrequency | None,
@@ -73,7 +73,7 @@ class ArtifactWebhook(AdCPBaseModel):
73
73
  sampling_rate: Annotated[
74
74
  float | None,
75
75
  Field(
76
- description='Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0',
76
+ description="Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0",
77
77
  ge=0.0,
78
78
  le=1.0,
79
79
  ),
@@ -81,41 +81,47 @@ class ArtifactWebhook(AdCPBaseModel):
81
81
  token: Annotated[
82
82
  str | None,
83
83
  Field(
84
- description='Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.',
84
+ description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.",
85
85
  min_length=16,
86
86
  ),
87
87
  ] = None
88
- url: Annotated[AnyUrl, Field(description='Webhook endpoint URL for artifact delivery')]
88
+ url: Annotated[AnyUrl, Field(description="Webhook endpoint URL for artifact delivery")]
89
89
 
90
90
 
91
91
  class TotalBudget(AdCPBaseModel):
92
92
  model_config = ConfigDict(
93
- extra='forbid',
93
+ extra="forbid",
94
94
  )
95
- amount: Annotated[float, Field(description='Total budget amount', ge=0.0)]
96
- currency: Annotated[str, Field(description='ISO 4217 currency code')]
95
+ amount: Annotated[float, Field(description="Total budget amount", ge=0.0)]
96
+ currency: Annotated[str, Field(description="ISO 4217 currency code")]
97
97
 
98
98
 
99
99
  class CreateMediaBuyRequest(AdCPBaseModel):
100
100
  model_config = ConfigDict(
101
- extra='allow',
101
+ extra="allow",
102
102
  )
103
+ account_id: Annotated[
104
+ str | None,
105
+ Field(
106
+ description="Account to bill for this media buy. Optional if the agent has a single account or the seller can determine the account from context (brand + agent). Required if the agent has multiple accounts and the seller cannot route automatically."
107
+ ),
108
+ ] = None
103
109
  artifact_webhook: Annotated[
104
110
  ArtifactWebhook | None,
105
111
  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.'
112
+ 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
113
  ),
108
114
  ] = None
109
115
  brand_manifest: Annotated[
110
116
  brand_manifest_ref.BrandManifestReference,
111
117
  Field(
112
- description='Brand information manifest serving as the namespace and identity for this media buy. Provides brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest. Can be cached and reused across multiple requests.'
118
+ description="Brand information manifest serving as the namespace and identity for this media buy. Provides brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest. Can be cached and reused across multiple requests."
113
119
  ),
114
120
  ]
115
121
  buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")]
116
122
  context: context_1.ContextObject | None = None
117
123
  end_time: Annotated[
118
- AwareDatetime, Field(description='Campaign end date/time in ISO 8601 format')
124
+ AwareDatetime, Field(description="Campaign end date/time in ISO 8601 format")
119
125
  ]
120
126
  ext: ext_1.ExtensionObject | None = None
121
127
  packages: Annotated[
@@ -124,7 +130,7 @@ class CreateMediaBuyRequest(AdCPBaseModel):
124
130
  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
131
  ),
126
132
  ] = None
127
- po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None
133
+ po_number: Annotated[str | None, Field(description="Purchase order number for tracking")] = None
128
134
  proposal_id: Annotated[
129
135
  str | None,
130
136
  Field(
@@ -133,7 +139,7 @@ class CreateMediaBuyRequest(AdCPBaseModel):
133
139
  ] = None
134
140
  reporting_webhook: Annotated[
135
141
  reporting_webhook_1.ReportingWebhook | None,
136
- Field(description='Optional webhook configuration for automated reporting delivery'),
142
+ Field(description="Optional webhook configuration for automated reporting delivery"),
137
143
  ] = None
138
144
  start_time: start_timing.StartTiming
139
145
  total_budget: Annotated[
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/create_media_buy_response.json
3
- # timestamp: 2026-01-25T21:17:54+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,6 +9,7 @@ from typing import Annotated
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
+ from ..core import account as account_1
12
13
  from ..core import context as context_1
13
14
  from ..core import error
14
15
  from ..core import ext as ext_1
@@ -17,24 +18,30 @@ from ..core import package
17
18
 
18
19
  class CreateMediaBuyResponse2(AdCPBaseModel):
19
20
  model_config = ConfigDict(
20
- extra='allow',
21
+ extra="allow",
21
22
  )
22
23
  context: context_1.ContextObject | None = None
23
24
  errors: Annotated[
24
25
  list[error.Error],
25
- Field(description='Array of errors explaining why the operation failed', min_length=1),
26
+ Field(description="Array of errors explaining why the operation failed", min_length=1),
26
27
  ]
27
28
  ext: ext_1.ExtensionObject | None = None
28
29
 
29
30
 
30
31
  class CreateMediaBuyResponse1(AdCPBaseModel):
31
32
  model_config = ConfigDict(
32
- extra='allow',
33
+ extra="allow",
33
34
  )
35
+ account: Annotated[
36
+ account_1.Account | None,
37
+ Field(
38
+ description="Account billed for this media buy. Includes advertiser, billing proxy (if any), and rate card applied."
39
+ ),
40
+ ] = None
34
41
  buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")]
35
42
  context: context_1.ContextObject | None = None
36
43
  creative_deadline: Annotated[
37
- AwareDatetime | None, Field(description='ISO 8601 timestamp for creative upload deadline')
44
+ AwareDatetime | None, Field(description="ISO 8601 timestamp for creative upload deadline")
38
45
  ] = None
39
46
  ext: ext_1.ExtensionObject | None = None
40
47
  media_buy_id: Annotated[
@@ -42,7 +49,7 @@ class CreateMediaBuyResponse1(AdCPBaseModel):
42
49
  ]
43
50
  packages: Annotated[
44
51
  list[package.Package],
45
- Field(description='Array of created packages with complete state information'),
52
+ Field(description="Array of created packages with complete state information"),
46
53
  ]
47
54
 
48
55
 
@@ -50,7 +57,7 @@ class CreateMediaBuyResponse(RootModel[CreateMediaBuyResponse1 | CreateMediaBuyR
50
57
  root: Annotated[
51
58
  CreateMediaBuyResponse1 | CreateMediaBuyResponse2,
52
59
  Field(
53
- description='Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.',
54
- title='Create Media Buy Response',
60
+ description="Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.",
61
+ title="Create Media Buy Response",
55
62
  ),
56
63
  ]
@@ -16,32 +16,32 @@ from ..enums import media_buy_status
16
16
 
17
17
  class GetMediaBuyDeliveryRequest(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='allow',
19
+ extra="allow",
20
20
  )
21
21
  buyer_refs: Annotated[
22
- list[str] | None, Field(description='Array of buyer reference IDs to get delivery data for')
22
+ list[str] | None, Field(description="Array of buyer reference IDs to get delivery data for")
23
23
  ] = None
24
24
  context: context_1.ContextObject | None = None
25
25
  end_date: Annotated[
26
26
  str | None,
27
27
  Field(
28
- description='End date for reporting period (YYYY-MM-DD)',
29
- pattern='^\\d{4}-\\d{2}-\\d{2}$',
28
+ description="End date for reporting period (YYYY-MM-DD)",
29
+ pattern="^\\d{4}-\\d{2}-\\d{2}$",
30
30
  ),
31
31
  ] = None
32
32
  ext: ext_1.ExtensionObject | None = None
33
33
  media_buy_ids: Annotated[
34
34
  list[str] | None,
35
- Field(description='Array of publisher media buy IDs to get delivery data for'),
35
+ Field(description="Array of publisher media buy IDs to get delivery data for"),
36
36
  ] = None
37
37
  start_date: Annotated[
38
38
  str | None,
39
39
  Field(
40
- description='Start date for reporting period (YYYY-MM-DD)',
41
- pattern='^\\d{4}-\\d{2}-\\d{2}$',
40
+ description="Start date for reporting period (YYYY-MM-DD)",
41
+ pattern="^\\d{4}-\\d{2}-\\d{2}$",
42
42
  ),
43
43
  ] = None
44
44
  status_filter: Annotated[
45
45
  media_buy_status.MediaBuyStatus | list[media_buy_status.MediaBuyStatus] | None,
46
- Field(description='Filter by status. Can be a single status or array of statuses'),
46
+ Field(description="Filter by status. Can be a single status or array of statuses"),
47
47
  ] = None