adcp 2.19.0__py3-none-any.whl → 3.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +6 -14
  3. adcp/__main__.py +94 -51
  4. adcp/adagents.py +91 -19
  5. adcp/client.py +865 -0
  6. adcp/protocols/a2a.py +84 -0
  7. adcp/protocols/base.py +101 -0
  8. adcp/protocols/mcp.py +84 -0
  9. adcp/server/__init__.py +49 -0
  10. adcp/server/base.py +368 -0
  11. adcp/server/content_standards.py +561 -0
  12. adcp/server/governance.py +491 -0
  13. adcp/server/mcp_tools.py +471 -0
  14. adcp/server/proposal.py +334 -0
  15. adcp/server/sponsored_intelligence.py +444 -0
  16. adcp/types/__init__.py +111 -23
  17. adcp/types/_ergonomic.py +35 -14
  18. adcp/types/_generated.py +346 -52
  19. adcp/types/aliases.py +13 -20
  20. adcp/types/base.py +1 -1
  21. adcp/types/generated_poc/adagents.py +196 -189
  22. adcp/types/generated_poc/content_standards/__init__.py +3 -0
  23. adcp/types/generated_poc/content_standards/artifact.py +208 -0
  24. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +64 -0
  25. adcp/types/generated_poc/content_standards/calibrate_content_request.py +17 -0
  26. adcp/types/generated_poc/content_standards/calibrate_content_response.py +74 -0
  27. adcp/types/generated_poc/content_standards/content_standards.py +66 -0
  28. adcp/types/generated_poc/content_standards/create_content_standards_request.py +97 -0
  29. adcp/types/generated_poc/content_standards/create_content_standards_response.py +52 -0
  30. adcp/types/generated_poc/content_standards/get_content_standards_request.py +21 -0
  31. adcp/types/generated_poc/content_standards/get_content_standards_response.py +43 -0
  32. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +64 -0
  33. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +117 -0
  34. adcp/types/generated_poc/content_standards/list_content_standards_request.py +31 -0
  35. adcp/types/generated_poc/content_standards/list_content_standards_response.py +48 -0
  36. adcp/types/generated_poc/content_standards/update_content_standards_request.py +101 -0
  37. adcp/types/generated_poc/content_standards/update_content_standards_response.py +34 -0
  38. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +59 -0
  39. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +85 -0
  40. adcp/types/generated_poc/core/activation_key.py +9 -9
  41. adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
  42. adcp/types/generated_poc/core/assets/css_asset.py +3 -3
  43. adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
  44. adcp/types/generated_poc/core/assets/html_asset.py +3 -3
  45. adcp/types/generated_poc/core/assets/image_asset.py +7 -7
  46. adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
  47. adcp/types/generated_poc/core/assets/text_asset.py +3 -3
  48. adcp/types/generated_poc/core/assets/url_asset.py +4 -4
  49. adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
  50. adcp/types/generated_poc/core/assets/video_asset.py +8 -8
  51. adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
  52. adcp/types/generated_poc/core/async_response_data.py +3 -3
  53. adcp/types/generated_poc/core/brand_manifest.py +122 -59
  54. adcp/types/generated_poc/core/brand_manifest_ref.py +10 -10
  55. adcp/types/generated_poc/core/context.py +2 -2
  56. adcp/types/generated_poc/core/creative_asset.py +20 -19
  57. adcp/types/generated_poc/core/creative_assignment.py +4 -4
  58. adcp/types/generated_poc/core/creative_filters.py +18 -28
  59. adcp/types/generated_poc/core/creative_manifest.py +3 -3
  60. adcp/types/generated_poc/core/creative_policy.py +5 -5
  61. adcp/types/generated_poc/core/delivery_metrics.py +33 -33
  62. adcp/types/generated_poc/core/deployment.py +21 -21
  63. adcp/types/generated_poc/core/destination.py +12 -12
  64. adcp/types/generated_poc/core/error.py +7 -7
  65. adcp/types/generated_poc/core/ext.py +2 -2
  66. adcp/types/generated_poc/core/format.py +66 -66
  67. adcp/types/generated_poc/core/format_id.py +6 -6
  68. adcp/types/generated_poc/core/frequency_cap.py +3 -3
  69. adcp/types/generated_poc/core/identifier.py +3 -3
  70. adcp/types/generated_poc/core/mcp_webhook_payload.py +11 -11
  71. adcp/types/generated_poc/core/measurement.py +9 -9
  72. adcp/types/generated_poc/core/media_buy.py +8 -8
  73. adcp/types/generated_poc/core/media_buy_features.py +29 -0
  74. adcp/types/generated_poc/core/offering.py +80 -0
  75. adcp/types/generated_poc/core/package.py +9 -9
  76. adcp/types/generated_poc/core/performance_feedback.py +19 -19
  77. adcp/types/generated_poc/core/placement.py +5 -5
  78. adcp/types/generated_poc/core/pricing_option.py +9 -15
  79. adcp/types/generated_poc/core/product.py +21 -21
  80. adcp/types/generated_poc/core/product_allocation.py +48 -0
  81. adcp/types/generated_poc/core/product_filters.py +89 -24
  82. adcp/types/generated_poc/core/promoted_offerings.py +29 -38
  83. adcp/types/generated_poc/core/promoted_products.py +3 -3
  84. adcp/types/generated_poc/core/property.py +10 -10
  85. adcp/types/generated_poc/core/property_id.py +5 -5
  86. adcp/types/generated_poc/core/property_list_ref.py +5 -5
  87. adcp/types/generated_poc/core/property_tag.py +5 -5
  88. adcp/types/generated_poc/core/proposal.py +64 -0
  89. adcp/types/generated_poc/core/protocol_envelope.py +9 -9
  90. adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
  91. adcp/types/generated_poc/core/push_notification_config.py +6 -6
  92. adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
  93. adcp/types/generated_poc/core/reporting_webhook.py +70 -0
  94. adcp/types/generated_poc/core/response.py +5 -5
  95. adcp/types/generated_poc/core/signal_filters.py +6 -6
  96. adcp/types/generated_poc/core/start_timing.py +4 -4
  97. adcp/types/generated_poc/core/sub_asset.py +15 -15
  98. adcp/types/generated_poc/core/targeting.py +59 -18
  99. adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
  100. adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
  101. adcp/types/generated_poc/creative/preview_creative_request.py +25 -25
  102. adcp/types/generated_poc/creative/preview_creative_response.py +29 -29
  103. adcp/types/generated_poc/creative/preview_render.py +26 -26
  104. adcp/types/generated_poc/enums/adcp_domain.py +5 -5
  105. adcp/types/generated_poc/enums/asset_content_type.py +14 -14
  106. adcp/types/generated_poc/enums/auth_scheme.py +3 -3
  107. adcp/types/generated_poc/enums/available_metric.py +10 -10
  108. adcp/types/generated_poc/enums/channels.py +21 -11
  109. adcp/types/generated_poc/enums/co_branding_requirement.py +4 -4
  110. adcp/types/generated_poc/enums/creative_action.py +6 -6
  111. adcp/types/generated_poc/enums/creative_agent_capability.py +5 -5
  112. adcp/types/generated_poc/enums/creative_sort_field.py +7 -7
  113. adcp/types/generated_poc/enums/creative_status.py +6 -5
  114. adcp/types/generated_poc/enums/daast_tracking_event.py +12 -12
  115. adcp/types/generated_poc/enums/daast_version.py +3 -3
  116. adcp/types/generated_poc/enums/delivery_type.py +3 -3
  117. adcp/types/generated_poc/enums/dimension_unit.py +5 -5
  118. adcp/types/generated_poc/enums/feed_format.py +4 -4
  119. adcp/types/generated_poc/enums/feedback_source.py +5 -5
  120. adcp/types/generated_poc/enums/format_category.py +8 -8
  121. adcp/types/generated_poc/enums/format_id_parameter.py +3 -3
  122. adcp/types/generated_poc/enums/frequency_cap_scope.py +4 -4
  123. adcp/types/generated_poc/enums/geo_level.py +14 -0
  124. adcp/types/generated_poc/enums/history_entry_type.py +3 -3
  125. adcp/types/generated_poc/enums/http_method.py +3 -3
  126. adcp/types/generated_poc/enums/identifier_types.py +20 -20
  127. adcp/types/generated_poc/enums/javascript_module_type.py +4 -4
  128. adcp/types/generated_poc/enums/landing_page_requirement.py +4 -4
  129. adcp/types/generated_poc/enums/markdown_flavor.py +3 -3
  130. adcp/types/generated_poc/enums/media_buy_status.py +5 -5
  131. adcp/types/generated_poc/enums/metric_type.py +9 -9
  132. adcp/types/generated_poc/enums/metro_system.py +15 -0
  133. adcp/types/generated_poc/enums/notification_type.py +5 -5
  134. adcp/types/generated_poc/enums/pacing.py +4 -4
  135. adcp/types/generated_poc/enums/postal_system.py +19 -0
  136. adcp/types/generated_poc/enums/preview_output_format.py +3 -3
  137. adcp/types/generated_poc/enums/pricing_model.py +8 -8
  138. adcp/types/generated_poc/enums/property_type.py +9 -8
  139. adcp/types/generated_poc/enums/publisher_identifier_types.py +6 -6
  140. adcp/types/generated_poc/enums/reporting_frequency.py +4 -4
  141. adcp/types/generated_poc/enums/signal_catalog_type.py +4 -4
  142. adcp/types/generated_poc/enums/sort_direction.py +3 -3
  143. adcp/types/generated_poc/enums/task_status.py +10 -10
  144. adcp/types/generated_poc/enums/task_type.py +12 -12
  145. adcp/types/generated_poc/enums/update_frequency.py +5 -5
  146. adcp/types/generated_poc/enums/url_asset_type.py +4 -4
  147. adcp/types/generated_poc/enums/validation_mode.py +3 -3
  148. adcp/types/generated_poc/enums/vast_tracking_event.py +17 -17
  149. adcp/types/generated_poc/enums/vast_version.py +6 -6
  150. adcp/types/generated_poc/enums/webhook_response_type.py +5 -5
  151. adcp/types/generated_poc/enums/webhook_security_method.py +4 -4
  152. adcp/types/generated_poc/extensions/extension_meta.py +20 -12
  153. adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
  154. adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
  155. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
  156. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
  157. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
  158. adcp/types/generated_poc/media_buy/create_media_buy_request.py +65 -37
  159. adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
  160. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
  161. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
  162. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
  163. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
  164. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
  165. adcp/types/generated_poc/media_buy/get_products_request.py +14 -5
  166. adcp/types/generated_poc/media_buy/get_products_response.py +12 -6
  167. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
  168. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +9 -9
  169. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
  170. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
  171. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  172. adcp/types/generated_poc/media_buy/list_creatives_response.py +54 -57
  173. adcp/types/generated_poc/media_buy/package_request.py +12 -12
  174. adcp/types/generated_poc/media_buy/package_update.py +119 -0
  175. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
  176. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
  177. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
  178. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
  180. adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
  181. adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
  182. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
  183. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
  185. adcp/types/generated_poc/media_buy/update_media_buy_request.py +28 -124
  186. adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
  187. adcp/types/generated_poc/pricing_options/cpc_option.py +40 -15
  188. adcp/types/generated_poc/pricing_options/cpcv_option.py +41 -16
  189. adcp/types/generated_poc/pricing_options/cpm_option.py +62 -0
  190. adcp/types/generated_poc/pricing_options/cpp_option.py +46 -23
  191. adcp/types/generated_poc/pricing_options/cpv_option.py +45 -26
  192. adcp/types/generated_poc/pricing_options/flat_rate_option.py +53 -47
  193. adcp/types/generated_poc/pricing_options/vcpm_option.py +70 -0
  194. adcp/types/generated_poc/property/base_property_source.py +16 -16
  195. adcp/types/generated_poc/property/create_property_list_request.py +5 -5
  196. adcp/types/generated_poc/property/create_property_list_response.py +4 -4
  197. adcp/types/generated_poc/property/delete_property_list_request.py +3 -3
  198. adcp/types/generated_poc/property/delete_property_list_response.py +4 -4
  199. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  200. adcp/types/generated_poc/property/get_property_list_request.py +6 -6
  201. adcp/types/generated_poc/property/get_property_list_response.py +12 -12
  202. adcp/types/generated_poc/property/list_property_lists_request.py +6 -6
  203. adcp/types/generated_poc/property/list_property_lists_response.py +9 -9
  204. adcp/types/generated_poc/property/property_error.py +11 -11
  205. adcp/types/generated_poc/property/property_feature.py +5 -5
  206. adcp/types/generated_poc/property/property_feature_definition.py +19 -19
  207. adcp/types/generated_poc/property/property_list.py +12 -12
  208. adcp/types/generated_poc/property/property_list_changed_webhook.py +12 -12
  209. adcp/types/generated_poc/property/property_list_filters.py +9 -9
  210. adcp/types/generated_poc/property/update_property_list_request.py +9 -9
  211. adcp/types/generated_poc/property/update_property_list_response.py +3 -3
  212. adcp/types/generated_poc/protocol/__init__.py +3 -0
  213. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +34 -0
  214. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +353 -0
  215. adcp/types/generated_poc/protocols/adcp_extension.py +14 -17
  216. adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
  217. adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
  218. adcp/types/generated_poc/signals/get_signals_request.py +9 -9
  219. adcp/types/generated_poc/signals/get_signals_response.py +16 -16
  220. adcp/types/generated_poc/sponsored_intelligence/__init__.py +3 -0
  221. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +102 -0
  222. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +34 -0
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +100 -0
  224. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +78 -0
  225. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +46 -0
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +44 -0
  227. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +58 -0
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +101 -0
  229. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +60 -0
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +54 -0
  231. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +30 -0
  232. adcp/utils/format_assets.py +5 -5
  233. adcp/utils/preview_cache.py +2 -2
  234. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/METADATA +1 -1
  235. adcp-3.0.0.dist-info/RECORD +264 -0
  236. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/WHEEL +1 -1
  237. adcp/types/generated_poc/enums/standard_format_ids.py +0 -45
  238. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -58
  239. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -43
  240. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -61
  241. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -47
  242. adcp/types/generated_poc/property/list_property_features_request.py +0 -25
  243. adcp/types/generated_poc/property/list_property_features_response.py +0 -24
  244. adcp-2.19.0.dist-info/RECORD +0 -220
  245. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/entry_points.txt +0 -0
  246. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/licenses/LICENSE +0 -0
  247. {adcp-2.19.0.dist-info → adcp-3.0.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative/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
 
@@ -18,7 +18,7 @@ from ..enums import creative_agent_capability
18
18
 
19
19
  class CreativeAgent(AdCPBaseModel):
20
20
  agent_name: Annotated[
21
- str | None, Field(description="Human-readable name for the creative agent")
21
+ str | None, Field(description='Human-readable name for the creative agent')
22
22
  ] = None
23
23
  agent_url: Annotated[
24
24
  AnyUrl,
@@ -28,23 +28,23 @@ class CreativeAgent(AdCPBaseModel):
28
28
  ]
29
29
  capabilities: Annotated[
30
30
  list[creative_agent_capability.CreativeAgentCapability] | None,
31
- Field(description="Capabilities this creative agent provides"),
31
+ Field(description='Capabilities this creative agent provides'),
32
32
  ] = None
33
33
 
34
34
 
35
35
  class ListCreativeFormatsResponseCreativeAgent(AdCPBaseModel):
36
36
  model_config = ConfigDict(
37
- extra="allow",
37
+ extra='allow',
38
38
  )
39
39
  context: context_1.ContextObject | None = None
40
40
  creative_agents: Annotated[
41
41
  list[CreativeAgent] | None,
42
42
  Field(
43
- description="Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats."
43
+ description='Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats.'
44
44
  ),
45
45
  ] = None
46
46
  errors: Annotated[
47
- list[error.Error] | None, Field(description="Task-specific errors and warnings")
47
+ list[error.Error] | None, Field(description='Task-specific errors and warnings')
48
48
  ] = None
49
49
  ext: ext_1.ExtensionObject | None = None
50
50
  formats: Annotated[
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative/preview_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
 
@@ -18,7 +18,7 @@ from ..enums import preview_output_format
18
18
 
19
19
  class Input(AdCPBaseModel):
20
20
  model_config = ConfigDict(
21
- extra="allow",
21
+ extra='allow',
22
22
  )
23
23
  context_description: Annotated[
24
24
  str | None,
@@ -42,37 +42,37 @@ class Input(AdCPBaseModel):
42
42
 
43
43
  class Input2(AdCPBaseModel):
44
44
  model_config = ConfigDict(
45
- extra="allow",
45
+ extra='allow',
46
46
  )
47
47
  context_description: Annotated[
48
48
  str | None,
49
- Field(description="Natural language description of the context for AI-generated content"),
49
+ Field(description='Natural language description of the context for AI-generated content'),
50
50
  ] = None
51
51
  macros: Annotated[
52
- dict[str, str] | None, Field(description="Macro values to use for this preview")
52
+ dict[str, str] | None, Field(description='Macro values to use for this preview')
53
53
  ] = None
54
- name: Annotated[str, Field(description="Human-readable name for this input set")]
54
+ name: Annotated[str, Field(description='Human-readable name for this input set')]
55
55
 
56
56
 
57
57
  class PreviewCreativeRequest1(AdCPBaseModel):
58
58
  model_config = ConfigDict(
59
- extra="allow",
59
+ extra='allow',
60
60
  )
61
61
  context: context_1.ContextObject | None = None
62
62
  creative_manifest: Annotated[
63
63
  creative_manifest_1.CreativeManifest,
64
64
  Field(
65
- description="Complete creative manifest with all required assets (including promoted_offerings if required by the format)"
65
+ description='Complete creative manifest with all required assets (including promoted_offerings if required by the format)'
66
66
  ),
67
67
  ]
68
68
  ext: ext_1.ExtensionObject | None = None
69
69
  format_id: Annotated[
70
- format_id_1.FormatId, Field(description="Format identifier for rendering the preview")
70
+ format_id_1.FormatId, Field(description='Format identifier for rendering the preview')
71
71
  ]
72
72
  inputs: Annotated[
73
73
  list[Input] | None,
74
74
  Field(
75
- description="Array of input sets for generating multiple preview variants. Each input set defines macros and context values for one preview rendering. If not provided, creative agent will generate default previews."
75
+ description='Array of input sets for generating multiple preview variants. Each input set defines macros and context values for one preview rendering. If not provided, creative agent will generate default previews.'
76
76
  ),
77
77
  ] = None
78
78
  output_format: Annotated[
@@ -82,28 +82,28 @@ class PreviewCreativeRequest1(AdCPBaseModel):
82
82
  ),
83
83
  ] = preview_output_format.PreviewOutputFormat.url
84
84
  request_type: Annotated[
85
- Literal["single"],
86
- Field(description="Discriminator indicating this is a single preview request"),
85
+ Literal['single'],
86
+ Field(description='Discriminator indicating this is a single preview request'),
87
87
  ]
88
88
  template_id: Annotated[
89
- str | None, Field(description="Specific template ID for custom format rendering")
89
+ str | None, Field(description='Specific template ID for custom format rendering')
90
90
  ] = None
91
91
 
92
92
 
93
93
  class Request(AdCPBaseModel):
94
94
  model_config = ConfigDict(
95
- extra="allow",
95
+ extra='allow',
96
96
  )
97
97
  creative_manifest: Annotated[
98
98
  creative_manifest_1.CreativeManifest,
99
- Field(description="Complete creative manifest with all required assets"),
99
+ Field(description='Complete creative manifest with all required assets'),
100
100
  ]
101
101
  format_id: Annotated[
102
- format_id_1.FormatId, Field(description="Format identifier for rendering the preview")
102
+ format_id_1.FormatId, Field(description='Format identifier for rendering the preview')
103
103
  ]
104
104
  inputs: Annotated[
105
105
  list[Input2] | None,
106
- Field(description="Array of input sets for generating multiple preview variants"),
106
+ Field(description='Array of input sets for generating multiple preview variants'),
107
107
  ] = None
108
108
  output_format: Annotated[
109
109
  preview_output_format.PreviewOutputFormat | None,
@@ -112,13 +112,13 @@ class Request(AdCPBaseModel):
112
112
  ),
113
113
  ] = preview_output_format.PreviewOutputFormat.url
114
114
  template_id: Annotated[
115
- str | None, Field(description="Specific template ID for custom format rendering")
115
+ str | None, Field(description='Specific template ID for custom format rendering')
116
116
  ] = None
117
117
 
118
118
 
119
119
  class PreviewCreativeRequest2(AdCPBaseModel):
120
120
  model_config = ConfigDict(
121
- extra="allow",
121
+ extra='allow',
122
122
  )
123
123
  context: context_1.ContextObject | None = None
124
124
  ext: ext_1.ExtensionObject | None = None
@@ -129,13 +129,13 @@ class PreviewCreativeRequest2(AdCPBaseModel):
129
129
  ),
130
130
  ] = preview_output_format.PreviewOutputFormat.url
131
131
  request_type: Annotated[
132
- Literal["batch"],
133
- Field(description="Discriminator indicating this is a batch preview request"),
132
+ Literal['batch'],
133
+ Field(description='Discriminator indicating this is a batch preview request'),
134
134
  ]
135
135
  requests: Annotated[
136
136
  list[Request],
137
137
  Field(
138
- description="Array of preview requests (1-50 items). Each follows the single request structure.",
138
+ description='Array of preview requests (1-50 items). Each follows the single request structure.',
139
139
  max_length=50,
140
140
  min_length=1,
141
141
  ),
@@ -146,8 +146,8 @@ class PreviewCreativeRequest(RootModel[PreviewCreativeRequest1 | PreviewCreative
146
146
  root: Annotated[
147
147
  PreviewCreativeRequest1 | PreviewCreativeRequest2,
148
148
  Field(
149
- discriminator="request_type",
150
- description="Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.",
151
- title="Preview Creative Request",
149
+ discriminator='request_type',
150
+ description='Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.',
151
+ title='Preview Creative Request',
152
152
  ),
153
153
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative/preview_creative_response.json
3
- # timestamp: 2026-01-14T17:08:13+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -16,12 +16,12 @@ from . import preview_render
16
16
 
17
17
  class Input(AdCPBaseModel):
18
18
  context_description: Annotated[
19
- str | None, Field(description="Context description applied to this variant")
19
+ str | None, Field(description='Context description applied to this variant')
20
20
  ] = None
21
21
  macros: Annotated[
22
- dict[str, str] | None, Field(description="Macro values applied to this variant")
22
+ dict[str, str] | None, Field(description='Macro values applied to this variant')
23
23
  ] = None
24
- name: Annotated[str, Field(description="Human-readable name for this variant")]
24
+ name: Annotated[str, Field(description='Human-readable name for this variant')]
25
25
 
26
26
 
27
27
  class Error(AdCPBaseModel):
@@ -31,8 +31,8 @@ class Error(AdCPBaseModel):
31
31
  description="Error code (e.g., 'invalid_manifest', 'unsupported_format', 'missing_assets')"
32
32
  ),
33
33
  ]
34
- details: Annotated[dict[str, Any] | None, Field(description="Additional error context")] = None
35
- message: Annotated[str, Field(description="Human-readable error message")]
34
+ details: Annotated[dict[str, Any] | None, Field(description='Additional error context')] = None
35
+ message: Annotated[str, Field(description='Human-readable error message')]
36
36
 
37
37
 
38
38
  class Input4(AdCPBaseModel):
@@ -45,14 +45,14 @@ class Preview(AdCPBaseModel):
45
45
  input: Annotated[
46
46
  Input,
47
47
  Field(
48
- description="The input parameters that generated this preview variant. Echoes back the request input or shows defaults used."
48
+ description='The input parameters that generated this preview variant. Echoes back the request input or shows defaults used.'
49
49
  ),
50
50
  ]
51
- preview_id: Annotated[str, Field(description="Unique identifier for this preview variant")]
51
+ preview_id: Annotated[str, Field(description='Unique identifier for this preview variant')]
52
52
  renders: Annotated[
53
53
  list[preview_render.PreviewRender],
54
54
  Field(
55
- description="Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.",
55
+ description='Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.',
56
56
  min_length=1,
57
57
  ),
58
58
  ]
@@ -60,29 +60,29 @@ class Preview(AdCPBaseModel):
60
60
 
61
61
  class PreviewCreativeResponse1(AdCPBaseModel):
62
62
  model_config = ConfigDict(
63
- extra="allow",
63
+ extra='allow',
64
64
  )
65
65
  context: context_1.ContextObject | None = None
66
66
  expires_at: Annotated[
67
- AwareDatetime, Field(description="ISO 8601 timestamp when preview links expire")
67
+ AwareDatetime, Field(description='ISO 8601 timestamp when preview links expire')
68
68
  ]
69
69
  ext: ext_1.ExtensionObject | None = None
70
70
  interactive_url: Annotated[
71
71
  AnyUrl | None,
72
72
  Field(
73
- description="Optional URL to an interactive testing page that shows all preview variants with controls to switch between them, modify macro values, and test different scenarios."
73
+ description='Optional URL to an interactive testing page that shows all preview variants with controls to switch between them, modify macro values, and test different scenarios.'
74
74
  ),
75
75
  ] = None
76
76
  previews: Annotated[
77
77
  list[Preview],
78
78
  Field(
79
- description="Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.",
79
+ description='Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.',
80
80
  min_length=1,
81
81
  ),
82
82
  ]
83
83
  response_type: Annotated[
84
- Literal["single"],
85
- Field(description="Discriminator indicating this is a single preview response"),
84
+ Literal['single'],
85
+ Field(description='Discriminator indicating this is a single preview response'),
86
86
  ]
87
87
 
88
88
 
@@ -97,16 +97,16 @@ class Response(AdCPBaseModel):
97
97
  interactive_url: AnyUrl | None = None
98
98
  previews: Annotated[
99
99
  list[Preview1],
100
- Field(description="Array of preview variants for this creative", min_length=1),
100
+ Field(description='Array of preview variants for this creative', min_length=1),
101
101
  ]
102
102
 
103
103
 
104
104
  class Results(AdCPBaseModel):
105
- error: Annotated[Error | None, Field(description="Error information for failed requests")] = (
105
+ error: Annotated[Error | None, Field(description='Error information for failed requests')] = (
106
106
  None
107
107
  )
108
- response: Annotated[Response, Field(description="Preview response for successful requests")]
109
- success: Annotated[Literal[True], Field(description="Whether this preview request succeeded")]
108
+ response: Annotated[Response, Field(description='Preview response for successful requests')]
109
+ success: Annotated[Literal[True], Field(description='Whether this preview request succeeded')]
110
110
 
111
111
 
112
112
  class Preview2(Preview1):
@@ -118,32 +118,32 @@ class Response1(AdCPBaseModel):
118
118
  interactive_url: AnyUrl | None = None
119
119
  previews: Annotated[
120
120
  list[Preview2],
121
- Field(description="Array of preview variants for this creative", min_length=1),
121
+ Field(description='Array of preview variants for this creative', min_length=1),
122
122
  ]
123
123
 
124
124
 
125
125
  class Results1(AdCPBaseModel):
126
- error: Annotated[Error, Field(description="Error information for failed requests")]
126
+ error: Annotated[Error, Field(description='Error information for failed requests')]
127
127
  response: Annotated[
128
- Response1 | None, Field(description="Preview response for successful requests")
128
+ Response1 | None, Field(description='Preview response for successful requests')
129
129
  ] = None
130
- success: Annotated[Literal[False], Field(description="Whether this preview request succeeded")]
130
+ success: Annotated[Literal[False], Field(description='Whether this preview request succeeded')]
131
131
 
132
132
 
133
133
  class PreviewCreativeResponse2(AdCPBaseModel):
134
134
  model_config = ConfigDict(
135
- extra="allow",
135
+ extra='allow',
136
136
  )
137
137
  context: context_1.ContextObject | None = None
138
138
  ext: ext_1.ExtensionObject | None = None
139
139
  response_type: Annotated[
140
- Literal["batch"],
141
- Field(description="Discriminator indicating this is a batch preview response"),
140
+ Literal['batch'],
141
+ Field(description='Discriminator indicating this is a batch preview response'),
142
142
  ]
143
143
  results: Annotated[
144
144
  list[Results | Results1],
145
145
  Field(
146
- description="Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.",
146
+ description='Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.',
147
147
  min_length=1,
148
148
  ),
149
149
  ]
@@ -153,7 +153,7 @@ class PreviewCreativeResponse(RootModel[PreviewCreativeResponse1 | PreviewCreati
153
153
  root: Annotated[
154
154
  PreviewCreativeResponse1 | PreviewCreativeResponse2,
155
155
  Field(
156
- description="Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.",
157
- title="Preview Creative Response",
156
+ description='Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.',
157
+ title='Preview Creative Response',
158
158
  ),
159
159
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative/preview_render.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-26T11:59:53+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -17,7 +17,7 @@ class Dimensions(AdCPBaseModel):
17
17
 
18
18
  class Embedding(AdCPBaseModel):
19
19
  csp_policy: Annotated[
20
- str | None, Field(description="Content Security Policy requirements for embedding")
20
+ str | None, Field(description='Content Security Policy requirements for embedding')
21
21
  ] = None
22
22
  recommended_sandbox: Annotated[
23
23
  str | None,
@@ -26,35 +26,35 @@ class Embedding(AdCPBaseModel):
26
26
  ),
27
27
  ] = None
28
28
  requires_https: Annotated[
29
- bool | None, Field(description="Whether this output requires HTTPS for secure embedding")
29
+ bool | None, Field(description='Whether this output requires HTTPS for secure embedding')
30
30
  ] = None
31
31
  supports_fullscreen: Annotated[
32
- bool | None, Field(description="Whether this output supports fullscreen mode")
32
+ bool | None, Field(description='Whether this output supports fullscreen mode')
33
33
  ] = None
34
34
 
35
35
 
36
36
  class PreviewRender1(AdCPBaseModel):
37
37
  model_config = ConfigDict(
38
- extra="allow",
38
+ extra='allow',
39
39
  )
40
40
  dimensions: Annotated[
41
- Dimensions | None, Field(description="Dimensions for this rendered piece")
41
+ Dimensions | None, Field(description='Dimensions for this rendered piece')
42
42
  ] = None
43
43
  embedding: Annotated[
44
44
  Embedding | None,
45
- Field(description="Optional security and embedding metadata for safe iframe integration"),
45
+ Field(description='Optional security and embedding metadata for safe iframe integration'),
46
46
  ] = None
47
47
  output_format: Annotated[
48
- Literal["url"], Field(description="Discriminator indicating preview_url is provided")
48
+ Literal['url'], Field(description='Discriminator indicating preview_url is provided')
49
49
  ]
50
50
  preview_url: Annotated[
51
51
  AnyUrl,
52
52
  Field(
53
- description="URL to an HTML page that renders this piece. Can be embedded in an iframe."
53
+ description='URL to an HTML page that renders this piece. Can be embedded in an iframe.'
54
54
  ),
55
55
  ]
56
56
  render_id: Annotated[
57
- str, Field(description="Unique identifier for this rendered piece within the variant")
57
+ str, Field(description='Unique identifier for this rendered piece within the variant')
58
58
  ]
59
59
  role: Annotated[
60
60
  str,
@@ -66,25 +66,25 @@ class PreviewRender1(AdCPBaseModel):
66
66
 
67
67
  class PreviewRender2(AdCPBaseModel):
68
68
  model_config = ConfigDict(
69
- extra="allow",
69
+ extra='allow',
70
70
  )
71
71
  dimensions: Annotated[
72
- Dimensions | None, Field(description="Dimensions for this rendered piece")
72
+ Dimensions | None, Field(description='Dimensions for this rendered piece')
73
73
  ] = None
74
74
  embedding: Annotated[
75
- Embedding | None, Field(description="Optional security and embedding metadata")
75
+ Embedding | None, Field(description='Optional security and embedding metadata')
76
76
  ] = None
77
77
  output_format: Annotated[
78
- Literal["html"], Field(description="Discriminator indicating preview_html is provided")
78
+ Literal['html'], Field(description='Discriminator indicating preview_html is provided')
79
79
  ]
80
80
  preview_html: Annotated[
81
81
  str,
82
82
  Field(
83
- description="Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing."
83
+ description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.'
84
84
  ),
85
85
  ]
86
86
  render_id: Annotated[
87
- str, Field(description="Unique identifier for this rendered piece within the variant")
87
+ str, Field(description='Unique identifier for this rendered piece within the variant')
88
88
  ]
89
89
  role: Annotated[
90
90
  str,
@@ -96,35 +96,35 @@ class PreviewRender2(AdCPBaseModel):
96
96
 
97
97
  class PreviewRender3(AdCPBaseModel):
98
98
  model_config = ConfigDict(
99
- extra="allow",
99
+ extra='allow',
100
100
  )
101
101
  dimensions: Annotated[
102
- Dimensions | None, Field(description="Dimensions for this rendered piece")
102
+ Dimensions | None, Field(description='Dimensions for this rendered piece')
103
103
  ] = None
104
104
  embedding: Annotated[
105
105
  Embedding | None,
106
- Field(description="Optional security and embedding metadata for safe iframe integration"),
106
+ Field(description='Optional security and embedding metadata for safe iframe integration'),
107
107
  ] = None
108
108
  output_format: Annotated[
109
- Literal["both"],
109
+ Literal['both'],
110
110
  Field(
111
- description="Discriminator indicating both preview_url and preview_html are provided"
111
+ description='Discriminator indicating both preview_url and preview_html are provided'
112
112
  ),
113
113
  ]
114
114
  preview_html: Annotated[
115
115
  str,
116
116
  Field(
117
- description="Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing."
117
+ description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.'
118
118
  ),
119
119
  ]
120
120
  preview_url: Annotated[
121
121
  AnyUrl,
122
122
  Field(
123
- description="URL to an HTML page that renders this piece. Can be embedded in an iframe."
123
+ description='URL to an HTML page that renders this piece. Can be embedded in an iframe.'
124
124
  ),
125
125
  ]
126
126
  render_id: Annotated[
127
- str, Field(description="Unique identifier for this rendered piece within the variant")
127
+ str, Field(description='Unique identifier for this rendered piece within the variant')
128
128
  ]
129
129
  role: Annotated[
130
130
  str,
@@ -138,7 +138,7 @@ class PreviewRender(RootModel[PreviewRender1 | PreviewRender2 | PreviewRender3])
138
138
  root: Annotated[
139
139
  PreviewRender1 | PreviewRender2 | PreviewRender3,
140
140
  Field(
141
- description="A single rendered piece of a creative preview with discriminated output format",
142
- title="Preview Render",
141
+ description='A single rendered piece of a creative preview with discriminated output format',
142
+ title='Preview Render',
143
143
  ),
144
144
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/adcp_domain.json
3
- # timestamp: 2026-01-14T17:08:13+00:00
3
+ # timestamp: 2026-01-25T21:17:54+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,7 +8,7 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class AdcpDomain(Enum):
11
- media_buy = "media-buy"
12
- signals = "signals"
13
- governance = "governance"
14
- creative = "creative"
11
+ media_buy = 'media-buy'
12
+ signals = 'signals'
13
+ governance = 'governance'
14
+ creative = 'creative'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/asset_content_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
 
@@ -8,16 +8,16 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class AssetContentType(Enum):
11
- image = "image"
12
- video = "video"
13
- audio = "audio"
14
- text = "text"
15
- markdown = "markdown"
16
- html = "html"
17
- css = "css"
18
- javascript = "javascript"
19
- vast = "vast"
20
- daast = "daast"
21
- promoted_offerings = "promoted_offerings"
22
- url = "url"
23
- webhook = "webhook"
11
+ image = 'image'
12
+ video = 'video'
13
+ audio = 'audio'
14
+ text = 'text'
15
+ markdown = 'markdown'
16
+ html = 'html'
17
+ css = 'css'
18
+ javascript = 'javascript'
19
+ vast = 'vast'
20
+ daast = 'daast'
21
+ promoted_offerings = 'promoted_offerings'
22
+ url = 'url'
23
+ webhook = 'webhook'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/auth_scheme.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
 
@@ -8,5 +8,5 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class AuthenticationScheme(Enum):
11
- Bearer = "Bearer"
12
- HMAC_SHA256 = "HMAC-SHA256"
11
+ Bearer = 'Bearer'
12
+ HMAC_SHA256 = 'HMAC-SHA256'
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/available_metric.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
 
@@ -8,12 +8,12 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class AvailableMetric(Enum):
11
- impressions = "impressions"
12
- spend = "spend"
13
- clicks = "clicks"
14
- ctr = "ctr"
15
- video_completions = "video_completions"
16
- completion_rate = "completion_rate"
17
- conversions = "conversions"
18
- viewability = "viewability"
19
- engagement_rate = "engagement_rate"
11
+ impressions = 'impressions'
12
+ spend = 'spend'
13
+ clicks = 'clicks'
14
+ ctr = 'ctr'
15
+ video_completions = 'video_completions'
16
+ completion_rate = 'completion_rate'
17
+ conversions = 'conversions'
18
+ viewability = 'viewability'
19
+ engagement_rate = 'engagement_rate'
@@ -1,19 +1,29 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: enums/channels.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
 
7
7
  from enum import Enum
8
8
 
9
9
 
10
- class AdvertisingChannels(Enum):
11
- display = "display"
12
- video = "video"
13
- audio = "audio"
14
- native = "native"
15
- dooh = "dooh"
16
- ctv = "ctv"
17
- podcast = "podcast"
18
- retail = "retail"
19
- social = "social"
10
+ class MediaChannel(Enum):
11
+ display = 'display'
12
+ olv = 'olv'
13
+ social = 'social'
14
+ search = 'search'
15
+ ctv = 'ctv'
16
+ linear_tv = 'linear_tv'
17
+ radio = 'radio'
18
+ streaming_audio = 'streaming_audio'
19
+ podcast = 'podcast'
20
+ dooh = 'dooh'
21
+ ooh = 'ooh'
22
+ print = 'print'
23
+ cinema = 'cinema'
24
+ email = 'email'
25
+ gaming = 'gaming'
26
+ retail_media = 'retail_media'
27
+ influencer = 'influencer'
28
+ affiliate = 'affiliate'
29
+ product_placement = 'product_placement'