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: media_buy/sync_creatives_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
 
@@ -18,41 +18,47 @@ from ..enums import validation_mode as validation_mode_1
18
18
 
19
19
  class SyncCreativesRequest(AdCPBaseModel):
20
20
  model_config = ConfigDict(
21
- extra='allow',
21
+ extra="allow",
22
22
  )
23
+ account_id: Annotated[
24
+ str | None,
25
+ Field(
26
+ description="Account that owns these creatives. Optional if the agent has a single account or the seller can determine the account from context. Required if the agent has multiple accounts and the seller cannot route automatically."
27
+ ),
28
+ ] = None
23
29
  assignments: Annotated[
24
30
  dict[str, list[str]] | None,
25
- Field(description='Optional bulk assignment of creatives to packages'),
31
+ Field(description="Optional bulk assignment of creatives to packages"),
26
32
  ] = None
27
33
  context: context_1.ContextObject | None = None
28
34
  creative_ids: Annotated[
29
35
  list[str] | None,
30
36
  Field(
31
- description='Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.',
37
+ description="Optional filter to limit sync scope to specific creative IDs. When provided, only these creatives will be created/updated. Other creatives in the library are unaffected. Useful for partial updates and error recovery.",
32
38
  max_length=100,
33
39
  ),
34
40
  ] = None
35
41
  creatives: Annotated[
36
42
  list[creative_asset.CreativeAsset],
37
- Field(description='Array of creative assets to sync (create or update)', max_length=100),
43
+ Field(description="Array of creative assets to sync (create or update)", max_length=100),
38
44
  ]
39
45
  delete_missing: Annotated[
40
46
  bool | None,
41
47
  Field(
42
- description='When true, creatives not included in this sync will be archived. Use with caution for full library replacement.'
48
+ description="When true, creatives not included in this sync will be archived. Use with caution for full library replacement."
43
49
  ),
44
50
  ] = False
45
51
  dry_run: Annotated[
46
52
  bool | None,
47
53
  Field(
48
- description='When true, preview changes without applying them. Returns what would be created/updated/deleted.'
54
+ description="When true, preview changes without applying them. Returns what would be created/updated/deleted."
49
55
  ),
50
56
  ] = False
51
57
  ext: ext_1.ExtensionObject | None = None
52
58
  push_notification_config: Annotated[
53
59
  push_notification_config_1.PushNotificationConfig | None,
54
60
  Field(
55
- description='Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL).'
61
+ description="Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL)."
56
62
  ),
57
63
  ] = None
58
64
  validation_mode: Annotated[
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/sync_creatives_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,36 +9,55 @@ from typing import Annotated
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AnyUrl, 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
15
16
  from ..enums import creative_action
16
17
 
17
18
 
19
+ class SyncCreativesResponse2(AdCPBaseModel):
20
+ model_config = ConfigDict(
21
+ extra="allow",
22
+ )
23
+ context: context_1.ContextObject | None = None
24
+ errors: Annotated[
25
+ list[error.Error],
26
+ Field(
27
+ description="Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)",
28
+ min_length=1,
29
+ ),
30
+ ]
31
+ ext: ext_1.ExtensionObject | None = None
32
+
33
+
18
34
  class Creative(AdCPBaseModel):
19
35
  model_config = ConfigDict(
20
- extra='allow',
36
+ extra="allow",
21
37
  )
38
+ account: Annotated[
39
+ account_1.Account | None, Field(description="Account that owns this creative")
40
+ ] = None
22
41
  action: Annotated[
23
- creative_action.CreativeAction, Field(description='Action taken for this creative')
42
+ creative_action.CreativeAction, Field(description="Action taken for this creative")
24
43
  ]
25
44
  assigned_to: Annotated[
26
45
  list[str] | None,
27
46
  Field(
28
- description='Package IDs this creative was successfully assigned to (only present when assignments were requested)'
47
+ description="Package IDs this creative was successfully assigned to (only present when assignments were requested)"
29
48
  ),
30
49
  ] = None
31
50
  assignment_errors: Annotated[
32
51
  dict[str, str] | None,
33
52
  Field(
34
- description='Assignment errors by package ID (only present when assignment failures occurred)'
53
+ description="Assignment errors by package ID (only present when assignment failures occurred)"
35
54
  ),
36
55
  ] = None
37
56
  changes: Annotated[
38
57
  list[str] | None,
39
58
  Field(description="Field names that were modified (only present when action='updated')"),
40
59
  ] = None
41
- creative_id: Annotated[str, Field(description='Creative ID from the request')]
60
+ creative_id: Annotated[str, Field(description="Creative ID from the request")]
42
61
  errors: Annotated[
43
62
  list[str] | None,
44
63
  Field(description="Validation or processing errors (only present when action='failed')"),
@@ -46,26 +65,26 @@ class Creative(AdCPBaseModel):
46
65
  expires_at: Annotated[
47
66
  AwareDatetime | None,
48
67
  Field(
49
- description='ISO 8601 timestamp when preview link expires (only present when preview_url exists)'
68
+ description="ISO 8601 timestamp when preview link expires (only present when preview_url exists)"
50
69
  ),
51
70
  ] = None
52
71
  platform_id: Annotated[
53
- str | None, Field(description='Platform-specific ID assigned to the creative')
72
+ str | None, Field(description="Platform-specific ID assigned to the creative")
54
73
  ] = None
55
74
  preview_url: Annotated[
56
75
  AnyUrl | None,
57
76
  Field(
58
- description='Preview URL for generative creatives (only present for generative formats)'
77
+ description="Preview URL for generative creatives (only present for generative formats)"
59
78
  ),
60
79
  ] = None
61
80
  warnings: Annotated[
62
- list[str] | None, Field(description='Non-fatal warnings about this creative')
81
+ list[str] | None, Field(description="Non-fatal warnings about this creative")
63
82
  ] = None
64
83
 
65
84
 
66
85
  class SyncCreativesResponse1(AdCPBaseModel):
67
86
  model_config = ConfigDict(
68
- extra='allow',
87
+ extra="allow",
69
88
  )
70
89
  context: context_1.ContextObject | None = None
71
90
  creatives: Annotated[
@@ -75,31 +94,16 @@ class SyncCreativesResponse1(AdCPBaseModel):
75
94
  ),
76
95
  ]
77
96
  dry_run: Annotated[
78
- bool | None, Field(description='Whether this was a dry run (no actual changes made)')
97
+ bool | None, Field(description="Whether this was a dry run (no actual changes made)")
79
98
  ] = None
80
99
  ext: ext_1.ExtensionObject | None = None
81
100
 
82
101
 
83
- class SyncCreativesResponse2(AdCPBaseModel):
84
- model_config = ConfigDict(
85
- extra='allow',
86
- )
87
- context: context_1.ContextObject | None = None
88
- errors: Annotated[
89
- list[error.Error],
90
- Field(
91
- description='Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)',
92
- min_length=1,
93
- ),
94
- ]
95
- ext: ext_1.ExtensionObject | None = None
96
-
97
-
98
102
  class SyncCreativesResponse(RootModel[SyncCreativesResponse1 | SyncCreativesResponse2]):
99
103
  root: Annotated[
100
104
  SyncCreativesResponse1 | SyncCreativesResponse2,
101
105
  Field(
102
- description='Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.',
103
- title='Sync Creatives Response',
106
+ description="Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.",
107
+ title="Sync Creatives Response",
104
108
  ),
105
109
  ]
@@ -15,16 +15,16 @@ from ..core import ext as ext_1
15
15
 
16
16
 
17
17
  class Reason(Enum):
18
- APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
19
- CHANGE_CONFIRMATION = 'CHANGE_CONFIRMATION'
18
+ APPROVAL_REQUIRED = "APPROVAL_REQUIRED"
19
+ CHANGE_CONFIRMATION = "CHANGE_CONFIRMATION"
20
20
 
21
21
 
22
22
  class UpdateMediaBuyInputRequired(AdCPBaseModel):
23
23
  model_config = ConfigDict(
24
- extra='allow',
24
+ extra="allow",
25
25
  )
26
26
  context: context_1.ContextObject | None = None
27
27
  ext: ext_1.ExtensionObject | None = None
28
28
  reason: Annotated[
29
- Reason | None, Field(description='Reason code indicating why input is needed')
29
+ Reason | None, Field(description="Reason code indicating why input is needed")
30
30
  ] = None
@@ -13,7 +13,7 @@ from ..core import ext as ext_1
13
13
 
14
14
  class UpdateMediaBuySubmitted(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 UpdateMediaBuyWorking(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
@@ -19,34 +19,34 @@ from . import package_update
19
19
 
20
20
  class UpdateMediaBuyRequest1(AdCPBaseModel):
21
21
  model_config = ConfigDict(
22
- extra='allow',
22
+ extra="allow",
23
23
  )
24
24
  buyer_ref: Annotated[
25
25
  str | None, Field(description="Buyer's reference for the media buy to update")
26
26
  ] = None
27
27
  context: context_1.ContextObject | None = None
28
28
  end_time: Annotated[
29
- AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
29
+ AwareDatetime | None, Field(description="New end date/time in ISO 8601 format")
30
30
  ] = None
31
31
  ext: ext_1.ExtensionObject | None = None
32
32
  media_buy_id: Annotated[str, Field(description="Publisher's ID of the media buy to update")]
33
33
  packages: Annotated[
34
- list[package_update.PackageUpdate] | None, Field(description='Package-specific updates')
34
+ list[package_update.PackageUpdate] | None, Field(description="Package-specific updates")
35
35
  ] = None
36
36
  paused: Annotated[
37
37
  bool | None,
38
- Field(description='Pause/resume the entire media buy (true = paused, false = active)'),
38
+ Field(description="Pause/resume the entire media buy (true = paused, false = active)"),
39
39
  ] = None
40
40
  push_notification_config: Annotated[
41
41
  push_notification_config_1.PushNotificationConfig | None,
42
42
  Field(
43
- description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting.'
43
+ description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting."
44
44
  ),
45
45
  ] = None
46
46
  reporting_webhook: Annotated[
47
47
  reporting_webhook_1.ReportingWebhook | None,
48
48
  Field(
49
- description='Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy.'
49
+ description="Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy."
50
50
  ),
51
51
  ] = None
52
52
  start_time: start_timing.StartTiming | None = None
@@ -54,34 +54,34 @@ class UpdateMediaBuyRequest1(AdCPBaseModel):
54
54
 
55
55
  class UpdateMediaBuyRequest2(AdCPBaseModel):
56
56
  model_config = ConfigDict(
57
- extra='allow',
57
+ extra="allow",
58
58
  )
59
59
  buyer_ref: Annotated[str, Field(description="Buyer's reference for the media buy to update")]
60
60
  context: context_1.ContextObject | None = None
61
61
  end_time: Annotated[
62
- AwareDatetime | None, Field(description='New end date/time in ISO 8601 format')
62
+ AwareDatetime | None, Field(description="New end date/time in ISO 8601 format")
63
63
  ] = None
64
64
  ext: ext_1.ExtensionObject | None = None
65
65
  media_buy_id: Annotated[
66
66
  str | None, Field(description="Publisher's ID of the media buy to update")
67
67
  ] = None
68
68
  packages: Annotated[
69
- list[package_update.PackageUpdate] | None, Field(description='Package-specific updates')
69
+ list[package_update.PackageUpdate] | None, Field(description="Package-specific updates")
70
70
  ] = None
71
71
  paused: Annotated[
72
72
  bool | None,
73
- Field(description='Pause/resume the entire media buy (true = paused, false = active)'),
73
+ Field(description="Pause/resume the entire media buy (true = paused, false = active)"),
74
74
  ] = None
75
75
  push_notification_config: Annotated[
76
76
  push_notification_config_1.PushNotificationConfig | None,
77
77
  Field(
78
- description='Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting.'
78
+ description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time. This is separate from reporting_webhook which configures ongoing campaign reporting."
79
79
  ),
80
80
  ] = None
81
81
  reporting_webhook: Annotated[
82
82
  reporting_webhook_1.ReportingWebhook | None,
83
83
  Field(
84
- description='Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy.'
84
+ description="Optional webhook configuration for automated reporting delivery. Updates the reporting configuration for this media buy."
85
85
  ),
86
86
  ] = None
87
87
  start_time: start_timing.StartTiming | None = None
@@ -91,7 +91,7 @@ class UpdateMediaBuyRequest(RootModel[UpdateMediaBuyRequest1 | UpdateMediaBuyReq
91
91
  root: Annotated[
92
92
  UpdateMediaBuyRequest1 | UpdateMediaBuyRequest2,
93
93
  Field(
94
- description='Request parameters for updating campaign and package settings',
95
- title='Update Media Buy Request',
94
+ description="Request parameters for updating campaign and package settings",
95
+ title="Update Media Buy Request",
96
96
  ),
97
97
  ]
@@ -17,30 +17,30 @@ from ..core import package
17
17
 
18
18
  class UpdateMediaBuyResponse2(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
- Field(description='Array of errors explaining why the operation failed', min_length=1),
25
+ Field(description="Array of errors explaining why the operation failed", min_length=1),
26
26
  ]
27
27
  ext: ext_1.ExtensionObject | None = None
28
28
 
29
29
 
30
30
  class UpdateMediaBuyResponse1(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra='allow',
32
+ extra="allow",
33
33
  )
34
34
  affected_packages: Annotated[
35
35
  list[package.Package] | None,
36
- Field(description='Array of packages that were modified with complete state information'),
36
+ Field(description="Array of packages that were modified with complete state information"),
37
37
  ] = None
38
38
  buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for the media buy")]
39
39
  context: context_1.ContextObject | None = None
40
40
  ext: ext_1.ExtensionObject | None = None
41
41
  implementation_date: Annotated[
42
42
  AwareDatetime | None,
43
- Field(description='ISO 8601 timestamp when changes take effect (null if pending approval)'),
43
+ Field(description="ISO 8601 timestamp when changes take effect (null if pending approval)"),
44
44
  ] = None
45
45
  media_buy_id: Annotated[str, Field(description="Publisher's identifier for the media buy")]
46
46
 
@@ -49,7 +49,7 @@ class UpdateMediaBuyResponse(RootModel[UpdateMediaBuyResponse1 | UpdateMediaBuyR
49
49
  root: Annotated[
50
50
  UpdateMediaBuyResponse1 | UpdateMediaBuyResponse2,
51
51
  Field(
52
- description='Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.',
53
- title='Update Media Buy Response',
52
+ description="Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.",
53
+ title="Update Media Buy Response",
54
54
  ),
55
55
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing_options/cpc_option.json
3
- # timestamp: 2026-01-26T11:40:01+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,60 +9,47 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
-
13
- class PriceGuidance(AdCPBaseModel):
14
- p25: Annotated[
15
- float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
16
- ] = None
17
- p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
18
- p75: Annotated[
19
- float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
20
- ] = None
21
- p90: Annotated[
22
- float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
23
- ] = None
12
+ from . import price_guidance as price_guidance_1
24
13
 
25
14
 
26
15
  class CpcPricingOption(AdCPBaseModel):
27
16
  model_config = ConfigDict(
28
- extra='allow',
17
+ extra="allow",
29
18
  )
30
19
  currency: Annotated[
31
20
  str,
32
21
  Field(
33
- description='ISO 4217 currency code',
34
- examples=['USD', 'EUR', 'GBP', 'JPY'],
35
- pattern='^[A-Z]{3}$',
22
+ description="ISO 4217 currency code",
23
+ examples=["USD", "EUR", "GBP", "JPY"],
24
+ pattern="^[A-Z]{3}$",
36
25
  ),
37
26
  ]
38
27
  fixed_price: Annotated[
39
28
  float | None,
40
29
  Field(
41
- description='Fixed price per click. If present, this is fixed pricing. If absent, auction-based.',
30
+ description="Fixed price per click. If present, this is fixed pricing. If absent, auction-based.",
42
31
  ge=0.0,
43
32
  ),
44
33
  ] = None
45
34
  floor_price: Annotated[
46
35
  float | None,
47
36
  Field(
48
- description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
37
+ description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.",
49
38
  ge=0.0,
50
39
  ),
51
40
  ] = None
52
41
  min_spend_per_package: Annotated[
53
42
  float | None,
54
43
  Field(
55
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
44
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
56
45
  ge=0.0,
57
46
  ),
58
47
  ] = None
59
48
  price_guidance: Annotated[
60
- PriceGuidance | None,
61
- Field(
62
- description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
63
- ),
49
+ price_guidance_1.PriceGuidance | None,
50
+ Field(description="Optional pricing guidance for auction-based bidding"),
64
51
  ] = None
65
- pricing_model: Annotated[Literal['cpc'], Field(description='Cost per click')]
52
+ pricing_model: Annotated[Literal["cpc"], Field(description="Cost per click")]
66
53
  pricing_option_id: Annotated[
67
- str, Field(description='Unique identifier for this pricing option within the product')
54
+ str, Field(description="Unique identifier for this pricing option within the product")
68
55
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing_options/cpcv_option.json
3
- # timestamp: 2026-01-26T11:40:01+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,62 +9,49 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
-
13
- class PriceGuidance(AdCPBaseModel):
14
- p25: Annotated[
15
- float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
16
- ] = None
17
- p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
18
- p75: Annotated[
19
- float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
20
- ] = None
21
- p90: Annotated[
22
- float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
23
- ] = None
12
+ from . import price_guidance as price_guidance_1
24
13
 
25
14
 
26
15
  class CpcvPricingOption(AdCPBaseModel):
27
16
  model_config = ConfigDict(
28
- extra='allow',
17
+ extra="allow",
29
18
  )
30
19
  currency: Annotated[
31
20
  str,
32
21
  Field(
33
- description='ISO 4217 currency code',
34
- examples=['USD', 'EUR', 'GBP', 'JPY'],
35
- pattern='^[A-Z]{3}$',
22
+ description="ISO 4217 currency code",
23
+ examples=["USD", "EUR", "GBP", "JPY"],
24
+ pattern="^[A-Z]{3}$",
36
25
  ),
37
26
  ]
38
27
  fixed_price: Annotated[
39
28
  float | None,
40
29
  Field(
41
- description='Fixed price per completed view. If present, this is fixed pricing. If absent, auction-based.',
30
+ description="Fixed price per completed view. If present, this is fixed pricing. If absent, auction-based.",
42
31
  ge=0.0,
43
32
  ),
44
33
  ] = None
45
34
  floor_price: Annotated[
46
35
  float | None,
47
36
  Field(
48
- description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
37
+ description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.",
49
38
  ge=0.0,
50
39
  ),
51
40
  ] = None
52
41
  min_spend_per_package: Annotated[
53
42
  float | None,
54
43
  Field(
55
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
44
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
56
45
  ge=0.0,
57
46
  ),
58
47
  ] = None
59
48
  price_guidance: Annotated[
60
- PriceGuidance | None,
61
- Field(
62
- description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
63
- ),
49
+ price_guidance_1.PriceGuidance | None,
50
+ Field(description="Optional pricing guidance for auction-based bidding"),
64
51
  ] = None
65
52
  pricing_model: Annotated[
66
- Literal['cpcv'], Field(description='Cost per completed view (100% completion)')
53
+ Literal["cpcv"], Field(description="Cost per completed view (100% completion)")
67
54
  ]
68
55
  pricing_option_id: Annotated[
69
- str, Field(description='Unique identifier for this pricing option within the product')
56
+ str, Field(description="Unique identifier for this pricing option within the product")
70
57
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing_options/cpm_option.json
3
- # timestamp: 2026-01-26T11:40:01+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,54 +9,47 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
-
13
- class PriceGuidance(AdCPBaseModel):
14
- p25: Annotated[float | None, Field(description='25th percentile winning price', ge=0.0)] = None
15
- p50: Annotated[float | None, Field(description='Median winning price', ge=0.0)] = None
16
- p75: Annotated[float | None, Field(description='75th percentile winning price', ge=0.0)] = None
17
- p90: Annotated[float | None, Field(description='90th percentile winning price', ge=0.0)] = None
12
+ from . import price_guidance as price_guidance_1
18
13
 
19
14
 
20
15
  class CpmPricingOption(AdCPBaseModel):
21
16
  model_config = ConfigDict(
22
- extra='allow',
17
+ extra="allow",
23
18
  )
24
19
  currency: Annotated[
25
20
  str,
26
21
  Field(
27
- description='ISO 4217 currency code',
28
- examples=['USD', 'EUR', 'GBP', 'JPY'],
29
- pattern='^[A-Z]{3}$',
22
+ description="ISO 4217 currency code",
23
+ examples=["USD", "EUR", "GBP", "JPY"],
24
+ pattern="^[A-Z]{3}$",
30
25
  ),
31
26
  ]
32
27
  fixed_price: Annotated[
33
28
  float | None,
34
29
  Field(
35
- description='Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.',
30
+ description="Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.",
36
31
  ge=0.0,
37
32
  ),
38
33
  ] = None
39
34
  floor_price: Annotated[
40
35
  float | None,
41
36
  Field(
42
- description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
37
+ description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.",
43
38
  ge=0.0,
44
39
  ),
45
40
  ] = None
46
41
  min_spend_per_package: Annotated[
47
42
  float | None,
48
43
  Field(
49
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
44
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
50
45
  ge=0.0,
51
46
  ),
52
47
  ] = None
53
48
  price_guidance: Annotated[
54
- PriceGuidance | None,
55
- Field(
56
- description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
57
- ),
49
+ price_guidance_1.PriceGuidance | None,
50
+ Field(description="Optional pricing guidance for auction-based bidding"),
58
51
  ] = None
59
- pricing_model: Annotated[Literal['cpm'], Field(description='Cost per 1,000 impressions')]
52
+ pricing_model: Annotated[Literal["cpm"], Field(description="Cost per 1,000 impressions")]
60
53
  pricing_option_id: Annotated[
61
- str, Field(description='Unique identifier for this pricing option within the product')
54
+ str, Field(description="Unique identifier for this pricing option within the product")
62
55
  ]