adcp 2.17.0__py3-none-any.whl → 2.19.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 (192) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +22 -1
  3. adcp/__main__.py +72 -0
  4. adcp/protocols/mcp.py +3 -1
  5. adcp/types/_ergonomic.py +0 -4
  6. adcp/types/_generated.py +91 -4
  7. adcp/types/generated_poc/adagents.py +239 -149
  8. adcp/types/generated_poc/core/activation_key.py +9 -9
  9. adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
  10. adcp/types/generated_poc/core/assets/css_asset.py +3 -3
  11. adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
  12. adcp/types/generated_poc/core/assets/html_asset.py +3 -3
  13. adcp/types/generated_poc/core/assets/image_asset.py +7 -7
  14. adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
  15. adcp/types/generated_poc/core/assets/text_asset.py +3 -3
  16. adcp/types/generated_poc/core/assets/url_asset.py +4 -4
  17. adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
  18. adcp/types/generated_poc/core/assets/video_asset.py +8 -8
  19. adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
  20. adcp/types/generated_poc/core/async_response_data.py +2 -2
  21. adcp/types/generated_poc/core/brand_manifest.py +56 -56
  22. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  23. adcp/types/generated_poc/core/context.py +2 -3
  24. adcp/types/generated_poc/core/creative_asset.py +14 -14
  25. adcp/types/generated_poc/core/creative_assignment.py +4 -4
  26. adcp/types/generated_poc/core/creative_filters.py +20 -20
  27. adcp/types/generated_poc/core/creative_manifest.py +3 -3
  28. adcp/types/generated_poc/core/creative_policy.py +5 -5
  29. adcp/types/generated_poc/core/delivery_metrics.py +33 -33
  30. adcp/types/generated_poc/core/deployment.py +21 -21
  31. adcp/types/generated_poc/core/destination.py +12 -12
  32. adcp/types/generated_poc/core/error.py +9 -9
  33. adcp/types/generated_poc/core/ext.py +2 -3
  34. adcp/types/generated_poc/core/format.py +139 -51
  35. adcp/types/generated_poc/core/format_id.py +6 -6
  36. adcp/types/generated_poc/core/frequency_cap.py +3 -3
  37. adcp/types/generated_poc/core/identifier.py +27 -0
  38. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  39. adcp/types/generated_poc/core/measurement.py +9 -9
  40. adcp/types/generated_poc/core/media_buy.py +8 -8
  41. adcp/types/generated_poc/core/package.py +9 -9
  42. adcp/types/generated_poc/core/performance_feedback.py +19 -19
  43. adcp/types/generated_poc/core/placement.py +5 -5
  44. adcp/types/generated_poc/core/pricing_option.py +2 -2
  45. adcp/types/generated_poc/core/product.py +21 -21
  46. adcp/types/generated_poc/core/product_filters.py +19 -19
  47. adcp/types/generated_poc/core/promoted_offerings.py +21 -21
  48. adcp/types/generated_poc/core/promoted_products.py +3 -3
  49. adcp/types/generated_poc/core/property.py +10 -10
  50. adcp/types/generated_poc/core/property_id.py +4 -4
  51. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  52. adcp/types/generated_poc/core/property_tag.py +4 -4
  53. adcp/types/generated_poc/core/protocol_envelope.py +9 -9
  54. adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
  55. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  56. adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
  57. adcp/types/generated_poc/core/response.py +5 -5
  58. adcp/types/generated_poc/core/signal_filters.py +6 -6
  59. adcp/types/generated_poc/core/start_timing.py +5 -5
  60. adcp/types/generated_poc/core/sub_asset.py +15 -15
  61. adcp/types/generated_poc/core/targeting.py +9 -9
  62. adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
  63. adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
  64. adcp/types/generated_poc/creative/preview_creative_request.py +26 -26
  65. adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
  66. adcp/types/generated_poc/creative/preview_render.py +26 -26
  67. adcp/types/generated_poc/enums/adcp_domain.py +5 -3
  68. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  69. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  70. adcp/types/generated_poc/enums/available_metric.py +9 -9
  71. adcp/types/generated_poc/enums/channels.py +9 -9
  72. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  73. adcp/types/generated_poc/enums/creative_action.py +5 -5
  74. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  75. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  76. adcp/types/generated_poc/enums/creative_status.py +4 -4
  77. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  78. adcp/types/generated_poc/enums/daast_version.py +2 -2
  79. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  80. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  81. adcp/types/generated_poc/enums/feed_format.py +3 -3
  82. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  83. adcp/types/generated_poc/enums/format_category.py +7 -7
  84. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  85. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  86. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  87. adcp/types/generated_poc/enums/http_method.py +2 -2
  88. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  89. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  90. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  91. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  92. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  93. adcp/types/generated_poc/enums/metric_type.py +8 -8
  94. adcp/types/generated_poc/enums/notification_type.py +4 -4
  95. adcp/types/generated_poc/enums/pacing.py +3 -3
  96. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  97. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  98. adcp/types/generated_poc/enums/property_type.py +7 -7
  99. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  100. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  101. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  102. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  103. adcp/types/generated_poc/enums/standard_format_ids.py +35 -35
  104. adcp/types/generated_poc/enums/task_status.py +9 -9
  105. adcp/types/generated_poc/enums/task_type.py +12 -6
  106. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  107. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  108. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  109. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  110. adcp/types/generated_poc/enums/vast_version.py +5 -5
  111. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  112. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  113. adcp/types/generated_poc/extensions/__init__.py +3 -0
  114. adcp/types/generated_poc/extensions/extension_meta.py +50 -0
  115. adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
  116. adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
  117. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
  118. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
  119. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
  120. adcp/types/generated_poc/media_buy/create_media_buy_request.py +64 -23
  121. adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
  122. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
  123. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
  124. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
  125. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
  126. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
  127. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  128. adcp/types/generated_poc/media_buy/get_products_response.py +10 -4
  129. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
  130. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +8 -8
  131. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
  132. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
  133. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  134. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -53
  135. adcp/types/generated_poc/media_buy/package_request.py +16 -7
  136. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
  137. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
  138. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
  139. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
  140. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
  141. adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
  142. adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
  143. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
  144. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
  145. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
  146. adcp/types/generated_poc/media_buy/update_media_buy_request.py +37 -29
  147. adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
  148. adcp/types/generated_poc/pricing_options/cpc_option.py +9 -9
  149. adcp/types/generated_poc/pricing_options/cpcv_option.py +9 -9
  150. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +14 -14
  151. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +9 -9
  152. adcp/types/generated_poc/pricing_options/cpp_option.py +14 -14
  153. adcp/types/generated_poc/pricing_options/cpv_option.py +13 -13
  154. adcp/types/generated_poc/pricing_options/flat_rate_option.py +16 -16
  155. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +14 -14
  156. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +9 -9
  157. adcp/types/generated_poc/property/__init__.py +3 -0
  158. adcp/types/generated_poc/property/base_property_source.py +86 -0
  159. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  160. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  161. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  162. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  163. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  164. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  165. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  166. adcp/types/generated_poc/property/list_property_features_request.py +25 -0
  167. adcp/types/generated_poc/property/list_property_features_response.py +24 -0
  168. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  169. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  170. adcp/types/generated_poc/property/property_error.py +33 -0
  171. adcp/types/generated_poc/property/property_feature.py +22 -0
  172. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  173. adcp/types/generated_poc/property/property_list.py +62 -0
  174. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  175. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  176. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  177. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  178. adcp/types/generated_poc/protocols/adcp_extension.py +26 -10
  179. adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
  180. adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
  181. adcp/types/generated_poc/signals/get_signals_request.py +9 -9
  182. adcp/types/generated_poc/signals/get_signals_response.py +16 -16
  183. adcp/utils/__init__.py +24 -1
  184. adcp/utils/format_assets.py +224 -0
  185. adcp/utils/preview_cache.py +29 -7
  186. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
  187. adcp-2.19.0.dist-info/RECORD +220 -0
  188. adcp-2.17.0.dist-info/RECORD +0 -194
  189. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
  190. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
  191. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
  192. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative/preview_creative_request.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-08T19:25:24+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='forbid',
21
+ extra="allow",
22
22
  )
23
23
  context_description: Annotated[
24
24
  str | None,
@@ -29,7 +29,7 @@ class Input(AdCPBaseModel):
29
29
  macros: Annotated[
30
30
  dict[str, str] | None,
31
31
  Field(
32
- description="Macro values to use for this preview. Supports all universal macros from the format's supported_macros list. See docs/media-buy/creatives/universal-macros.md for available macros."
32
+ description="Macro values to use for this preview. Supports all universal macros from the format's supported_macros list. See docs/creative/universal-macros.md for available macros."
33
33
  ),
34
34
  ] = None
35
35
  name: Annotated[
@@ -42,37 +42,37 @@ class Input(AdCPBaseModel):
42
42
 
43
43
  class Input2(AdCPBaseModel):
44
44
  model_config = ConfigDict(
45
- extra='forbid',
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='forbid',
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='forbid',
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='forbid',
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: 2025-12-11T15:09:37+00:00
3
+ # timestamp: 2026-01-14T17:08:13+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='forbid',
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,19 +97,20 @@ 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
- Preview2 = Preview1
112
+ class Preview2(Preview1):
113
+ pass
113
114
 
114
115
 
115
116
  class Response1(AdCPBaseModel):
@@ -117,32 +118,32 @@ class Response1(AdCPBaseModel):
117
118
  interactive_url: AnyUrl | None = None
118
119
  previews: Annotated[
119
120
  list[Preview2],
120
- 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),
121
122
  ]
122
123
 
123
124
 
124
125
  class Results1(AdCPBaseModel):
125
- error: Annotated[Error, Field(description='Error information for failed requests')]
126
+ error: Annotated[Error, Field(description="Error information for failed requests")]
126
127
  response: Annotated[
127
- Response1 | None, Field(description='Preview response for successful requests')
128
+ Response1 | None, Field(description="Preview response for successful requests")
128
129
  ] = None
129
- success: Annotated[Literal[False], Field(description='Whether this preview request succeeded')]
130
+ success: Annotated[Literal[False], Field(description="Whether this preview request succeeded")]
130
131
 
131
132
 
132
133
  class PreviewCreativeResponse2(AdCPBaseModel):
133
134
  model_config = ConfigDict(
134
- extra='forbid',
135
+ extra="allow",
135
136
  )
136
137
  context: context_1.ContextObject | None = None
137
138
  ext: ext_1.ExtensionObject | None = None
138
139
  response_type: Annotated[
139
- Literal['batch'],
140
- Field(description='Discriminator indicating this is a batch preview response'),
140
+ Literal["batch"],
141
+ Field(description="Discriminator indicating this is a batch preview response"),
141
142
  ]
142
143
  results: Annotated[
143
144
  list[Results | Results1],
144
145
  Field(
145
- 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.",
146
147
  min_length=1,
147
148
  ),
148
149
  ]
@@ -152,7 +153,7 @@ class PreviewCreativeResponse(RootModel[PreviewCreativeResponse1 | PreviewCreati
152
153
  root: Annotated[
153
154
  PreviewCreativeResponse1 | PreviewCreativeResponse2,
154
155
  Field(
155
- 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.',
156
- 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",
157
158
  ),
158
159
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: creative/preview_render.json
3
- # timestamp: 2025-12-11T15:09:37+00:00
3
+ # timestamp: 2026-01-08T19:25:24+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='forbid',
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='forbid',
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='forbid',
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: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-14T17:08:13+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -8,5 +8,7 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class AdcpDomain(Enum):
11
- media_buy = 'media-buy'
12
- signals = 'signals'
11
+ media_buy = "media-buy"
12
+ signals = "signals"
13
+ governance = "governance"
14
+ creative = "creative"
@@ -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"
@@ -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"
@@ -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"
@@ -8,12 +8,12 @@ from enum import Enum
8
8
 
9
9
 
10
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'
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"
@@ -8,6 +8,6 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class CoBrandingRequirement(Enum):
11
- required = 'required'
12
- optional = 'optional'
13
- none = 'none'
11
+ required = "required"
12
+ optional = "optional"
13
+ none = "none"
@@ -8,8 +8,8 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class CreativeAction(Enum):
11
- created = 'created'
12
- updated = 'updated'
13
- unchanged = 'unchanged'
14
- failed = 'failed'
15
- deleted = 'deleted'
11
+ created = "created"
12
+ updated = "updated"
13
+ unchanged = "unchanged"
14
+ failed = "failed"
15
+ deleted = "deleted"
@@ -8,7 +8,7 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class CreativeAgentCapability(Enum):
11
- validation = 'validation'
12
- assembly = 'assembly'
13
- generation = 'generation'
14
- preview = 'preview'
11
+ validation = "validation"
12
+ assembly = "assembly"
13
+ generation = "generation"
14
+ preview = "preview"
@@ -8,9 +8,9 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class CreativeSortField(Enum):
11
- created_date = 'created_date'
12
- updated_date = 'updated_date'
13
- name = 'name'
14
- status = 'status'
15
- assignment_count = 'assignment_count'
16
- performance_score = 'performance_score'
11
+ created_date = "created_date"
12
+ updated_date = "updated_date"
13
+ name = "name"
14
+ status = "status"
15
+ assignment_count = "assignment_count"
16
+ performance_score = "performance_score"
@@ -8,7 +8,7 @@ from enum import Enum
8
8
 
9
9
 
10
10
  class CreativeStatus(Enum):
11
- processing = 'processing'
12
- approved = 'approved'
13
- rejected = 'rejected'
14
- pending_review = 'pending_review'
11
+ processing = "processing"
12
+ approved = "approved"
13
+ rejected = "rejected"
14
+ pending_review = "pending_review"